Как сделать схему xsd
Пример XML схемы
В этой главе будет показано, как писать XML схемы. Также вы узнаете, что схемы можно писать разными способами.
XML документ
Давайте посмотрим на следующий XML документ под названием «shiporder.xml»:
Приведенный выше XML документ состоит из корневого элемента shiporder с обязательным атрибутом orderid. Элемент shiporder содержит три дочерних элемента: orderperson, shipto и item. Элемент item используется дважды и содержит элемент title, необязательный элемент note, а также элементы quantity и price.
Строка xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» говорит XML парсеру, что этот документ должен быть проверен на соответствие схеме. Строка xsi:noNamespaceSchemaLocation=»shiporder.xsd» указывает, где именно находится схема (в данном случае она находится в той же папке, что и файл «shiporder.xml»).
Создание XML схемы
Теперь для приведенного выше XML документа создадим XML схему.
Создадим новый файл, который назовем «shiporder.xsd». Для создания XML схемы будем просто следовать за структурой XML документа и определять каждый встреченный элемент. Начнем со стандартной XML декларации, за которой опишем элемент xs:schema, который и определяет саму схему:
Здесь мы используем стандартное пространство имен (xs) и URI, ассоциированный с этим пространством имен, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.
Теперь мы должны определить элемент shiporder. У этого элемента есть атрибут, и он содержит другие элементы, поэтому мы рассматриваем его как элемент составного типа. Определения дочерних элементов элемента shiporder поместим в декларацию xs:sequence, что задает жесткую последовательность подэлементов:
Теперь определим элемент orderperson, который будет простого типа (так как он не содержит ни атрибуты, ни другие элементы). Его тип (xs:string) имеет префикс пространства имен, ассоциированного с XML схемой, что указывает на использование предопределенного типа данных:
Теперь нам нужно определить два элемента составного типа: shipto и item. Начнем с определения элемента shipto:
При помощи схем мы можем определить число возможных вхождений любого элемента. В этом нам помогут атрибуты maxOccurs и minOccurs. Атрибут maxOccurs задает максимальное число вхождений элемента, а атрибут minOccurs задает минимальное число вхождений. По умолчанию значение обоих атрибутов равно 1.
Теперь определим элемент item. Этот элемент может использоваться неограниченное число раз внутри элемента shiporder. Определить такую особенность элемента item позволяет присваивание атрибуту maxOccurs значения «unbounded». Это означает, что элемент item может использоваться столько раз, сколько нужно автору документа. Обратите внимание, что элемент note опционален. Определим это установив атрибут minOccurs в нулевое значение:
Теперь мы можем декларировать атрибут элемента shiporder. Поскольку это обязательный атрибут, используем определение use=»required».
Примечание: Атрибуты должны всегда декларироваться последними:
Вот полный код файла схемы «shiporder.xsd»:
Разделение схемы
Предыдущий способ компоновки схемы весьма прост, однако, когда документ достаточно сложен, при подобном способе соответствующая схема может оказаться довольно громоздкой, что сильно скажется на удобстве ее чтения и поддержки.
Следующий способ компоновки схемы заключается в том, что сначала определяются все элементы и атрибуты, а затем на эти определения создаются ссылки при помощи атрибута ref.
Ниже приводится новая компоновка файла схемы («shiporder.xsd»):
Использование поименованых типов
Третий способ компоновки схемы предполагает определение классов или типов, которые позволяют повторное использование определений элементов. Это становится возможным, если дать имена элементам simpleTypes и complexTypes, а затем указать на них при помощи атрибута type.
Третий способ компоновки файла схемы («shiporder.xsd»):
Элемент restriction указывает на то, что тип данных является производным от типов данных из пространства имен W3C XML Schema. Таким образом, следующий фрагмент кода означает, что значение элемента или атрибута должно быть строковым:
Однако гораздо чаще элемент restriction используется для накладывания ограничений на элементы. Посмотрите на следующие строки из приведенной выше схемы:
Этот фрагмент кода указывает, что значение элемента или атрибута должно быть строковым, ровно шесть символов в длину, и этими символами должны быть цифры от 0 до 9.
Генерация схемы xsd из файла xml
Утилита разработана мной для экономии времени при проектировании XDTO пакета.
При отправке данных какому-либо сервису в Интернете зачастую они должны быть сериализованы. Здесь есть два варианта:
Рассмотрим простой пример. Нужно отправить данные некого документа учетной системы сервису, который имеет архитектуру REST. Есть адрес конечной точки и шаблон xml, согласно которому должен быть сериализован документ. Пусть он выглядит следующим образом.
Здесь есть несколько вариантов реализации такого «шаблона»:
Первые два варианта доступны «из коробки» 1С:Предприятие. Далее расскажу про реализацию третьего с использованием утилиты xml2xsd, написанной на языке Java (для запуска необходима JVM). Утилита имеет CLI интерфейс. Ниже список ключей, которые можно передать при запуске:
Приведу полученную схему по шаблону xml выше. Использовался дизайн схемы Venetian Blind, указано целевое пространство имен. Пример команды, которой можно это сделать
После работы утилиты, полученную схему xsd можно импортировать в 1С:Предприятие в режиме Конфигуратор. Получится такой вот пакет XDTO
Я не просто употребил слово прототипирование, так как только разработчик схемы xsd (пакета XDTO) может знать, что некое поле имеет тип int, а не long или оно может быть пустым, а не обязательным к заполнению и т.д. Другими словами, такой пакет конечно можно использовать далее, но по факту это всего лишь заготовка. Также на качество генерируемой схемы влияет сложность файла xml. Удачи в разработке!
Проект доступен на github.
Скачать файлы
Специальные предложения
Но автору всё равно спасибо за альтернативу и открытые исходники, тем более на Java. Пока что таких материалов мало и они точно не лишние, а очень даже полезные.
Invoice = New Structure;
General = New Structure;
General.Insert(«currency», «USD»);
Invoice.Insert(«general», General);
Seller = New Structure;
Seller.Insert(«legalName», «Trade LLC»);
Invoice.Insert(«seller», Seller);
Я что то не понял, как такое возможно? Структуру же нельзя записать в XML
Обновление 03.01.20 07:40
См. также
FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы «Режим сравнения форм») на примере ERP 2.5 Промо
Данная публикация является продолжением описания функционирования обработки «FormCodeGenerator » в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.
21.12.2020 2112 12 huxuxuya 11
Предлагаю широкой общественности расширение А1Э, используемое в нескольких продуктивных базах для выполнения широкого круга задач.
14.08.2020 8849 0 Enigma 45
Консоль кода для управляемых форм
Консоль кода для управляемых форма с подсказками и подсветкой синтаксиса.
17.07.2020 15249 237 salexdv 235
Консоль запросов 9000
Простая и удобная консоль запросов 1С для управляемых форм 8.3, работает на любой конфигурации без ее модификации. Возможность использования как внешней обработки или в составе расширения. С перехватом любых запросов и поддержкой всех типов данных во временных таблицах. Анализ плана запроса, запроса на уровне СУБД. Обработка результата кодом.
24.02.2020 14220 291 kuza2000 128
Управляемая консоль запросов, отчетов 3.8.9 (расширение, внешняя обработка) Промо
Работа с запросом и СКД, Полная поддержка пакетных запросов, временных таблиц, Сравнение результатов, текстов, Разбор структуры запроса в виде дерева, Анализ плана запроса, Групповая обработка
14.08.2018 100946 2589 Evg-Lylyk 679
Помощник работы с идентификаторами объектов
Инструмент для расширенного анализа идентификаторов объектов.
24.01.2020 11522 45 YPermitin 32
Инструменты оптимизации для 1С на MS SQL Server
Набор базовых инструментов для поиска узких мест в работе 1С на MS SQL Server.
15.12.2019 17524 215 berezdetsky 23
CF & SQL : конструктор прямых запросов к БД 1С
Программа для чтения и анализа внутренней структуры данных 1С V8.х, Содержит конструктор прямых SQL запросов, позволяет обрабатывать и редактировать тексты SQL-запросов, выполнять прямые запросы к базе данных 1С и обрабатывать полученные результаты.
02.10.2019 21667 219 dmitrydemenew 48
10.06.2014 33875 63 kns77 87
Конвейер проверки качества кода
Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.
04.09.2019 27622 22 Stepa86 46
Модель объекта
Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.
30.06.2019 13415 0 vadim1980 5
Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD
Вы все еще тестируете свои конфигурации 1С вручную? Да вы просто тратите жизнь впустую! В данном туториале попробуем скрестить ADD и jenkins для автоматического запуска тестов.
03.06.2019 27972 6 ripreal1 90
Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо
Простая обработка для просмотра и установки значений предопределенных элементов. Позволяет заменить значение предопределенного элемента с одного элемента справочника на другой, удалить предопределенный элемент (снять пометку предопределенности), установить пометку переопределенного элемента. Проверяет предопределенные данные на наличие задвоений и отсутствующих. Работает со справочниками, планами счетов, планами видов характеристик, планами видов расчетов.
06.10.2014 155555 2631 ekaruk 167
Универсальный HTTP-сервис на платформе 1С, аля HTTP-сервер с примером
Практический кейс построения HTTP-сервиса, который работает по принципу HTTP-сервера, с разбором всех методов построения и разработки класса задач построения личных кабинетов и сопряжения их с центральной базой.
13.05.2019 31310 135 Diversus 42
Групповая проверка доработок
Обработка для массовой проверки доработок конфигурации: Открытие форм, Печать, Формирование отчетов, Проведение документов, Запись справочников, ПВХ, ПВР. Выдает список обнаруженных ошибок. Рекомендуется применять для тестирования обновленной конфигурации, перед установкой пользователям. В коде используются универсальные методы поэтому подходит для большинства конфигураций, построенных на базе библиотеки стандартных подсистем. Проверялась на Зарплата и управление персоналом КОРП 3.1.8.216, Управление торговлей 11, 1С:ERP Управление предприятием 2.4.7.141, Бухгалтерия предприятия КОРП 3.0.68.66.
05.05.2019 16312 107 sapervodichka 23
Шаблон http-сервиса для вашего проекта
Http-сервис для обмена данными в формате JSON. Обработчики этого сервиса находятся во внешней обработке, что позволяет дорабатывать его без изменения конфигурации. Также прилагаю пример мобильного приложения для работы с данным сервисом (получает номенклатуру и остатки на складе). Сервис очень быстро разворачивается и масштабируется под ваши задачи.
04.05.2019 20783 78 MarkoSokolov 48
Загрузка данных из М-Аптеки+ в 1С:Бухгалтерия 8 (ред. 3.0) Промо
Обработка для загрузки файлов выгрузки из программы для автоматизации аптек и аптечных сетей М-Аптека+ в 1С:Бухгалтерия 8, редакция 3.0.
11.07.2014 36337 70 1C_MApteka 37
Расширение «Быстрая проверка кода» для конфигурации 1С:Автоматизированная проверка конфигураций
Расширение для конфигурации «1С:Автоматизированная проверка конфигураций», позволяющее проверять произвольный код.
26.03.2019 20986 60 Bazil 27
Настройка отладки на сервере 1С
Обработка для настройки отладки на сервере, включение отладки COM-соединений и отладки Web-сервисов.
26.03.2019 29423 125 frkbvfnjh 41
Обмен без правил. От простого к сложному
16.01.2019 25598 nbeliaev 26
[Расширение] Контроль отрицательных остатков по регистру бухгалтерии при проведении Промо
Расширение позволяет без изменений конфигурации проверять остатки по регистру бухгалтерии при проведении каждого документа и запрещает проведение при появлении отрицательных остатков после проведения.
17.08.2015 48557 166 ekaruk 32
Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.
09.01.2019 47801 259 informa1555 234
Конфигурация-подсистема для управления задачами с базовым функционалом, который, однако, может удовлетворить довольно широкий спектр запросов. Есть статусы и приоритеты, учёт трудозатрат по исполнителям и даже базовые разграничения по правам. А открытый исходный код позволит на базе данной конфигурации развить систему до любого уровня сложности.
17.12.2018 21810 111 for_sale 38
Построение XML-схем Building XML Schemas
Классы в пространстве имен System.Xml.Schema сопоставляются со структурами, определенными в рекомендациях по схемам XML консорциума W3C, и могут использоваться для сборки схем XML в памяти. The classes in the System.Xml.Schema namespace map to the structures defined in the World Wide Web Consortium (W3C) XML Schema Recommendation and can be used to build XML schemas in-memory.
Построение схемы XML Building an XML Schema
В следующем примере кода для построения схемы XML в памяти используется API модели SOM. In the code examples that follow, the SOM API is used to build a customer XML schema in-memory.
Создание элемента и атрибутов Creating Element and Attributes
Примеры кода собирают пользовательскую схему снизу вверх, вначале создавая дочерние элементы, атрибуты и их соответствующие типы, а затем элементы верхнего уровня. The code examples build the customer schema from the bottom up, creating the child elements, attributes, and their corresponding types first, and then the top-level elements.
Создание типов схемы Creating Schema Types
Содержимое элементов и атрибутов определяется их типом. The content of elements and attributes is defined by their types. Чтобы создать элементы и атрибуты со встроенными типами схемы, свойство SchemaTypeName классов XmlSchemaElement или XmlSchemaAttribute принимает значение соответствующего полного имени встроенного типа с помощью класса XmlQualifiedName. To create elements and attributes whose types are one of the built-in schema types, the SchemaTypeName property of the XmlSchemaElement or XmlSchemaAttribute classes are set with the corresponding qualified name of the built-in type using the XmlQualifiedName class. Чтобы создать определяемый пользователем тип для элементов и атрибутов, формируется новый простой или сложный тип с помощью классов XmlSchemaSimpleType или XmlSchemaComplexType. To create a user-defined type for elements and attributes, a new simple or complex type is created using the XmlSchemaSimpleType or XmlSchemaComplexType class.
Чтобы создать неименованные простые или сложные типы, являющиеся анонимными потомками элемента или атрибута (к атрибутам применяются только простые типы), присвойте свойству SchemaType класса XmlSchemaElement или класса XmlSchemaAttribute значение неименованного простого или сложного типа, а не свойства SchemaTypeName классов XmlSchemaElement или XmlSchemaAttribute. To create unnamed simple or complex types that are anonymous children of an element or attribute (only simple types apply for attributes), set the SchemaType property of the XmlSchemaElement or XmlSchemaAttribute classes to the unnamed simple or complex type, instead of the SchemaTypeName property of the XmlSchemaElement or XmlSchemaAttribute classes.
Создание и компиляция схем Creating and Compiling Schemas
В этой точке дочерние элементы и атрибуты, их соответствующие типы и элемент верхнего уровня Customer были созданы в памяти с помощью API модели SOM. At this point, the child elements and attributes, their corresponding types, and the top-level Customer element have been created in-memory using the SOM API. В следующем примере кода с помощью класса XmlSchema создается элемент схемы, к нему добавляются элементы верхнего уровня и типы с помощью свойства XmlSchema.Items и полная схема компилируется с помощью класса XmlSchemaSet и выводится на консоль. In the following code example, the schema element is created using the XmlSchema class, the top-level elements and types are added to it using the XmlSchema.Items property and the complete schema is compiled using the XmlSchemaSet class and written to the console.
Метод XmlSchemaSet.Compile проверяет пользовательскую схему по правилам схемы XML и делает доступными свойства результатов проверки компиляции схемы. The XmlSchemaSet.Compile method validates the customer schema against the rules for an XML schema and makes post-schema-compilation properties available.
Все свойства результатов проверки компиляции схемы в API модели SOM отличаются от информационного набора окончательной проверки схемы. All post-schema-compilation properties in the SOM API differ from the Post-Schema-Validation-Infoset.
Объект ValidationEventHandler, добавленный к набору XmlSchemaSet, является делегатом, вызывающим метод ответного вызова ValidationCallback для обработки ошибок и предупреждений проверки схемы. The ValidationEventHandler added to the XmlSchemaSet is a delegate that calls the callback method ValidationCallback to handle schema validation warnings and errors.
Ниже приводится полный пример кода, а пользовательская схема выводится на консоль. The following is the complete code example, and the customer schema written to the console.