Как сделать схему 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

7f9b538cbf7b77bea84a03d23c4d498a

Я не просто употребил слово прототипирование, так как только разработчик схемы xsd (пакета XDTO) может знать, что некое поле имеет тип int, а не long или оно может быть пустым, а не обязательным к заполнению и т.д. Другими словами, такой пакет конечно можно использовать далее, но по факту это всего лишь заготовка. Также на качество генерируемой схемы влияет сложность файла xml. Удачи в разработке!

Проект доступен на github.

Скачать файлы

Специальные предложения

f71a8c4e70c0ff03708038e2b0210df8

9c2808762ec294cd4c55532520b9c521

895fb1e0f7afc3c0ed0d73bf5ee9d9d0

b34b292ed32e9501f98cc31df406353e

egais promo

789363929b9f37ddc5641a069a5fe52e

bd02fb2c01a58fa8781aab89e5238f05

14bbcf7a413e38548eb08d2058ea5ba5

cf439038b749f39f8444385c9576d78d

199e2be4fd21dd8f4209d8ec34616c76

5b19cd6c4494a88b2abefce64a1b7565

Но автору всё равно спасибо за альтернативу и открытые исходники, тем более на 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.

Источник