Xml на основе xsd xml: Как создать XML и XSD схему и наоборот
XSD — умный XML / Хабр
XSD — это язык описания структуры XML документа. Его также называют XML Schema. При использовании XML Schema XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.
Такой подход позволяет объектно-ориентированным языкам программирования легко создавать объекты в памяти, что, несомненно, удобнее, чем разбирать XML как обычный текстовый файл.
Кроме того, XSD расширяем, и позволяет подключать уже готовые словари для описания типовых задач, например веб-сервисов, таких как SOAP.
Стоит также упомянуть о том, что в XSD есть встроенные средства документирования, что позволяет создавать самодостаточные документы, не требующие дополнительного описания.
Рассмотрим в качестве примера XSD документ, описывающий часть структуры аккаунта на хабре.
Текст XSD схемы и XML документ, соответствующий этой схеме я не стал включать в статью из-за их размера.
Первая строчка схемы указывает, что документ является XML документом и использует кодировку UTF-8.
<?xml version="1.0" encoding="UTF-8"?>
Со следующей строки начинается описания главного элемента документа — habra_user.
<xs:element name="habra_user">
Строки, документирующие элемент:
<xs:annotation>
<xs:documentation>Главный элемент схемы. Описывает пользователя хабра</xs:documentation>
</xs:annotation>
Тег <xs:complexType> описывает «сложный» тип данных user_name. При желании его можно вынести как отдельный тип данных, по аналогии с contact_info. Для этого, нужно блок <xs:complexType> перенести в <xs:schema> и указать атрибут name, а элементу задать атрибут type.
Элементы user_name, first_name, last_name имеют строковый тип и описывают пользователя, имя и фамилию владельца аккаунта.
Элемент date_of_birth имеет тип данных «дата» и описывает дату рождения.
Дату регистрации описывает register_date, имеющий собственный тип данных customDateTime. Значение этого тега будет задаваться с помощью атрибута value. На это указывают строки.
<xs:attribute name="value" use="required">
При этом атрибут — обязательный. Чтобы значение соответствовало требованиям, опишем «проверки»:
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="19"/>
<xs:pattern value="[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]"/>
</xs:restriction>
</xs:simpleType>
В таком случае длина строки будет всегда 19, это задано тегом <xs:length> и само значение будет соответствовать шаблону, указанным в теге <xs:pattern>.
Элементы contact_info и blog — массивы, на это указывает атрибут maxOccurs=«unbounded».
Тег <xs:choice> определяет то, что вложенным элементом будет один из элементов ICQ или linkedin.
Тег <xs:sequence> указывает на то, что вложенные элементы будут blog_name и blog_url именно в такой последовательности. Если последовательность не важна, то нужно использовать тег <xs:all>.
Дополнительно о XSD схемах можно почитать Wikipedia и W3C. Для создания макета была использована программа Altova XMLSpy.
Спасибо за внимание!
В чем разница между XML и XSD?
берите пример
<root>
<parent>
<child_one>Y</child_one>
<child_two>12</child_two>
</parent>
</root>
и создайте xsd для этого:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="child_one" type="xs:string" />
<xs:element name="child_two" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
что невозможно с XSD: хотел бы написать его первым, так как список очень мал
1) Вы не можете проверить узел/атрибут, используя значение другого узла/атрибута.
2) это ограничение : элемент, определенный в XSD-файле, должен быть определен только с одним типом данных. [в приведенном выше примере, для <child_two>
появляется в другом <parent>
node, тип данных не может быть определен, кроме int.
3) Вы не можете игнорировать проверку элементов и атрибутов, т. е., если элемент/атрибут появляется в XML, он должен быть четко определен в соответствующем XSD. Хотя использование <xsd:any>
позволяет, но у него есть свои правила. Соблюдение, которое приводит к ошибке проверки. Я пытался применить подобный подход и, конечно, не преуспел.—20—>вот Q & A
что возможно с XSD:
1) Вы можете проверить правильную иерархию узлов XML. [xsd определяет, какой ребенок должен находиться под каким родителем и т. д., соблюдение которого будет считаться ошибкой, в приведенном выше примере child_two не может быть непосредственным потомком root, но это ребенок тега «parent», который, в свою очередь, является дочерним узлом «root», существует иерархия..]
2)Вы можете определить тип данных значений узлов. [в приведенном выше примере child_two не может иметь никаких других данных, кроме числа]
3) Вы также можно определить пользовательские типы данных, [например, для node <month>
возможные данные могут быть одним из 12 месяцев.. поэтому вам нужно определить все 12 месяцев в новом типе данных, записывая все имена 12 месяцев в качестве значений перечисления .. проверка показывает ошибку, если входной XML содержит любое другое значение, чем эти 12 значений .. ]
4) Вы можете поставить ограничение на появление элементов, используя minOccurs и maxOccurs, значения по умолчанию-1 и 1.
.. и многое другое …
99
автор: InfantPro’Aravind’
Пример XML схемы
В этой главе будет показано, как писать XML схемы. Также вы узнаете, что схемы можно писать разными способами.
XML документ
Давайте посмотрим на следующий XML документ под названием «shiporder.xml»:
<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
Приведенный выше 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, который и определяет саму схему:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>
Здесь мы используем стандартное пространство имен (xs) и URI, ассоциированный с этим пространством имен, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.
Теперь мы должны определить элемент shiporder. У этого элемента есть атрибут, и он содержит другие элементы, поэтому мы рассматриваем его как элемент составного типа. Определения дочерних элементов элемента shiporder поместим в декларацию xs:sequence, что задает жесткую последовательность подэлементов:
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType&g
Работа с XML-схемами в InfoPath
-
- Чтение занимает 16 мин
В этой статье
В шаблоне формы, создаваемом с помощью Microsoft InfoPath, схема XML (XSD) используется для выполнения проверки данных в XML, который представляет вводные, отредактированные и выводные данные из формы InfoPath. Каждый шаблон формы, созданный в конструкторе форм InfoPath, содержит как минимум один файл схемы XSD (XSD), используемый для проверки во время выполнения.A form template that you create with Microsoft InfoPath uses an XML Schema (XSD) to perform structural and data validation on the XML that is input, edited, and output from an InfoPath form. Every form template created in the InfoPath form designer contains at least one XSD schema file (.xsd) that is used for validation at run time.
Примечание
Содержащиеся в данной статье сведения предназначены для шаблонов форм, разработанных для использования в редакторе InfoPath. Совместимые с браузером шаблоны форм имеют более строгие требования к схемам XSD. Дополнительные сведения см. в документации о схемах XML в совместимых с браузером шаблонах форм, доступной на веб-сайте MSDN.The information contained in this topic applies to form templates designed for use in the InfoPath editor. Browser-compatible form templates have stricter XSD Schema requirements. For more information, see the documentation about XML Schemas in browser-compatible form templates available on MSDN.
Использование созданных во внешней среде схем XMLUsing Externally-authored XML Schemas
Чтобы загрузить файл схемы XSD, созданный вне приложения InfoPath, выполните следующие действия.To load an XSD schema file that was authored outside of InfoPath, follow these steps.
Создание шаблона формы на основе внешней схемыTo create a form template based on an external schema
В Backstage, нажмите Создать, щелкните XML или схему в разделе Дополнительные шаблоны форм, а затем нажмите Создать форму.In the Backstage, click New, click XML or Schema under Advanced Form Templates, and then click Design This Form.
В мастере источника данных, укажите нужный файл схемы XSD, а затем нажмите кнопку Далее и следуйте инструкциям на оставшихся страницах мастера.In the Data Source Wizard, specify the XSD schema file you want to use, and then click Next and complete the remaining pages of the wizard.
Неподдерживаемые конструкции XSDUnsupported XSD Constructs
В следующих разделах описываются конструкции XSD, которые приложение InfoPath не может обрабатывать во время выполнения. Создавая шаблоны форм в конструкторе форм InfoPath, этих конструкций рекомендуется избегать.The following sections describe XSD constructs that InfoPath cannot handle at run time. Avoid these constructs when creating a form template in the InfoPath form designer.
Типы ENTITY и ENTITIESENTITY and ENTITIES Types
Для типов ENTITY и ENTITIES требуется определение типа документа (DTD), которое не поддерживается в InfoPath. В InfoPath не допускается разработка шаблона формы по такой схеме и выводится сообщение об ошибке с рекомендацией изменить тип ENTITY на тип NCName, производным которого является ENTITY.The ENTITY and ENTITIES types require a document type definition (DTD) for validation, which InfoPath does not support. InfoPath does not allow you to design a form template against such a schema and displays an error message that recommends changing the ENTITY type to the NCName type from which ENTITY derives.
Примечание
Если шаблон формы InfoPath создается вручную не в режиме конструктора и в этом шаблоне используется XSD с типами ENTITY и ENTITIES, шаблон формы может работать во время выполнения в случае, если файл Template.xml содержит необходимый DTD для этих типов.If you manually author an InfoPath form template outside of design mode, and it uses an XSD that includes ENTITY and ENTITIES types, the form template may work at run time if the Template.xml file contains the required DTD for these types.
Обязательный элемент «xsd:any»Required xsd:any Element
Экземпляр элемента подстановочного знака xsd:any, то есть экземпляр элемента xsd:any
Шаблоны проектирования XSD / Блог компании ООО «ЦИТ» / Хабр
В жизни каждого аналитика и программиста наступает такой день, когда он узнает о существовании шаблонов (паттернов) проектирования XML-схем и его жизнь меняется. Для меня, например, с этого знания началось постижение красоты проектирования.
Сегодня хочу поговорить о том, какие есть шаблоны проектирования XSD, о преимуществах и недостатках каждого, и почему мы для своих задач выбрали «Райский сад».
Для примера возьмем следующий XML-документ в качестве источника данных.
<?xml version="1.0" encoding="UTF-8"?>
<Customer>
<CustomerId>100</CustomerId>
<FirstName>Павел</FirstName>
<LastName>Орлов</LastName>
<Address>
<StreetAddress>Угрешская 2</StreetAddress>
<City>Москва</City>
<Zip>115088</Zip>
</Address>
</Customer>
И посмотрим, как можно описать одну и ту же структуру XML-документа разными способами.
В основе разделения на шаблоны лежит принцип определения глобальных элементов и/или типов данных внутри XSD.
Матрешка (Russian Doll)
Суть шаблона в том, что схема является зеркалом описываемого ею XML-документа: если сложные элементы содержат внутри себя другие сложные элементы, а те в свою очередь содержат простые, то и в XSD описания таких элементов будут вложены друг в друга. Название шаблон получил в честь известной во всем мире нашей куклы-матрешки, по аналогии с тем, как дочерние элементы в шаблоне инкапсулируются в родительские.
Схема, описывающая структуру нашего файла-источника с использованием шаблона «Матрешка», выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Customer" xmlns:tns="http://www.example.org/Customer" elementFormDefault="qualified">
<xsd:element name="Customer">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerId" type="xsd:int" />
<xsd:element name="FirstName" type="xsd:string" />
<xsd:element name="LastName" type="xsd:string" />
<xsd:element name="Address">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="StreetAddress" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="Zip" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Характеристики шаблона:
- Непрозрачность содержания. Содержание XSD непрозрачно для других схем, и даже для других частей той же схемы. Вследствие чего ни один из типов или элементов внутри XSD не может быть повторно использован.
- Скрытые области. Области схемы, в которой определяются локальные элементы («City» и «Zip» в примере), локализованы внутри корневого элемента («Address»). В результате если задать в схеме elementFormDefault = «unqualified», то пространства имен локальных элементов («City» и «Zip») скрыты в пределах схемы.
- Независимость. При такой конструкции каждый компонент схемы является автономным (т.е. не взаимосвязан с другими компонентами). Следовательно, изменения отдельных компонентов будет иметь ограниченное влияние. Например, если добавить в состав адреса элемент «FlatNumber», это никак не повлияет на другие элементы схемы.
- Компактность. Благодаря такой конструкции все связанные по смыслу данные объединяются в схеме в автономные компоненты, т.е. компоненты являются компактными.
Салями (Salami Slice)
Суть шаблона в том, что описываемый XML-документ разделяется на составные элементы, каждый из которых описывается в XSD как глобальный. Затем описанные элементы соединяются воедино.
Схема, описывающая структуру файла-источника с использованием шаблона «Салями», выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Customer"
xmlns:tns="http://www.example.org/Customer"
elementFormDefault="qualified">
<xsd:element name="CustomerId" type="xsd:int" />
<xsd:element name="FirstName" type="xsd:string" />
<xsd:element name="LastName" type="xsd:string" />
<xsd:element name="StreetAddress" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="Zip" type="xsd:string"/>
<xsd:element name="Customer">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:CustomerId" />
<xsd:element ref="tns:FirstName" />
<xsd:element ref="tns:LastName" />
<xsd:element name="Address">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:StreetAddress" />
<xsd:element ref="tns:City" />
<xsd:element ref="tns:Zip" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Характеристики шаблона:
- Прозрачность содержания. Все элементы могут видеть другие схемы, а также другие компоненты этой XSD.
- Глобальность. Так как все элементы схемы объявлены глобально, то независимо от значения elementFormDefault пространства имен схемы в XML-документе будет показан весь набор атрибутов (что-то может быть пустым).
- Взаимозависимость. При такой конструкции сложные элементы ссылаются на другие части схемы, то есть зависят от них. Следовательно, изменение отдельных компонентов могут повлечь обширные изменения всей схемы.
- Компактность. Благодаря такой конструкции все связанные по смыслу данные объединяются в схеме в автономные компоненты, т. е. компоненты являются компактными.
Венецианские жалюзи (Venetian Blind)
Суть шаблона в том, что описываемый XML-документ разделяется на составные типы, каждый из которых описывается в XSD как глобальный. Затем объявляется корневой элемент, соответствующий глобальному типу, соединяющему схему воедино.
Схема, описывающая структуру файла-источника с использованием шаблона «Венецианские жалюзи», выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Customer"
xmlns:tns="http://www.example.org/Customer"
elementFormDefault="qualified">
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="StreetAddress" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="Zip" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CustomerType">
<xsd:sequence>
<xsd:element name="CustomerId" type="xsd:int" />
<xsd:element name="FirstName" type="xsd:string" />
<xsd:element name="LastName" type="xsd:string" />
<xsd:element name="Address" type="tns:AddressType" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Customer" type="tns:CustomerType" />
</xsd:schema>
Характеристики шаблона:
- Прозрачность содержания. Типы данных видны из других схем, а также видны компонентам этой XSD.
- Максимальное скрытие имен. Объявления элементов локальны, поэтому шаблон имеет максимальный потенциал для скрытия имен.
- Простое управление скрытием пустых атрибутов. Если пространства имен скрыты, то показывать или нет пустые атрибуты в документах управляется одним переключателем elementFormDefault.
- Взаимозависимость. При такой конструкции сложные типы данных ссылаются на другие части схемы, то есть зависят от них. Следовательно, изменение отдельных компонентов могут повлечь обширные изменения всей схемы.
- Компактность. Благодаря такой конструкции все связанные по смыслу данные объединяются в схеме в автономные компоненты, т. е. компоненты являются компактными.
Райский сад (Garden of Eden)
«Райский сад» хорош тем, что определяет каждый элемент и составной тип данных как глобальный. Это позволяет ссылаться на любой тип или элемент в пределах одного XSD или из любой другой XSD и даже из WSDL. Только так можно полностью контролировать семантику и типов и элементов.
Схема, описывающая структуру файла-источника с использованием шаблона «Райский сад», выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Customer"
xmlns:tns="http://www.example.org/Customer"
elementFormDefault="qualified">
<xsd:element name="CustomerId" type="xsd:int"/>
<xsd:element name="FirstName" type="xsd:string"/>
<xsd:element name="LastName" type="xsd:string"/>
<xsd:element name="StreetAddress" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="Zip" type="xsd:string"/>
<xsd:element name="Address" type="tns:AddressType"/>
<xsd:element name="Customer" type="tns:CustomerType"/>
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element ref="tns:StreetAddress"/>
<xsd:element ref="tns:City"/>
<xsd:element ref="tns:Zip"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CustomerType">
<xsd:sequence>
<xsd:element ref="tns:CustomerId"/>
<xsd:element ref="tns:FirstName"/>
<xsd:element ref="tns:LastName"/>
<xsd:element ref="tns:Address"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Характеристики шаблона:
- Максимальная прозрачность содержания. И типы, и элементы данных видны из других схем, а также видны компонентам этой XSD.
- Максимальное раскрытие имен. Ничего локально не определяется, поэтому видимость имен максимальная.
- Взаимозависимость. При такой конструкции сложные типы данных и элементы ссылаются на другие части схемы, то есть зависят от них. Следовательно, изменение отдельных компонентов могут повлечь обширные изменения всей схемы.
- Громоздкость. Связанные по смыслу данные «размазаны» по определению типа и элемента. «Читать» такую схему сложнее.
Выбор шаблона
При выборе шаблона важно учитывать несколько критериев:
- Насколько возможно повторное использование компонентов схемы;
- Насколько легко со схемой работать;
- Насколько компоненты схемы должны быть взаимозависимы или независимы.
Часто при выборе шаблона проектирования приходится искать баланс между возможностью повторно использовать компоненты схемы и глубиной взаимосвязи между компонентами. На рисунке показан потенциал каждого из шаблонов в разрезе этих двух аспектов.
Те схемы, в которых хорошо поддерживается повторное использование компонентов, с другой стороны имеют сильные взаимосвязи между компонентами. При необходимости что-то поменять в такой схеме разработчик схемы может столкнуться с тем, что менять придется много связанных элементов и/или типов. Такими схемами впоследствии трудно управлять.
В целом можно вывести следующие правила выбора шаблона:
- если повторное использование компонентов схемы не является необходимым, если важнее удобство использования XSD разработчиками, и строгой необходимости контролировать имена компонентов нет, то следует выбирать «Матрешку»;
- если повторное использование компонентов важнее удобства для разработчиков, а имена элементов данных нужно контролировать в пределах всей системы, то следует выбирать «Салями»;
- если вдобавок к предыдущему пункту важно контролировать наименования типов данных и иметь возможность повторно использовать типы данных, следует выбирать «Райский сад»;
- «Венецианские жалюзи» подойдут в случае, если важно и повторное использование компонентов, и свобода в определении их локальных имен (или возможность скрыть их внутри схемы).
Нам в проекте важнее всего было повторное использование типов и элементов схемы и во вторую очередь тотальный семантический контроль имен. Выбор шаблона был очевиден – Райский сад.
Небольшое лирическое отступление. Самым интересным применением шаблонов проектирования XML-схем на моей памяти был и остается гипноз аудитории. Один наш титулованный аналитик любит брать инициативу в свои руки через рассказ на эту тему. Засекала время, через 5 минут взгляд слушателей тускнеет, и они уходят куда-то далеко в себя. На «Райском саде» сознание большинства отключается.
И в заключении хочу добавить, что миксы шаблонов тоже возможны, мы с ними встречались.
Источники и ресурсы:
XML-Schema спецификация
Schema scope: Primer and best practices
Introducing Design Patterns in XML Schemas
Как сопоставлять XML-элементы с ячейками карты XML
Для импорта и экспорта данных XML в Excel удобно использовать карту XML, которая связывает XML-элементы с данными в ячейках для получения нужных результатов. Чтобы создать такую карту, нужны файл схемы XML (XSD-файл) и файл данных XML (XML-файл). После создания карты XML можно сопоставить XML-элементы нужным образом.
Совет: Дополнительные сведения об использовании XML в Excel см. в этом обзоре XML в Excel.
-
Поиск или создание файлов схемы XML и данных XML -
Использование образцов файлов схемы XML и данных XML -
Создание карты XML -
Сопоставление XML-элементов
Поиск или создание файлов схемы XML и данных XML
Файлы схемы XML и данных XML уже могут быть доступны, если они были созданы другой базой данных или приложением. Например, у вас могут быть бизнес-приложение, которое экспортирует данные в эти форматы XML-файлов, коммерческий веб-сайт или веб-служба, которые поставляют такие XML-файлы, или пользовательское приложение, разработанное в вашем ИТ-отделе, которое автоматически создает такие XML-файлы.
Если нужные XML-файлы отсутствуют, их можно создать, сохранив в текстовом файле данные, которые требуется использовать. Затем с помощью Access и Excel этот текстовый файл можно преобразовать в нужные XML-файлы. Ниже описано, как это сделать.
Access
-
Импортируйте текстовый файл, который требуется преобразовать, и свяжите его с новой таблицей.
-
Выберите команду Файл > Открыть.
-
В диалоговом окне Открытие найдите и откройте базу данных, в которой требуется создать новую таблицу.
-
На вкладке Внешние данные выберите команду Текстовый файл и выполните инструкции для каждого шага, связав таблицу с нужным текстовым файлом.
Access создает новую таблицу, имя которой отображается в области навигации.
-
-
Экспортируйте данные из связанной таблицы в файл XML-данных и файл схемы XML.
-
На вкладке Внешние данные выберите команду XML-файл (в группе Экспорт).
-
В диалоговом окне Экспорт — XML-файл укажите имя и формат файла и нажмите кнопку ОК.
-
-
Выйдите из Access.
Excel
-
Создайте карту XML на основе файла схемы XML, экспортированного из Access.Если открывается диалоговое окно Несколько корней, выберите элемент dataroot, чтобы создать XML-таблицу.
-
Создайте XML-таблицу, сопоставив элемент dataroot. Дополнительные сведения см. в разделе Сопоставление XML-элементов.
-
Импортируйте XML-файл, экспортированный из Access.
Примечания:
-
В Excel не поддерживаются некоторые типы конструкций элементов схем XML. Ниже перечислены конструкции элементов схем XML, которые невозможно импортировать в Excel.
-
<any>. Этот элемент позволяет вам включить в схему элементы, не объявленные в схеме. -
<anyAttribute>. Этот элемент позволяет вам включить в схему атрибуты, не объявленные в схеме. -
Рекурсивные структуры. Типичный пример рекурсивной структуры — иерархия сотрудников и руководителей, в которой одни и те же XML-элементы вложены на нескольких уровнях. В Excel не поддерживаются рекурсивные структуры глубиной более одного уровня. -
Абстрактные элементы. Эти элементы объявляются в схеме, но никогда не используются как элементы. Абстрактные элементы зависят от других элементов, которыми они заменяются. -
Группы подстановки. Эти группы позволяют менять элемент везде, где встречается ссылка на него. Принадлежность элемента к группе подстановки другого элемента указывается с помощью атрибута <substitutionGroup>. -
Смешанное содержимое. Это содержимое объявляется при определении сложного типа с помощью параметра mixed=»true». Excel не поддерживает простое содержимое сложного типа, но поддерживает дочерние теги и атрибуты, определенные в этом сложном типе.
Использование образцов файлов схемы XML и данных XML
В приведенном ниже примере данные содержат базовые элементы и структуры XML, которые можно использовать для проверки сопоставления XML, если отсутствуют XML-файлы или текстовые файлы для создания нужных XML-файлов. Вы можете сохранить этот пример данных в файлы на своем компьютере, сделав следующее.
-
Выделите текст примера файла, который требуется скопировать, и нажмите клавиши CTRL+C.
-
Запустите Блокнот и нажмите клавиши CTRL+V, чтобы вставить текст примера.
-
Нажмите клавиши CTRL+S, чтобы сохранить файл с именем и расширением, указанными для скопированного образца данных.
-
Нажмите клавиши CTRL+N в приложении Блокнот и повторите шаги 1–3, чтобы создать файл для текста второго примера.
-
Выйдите из Блокнота.
Образец данных XML (Расходы.xml)
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <Root> <EmployeeInfo> <Name>Jane Winston</Name> <Date>2001-01-01</Date> <Code>0001</Code> </EmployeeInfo> <ExpenseItem> <Date>2001-01-01</Date> <Description>Airfare</Description> <Amount>500.34</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-01</Date> <Description>Hotel</Description> <Amount>200</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-01</Date> <Description>Taxi Fare</Description> <Amount>100.00</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-01</Date> <Description>Long Distance Phone Charges</Description> <Amount>57.89</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-01</Date> <Description>Food</Description> <Amount>82.19</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-02</Date> <Description>Food</Description> <Amount>17.89</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-02</Date> <Description>Personal Items</Description> <Amount>32.54</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-03</Date> <Description>Taxi Fare</Description> <Amount>75.00</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-03</Date> <Description>Food</Description> <Amount>36.45</Amount> </ExpenseItem> <ExpenseItem> <Date>2001-01-03</Date> <Description>New Suit</Description> <Amount>750.00</Amount> </ExpenseItem> </Root>
Образец схемы XML (Расходы.xsd)
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Root"> <xsd:complexType> <xsd:sequence> <xsd:element minOccurs="0" maxOccurs="1" name="EmployeeInfo"> <xsd:complexType> <xsd:all> <xsd:element minOccurs="0" maxOccurs="1" name="Name" /> <xsd:element minOccurs="0" maxOccurs="1" name="Date" /> <xsd:element minOccurs="0" maxOccurs="1" name="Code" /> </xsd:all> </xsd:complexType> </xsd:element> <xsd:element minOccurs="0" maxOccurs="unbounded" name="ExpenseItem"> <xsd:complexType> <xsd:sequence> <xsd:element name="Date" type="xsd:date"/> <xsd:element name="Description" type="xsd:string"/> <xsd:element name="Amount" type="xsd:decimal" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
Создание карты XML
Чтобы создать карту XML, добавьте схему XML в книгу. Можно скопировать схему из файла схемы XML (XSD-файла) или позволить Excel попытаться построить такую схему на основе файла данных XML (XML-файла).
-
На вкладке Разработчик выберите команду Источник.
Если вкладка Разработчик не отображается, см. раздел Отображение вкладки «Разработчик».
-
В области задач Источник XML нажмите кнопку Карты XML, а затем нажмите кнопку Добавить.
-
В списке Папка выберите диск, папку или веб-адрес, где расположен нужный файл.
-
Щелкните файл, а затем нажмите кнопку Открыть.
-
Для файла схемы XML будет создана карта XML, основанная на данной схеме XML. Если откроется диалоговое окно Несколько корней, выберите один из корневых узлов, определенных в файле схемы XML.
-
Для файла данных XML Excel попытается определить схему XML на основе данных, а затем создать карту XML.
-
-
Нажмите кнопку ОК.
Карта XML отображается в области задач Источник XML.
Сопоставление XML-элементов
XML-элементы сопоставляются с отдельно сопоставленными ячейками и повторяющимися ячейками в XML-таблицах, что позволяет создать связь между такой ячейкой и элементом XML-данных в схеме XML.
-
На вкладке Разработчик выберите команду Источник.
Если вкладка Разработчик не отображается, см. раздел Отображение вкладки «Разработчик».
-
В области задач Источник XML выделите элементы, которые требуется сопоставить.
Чтобы выделить несмежные элементы, щелкните один из них, а затем, удерживая нажатой клавишу CTRL, поочередно щелкните все нужные элементы.
-
Чтобы сопоставить элементы, выполните указанные ниже действия.
-
Щелкните выделенные элементы правой кнопкой мыши и выберите команду Сопоставить элемент.
-
В диалоговом окне Сопоставление XML-элементов выберите ячейку и нажмите кнопку ОК.
Совет: Вы также можете перетащить выделенные элементы в то место книги, где они должны отображаться.Каждый такой элемент будет выделен в области задач XML-источник полужирным шрифтом. Это означает, что данный элемент сопоставлен.
-
-
Выберите, как должны обрабатываться подписи данных и заголовки столбцов.
-
При перетаскивании в книгу неповторяющегося XML-элемента для создания отдельно сопоставленной ячейки отображается смарт-тег с тремя командами, которые позволяют управлять расположением заголовка или подписи.
Данные уже содержат заголовок. Выберите этот параметр, чтобы проигнорировать заголовок XML-элемента, так как данная ячейка уже имеет заголовок (слева от данных или над ними).
Заголовок XML слева. Выберите этот параметр, чтобы использовать заголовок XML-элемента в качестве подписи ячейки (слева от данных).
Заголовок XML сверху. Выберите этот параметр, чтобы использовать заголовок XML-элемента в качестве заголовка ячейки (над данными). -
При перетаскивании в книгу повторяющегося XML-элемента для создания повторяющихся ячеек в XML-таблице имена XML-элементов автоматически используются в качестве заголовков столбцов этой таблицы. Но эти заголовки столбцов можно изменить на любые другие, редактируя ячейки заголовка столбца.
В области задач XML-источник нажмите Параметры, чтобы уточнить поведение XML-таблицы.
Автоматическое объединение элементов при сопоставлении. Если этот флажок установлен, XML-таблицы будут автоматически расширяться при перетаскивании элемента в ячейку, смежную с этой XML-таблицей.
Данные с заголовками. Если этот флажок установлен, существующие данные могут использоваться как заголовки столбцов при сопоставлении повторяющихся элементов листу.
Примечания:-
Если все команды XML затенены и XML-элементы не удается сопоставить с ячейками, возможно, к книге предоставлен общий доступ. Чтобы проверить это и при необходимости отключить общий доступ, на вкладке Рецензирование выберите команду Доступ к книге.
Вот как можно сопоставить XML-элементы в книге, которой вы хотите поделиться с другими пользователями: сначала сопоставьте XML-элементы с нужными ячейками, импортируйте данные XML, удалите все карты XML, а затем предоставьте общий доступ к книге.
-
Если XML-таблицу с данными не удается скопировать в другую книгу, возможно, XML-таблица имеет связанную карту XML, которая определяет структуру данных. Такая карта XML хранится в книге, но при копировании XML-таблицы в новую книгу карта XML не копируется автоматически. Вместо копирования XML-таблицы Excel создает таблицу Excel с такими же данными. Чтобы превратить новую таблицу в XML-таблицу, сделайте следующее.
-
Добавьте карту XML в новую книгу с помощью XML- или XSD-файла, который использовался при создании исходной карты XML. Эти файлы следует хранить, если вы планируете добавлять карты XML в другие книги.
-
Сопоставьте эти XML-элементы таблице, чтобы сделать ее XML-таблицей.
-
-
При сопоставлении повторяющегося XML-элемента с объединенной ячейкой Excel отменяет это объединение. Это ожидаемое поведение, так как повторяющиеся элементы предназначены только для работы с ячейками, которые не объединены.
С объединенной ячейкой можно сопоставлять отдельные, неповторяющиеся XML-элементы, но сопоставление с такими ячейками повторяющихся XML-элементов (или элементов, содержащих повторяющиеся элементы) не допускается. Объединение ячейки будет отменено, а элемент будет сопоставлен с ячейкой, в которой находится указатель.
-
-
Советы:
-
Вы можете отменить сопоставление XML-элементов, которые вы не хотите использовать, или запретить перезапись содержимого ячеек при импорте данных XML. Например, можно временно отменить сопоставление XML-элемента с одной ячейкой или с повторяющимися ячейками, содержащими формулы, которые не должны быть перезаписаны при импорте XML-файла. После завершения импорта вы можете снова сопоставить элемент XML с ячейками формулы, чтобы можно было экспортировать результаты формул в файл данных XML.
-
Чтобы отменить сопоставление XML-элемента, щелкните правой кнопкой мыши его имя в области задач Источник XML и выберите команду Удалить элемент.
Отображение вкладки «Разработчик»
Если вкладка Разработчик недоступна, выполните следующие действия, чтобы открыть ее.
См. также
Удаление данных карты XML из книги
Добавление или перезапись сопоставленных XML-данных
Общие сведения о XML в Excel
Импорт данных XML
Экспорт данных XML
Примечание:
Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).
Инструмент определения схемы XML и сериализация XML
-
- Чтение занимает 2 мин
-
В этой статье
Инструмент определения схемы XML (XML Schema Definition Tool (Xsd.exe)) устанавливается вместе с инструментами .NET Framework в составе пакета средств разработки (SDK) Windows®.The XML Schema Definition tool (XML Schema Definition Tool (Xsd.exe)) is installed along with the .NET Framework tools as part of the Windows® Software Development Kit (SDK). Этот инструмент служит, главным образом, двум следующим целям.The tool is designed primarily for two purposes:
Создание файлов классов C# или Visual Basic, соответствующих конкретной схеме языка определения схемы XML (XSD).To generate either C# or Visual Basic class files that conform to a specific XML Schema definition language (XSD) schema. Инструмент принимает схему XML как аргумент и создает файл с числом классов, которые при сериализации с использованием XmlSerializer соответствуют схеме.The tool takes an XML Schema as an argument and outputs a file that contains a number of classes that, when serialized with the XmlSerializer, conform to the schema. Дополнительные сведения об использовании этого инструмента для создания классов, которые соответствуют определенной схеме, см. в разделе Практическое руководство. Использование инструмента определения схемы XML для создания классов и документов схемы XML.For information about how to use the tool to generate classes that conform to a specific schema, see How to: Use the XML Schema Definition Tool to Generate Classes and XML Schema Documents.
Создание документа схемы XML из DLL-файла или EXE-файла.To generate an XML Schema document from a .dll file or .exe file. Чтобы просмотреть схему набора файлов, которая была создана или изменена с помощью атрибутов, передайте в инструмент файл DLL или EXE как аргумент для создания схемы XML.To see the schema of a set of files that you have either created or one that has been modified with attributes, pass the DLL or EXE as an argument to the tool to generate the XML schema. Сведения об использовании этого инструмента для создания документа схемы XML из набора классов см. в разделе Практическое руководство. Использование инструмента определения схемы XML для создания классов и документов схемы XML.For information about how to use the tool to generate an XML Schema Document from a set of classes, see How to: Use the XML Schema Definition Tool to Generate Classes and XML Schema Documents.
Дополнительные сведения об использовании этого инструмента см. в разделе Инструмент определения схемы XML (Xsd.exe).For more information about using the tool, see XML Schema Definition Tool (Xsd.exe).
См. такжеSee also
c # — создание xml на основе схемы xsd (с .NET)
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
.
java — преобразование XML => JSON => XML на основе схемы XSD
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
.
Ограничение XSD на основе содержимого xml
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Пример схемы XML
Эта глава продемонстрирует, как написать схему XML. Вы также узнаете, что схему можно написать по-разному.
XML-документ
Давайте посмотрим на этот XML-документ под названием «shiporder.xml»:
xsi: noNamespaceSchemaLocation = «shiporder.xsd»>
<цена> 10.90
Приведенный выше XML-документ состоит из корневого элемента, «shiporder»,
который содержит обязательный атрибут под названием «orderid». Элемент «shiporder» содержит три
различные дочерние элементы: «orderperson», «shipto» и «item».Элемент «item»
появляется дважды и содержит «заголовок», необязательный элемент «примечание», «количество» и «цену».
элемент.
Строка выше: xmlns: xsi = «http://www.w3.org/2001/XMLSchema-instance» сообщает синтаксическому анализатору XML, что этот документ должен быть проверен по схеме.
Строка: xsi: noNamespaceSchemaLocation = «shiporder.xsd» указывает, ГДЕ находится схема (здесь она находится в той же папке, что и «shiporder.xml»).
Создание схемы XML
Теперь мы хотим создать схему для XML-документа выше.
Мы начинаем с открытия нового файла, который назовем shiporder.xsd. Чтобы создать схему, мы могли бы просто следовать
структуру в XML-документе и определяем каждый элемент по мере его нахождения. Мы начнем со стандартного объявления XML, за которым следует элемент xs: schema, определяющий схему:
xml version = "1.0" encoding = "UTF-8"?>
…
xs: schema>
В приведенной выше схеме мы используем стандартное пространство имен (xs) и URI
с этим пространством имен связано определение языка схемы, которое имеет
стандартное значение http: // www.w3.org/2001/XMLSchema.
Затем мы должны определить элемент «shiporder». Этот элемент имеет
атрибут и он содержит другие элементы, поэтому мы рассматриваем его как сложный
тип. Дочерние элементы элемента «shiporder» окружены
xs: элемент последовательности, определяющий упорядоченную последовательность подэлементов:
…
xs: sequence>
xs: complexType>
xs: element>
Затем мы должны определить элемент «orderperson» как простой тип (потому что он
не содержать никаких атрибутов или других элементов). Тип (xs: string) имеет префикс
с префиксом пространства имен, связанным со схемой XML, который указывает предопределенный
тип данных схемы:
Затем мы должны определить два элемента сложного типа: «shipto» и
«пункт».Начнем с определения элемента shipto:
xs: sequence>
xs: complexType>
xs: element>
С помощью схем мы можем определить количество возможных вхождений элемента
с атрибутами maxOccurs и minOccurs.maxOccurs указывает максимум
количество вхождений для элемента, а minOccurs указывает минимальное количество
вхождений элемента. Значение по умолчанию для maxOccurs и
minOccurs — 1!
Теперь мы можем определить элемент «item». Этот элемент может появляться несколько раз
внутри элемента «shiporder». Это указывается установкой maxOccurs
атрибут элемента «item» на «неограниченный», что означает, что может быть как
много вхождений элемента «item» по желанию автора.Обратите внимание, что
Элемент «примечание» не является обязательным. Мы указали это, установив minOccurs
атрибут нулю:
xs: sequence>
xs: complexType>
xs: element>
Теперь мы можем объявить атрибут элемента «shiporder».поскольку
это обязательный атрибут, который мы указываем use = «required».
Примечание: Объявления атрибутов всегда должны идти последними:
Вот полный список файла схемы с именем «shiporder.xsd»:
xs: sequence>
xs: complexType>
xs: element>
xs: sequence>
xs: complexType>
xs: element>
xs: sequence>
xs: complexType>
xs: element>
xs: schema>
Разделите схему
Предыдущий метод проектирования очень прост, но его трудно читать и поддерживать в сложных документах.
Следующий метод проектирования основан на определении сначала всех элементов и атрибутов, а затем ссылки на них с помощью атрибута ref.
Вот новый дизайн файла схемы («shiporder.xsd»):
xs: sequence>
xs: complexType>
xs: element>
xs: sequence>
xs: complexType>
xs: element>
xs: sequence>
xs: complexType>
xs: element>
xs: schema>
Использование именованных типов
Третий метод проектирования определяет классы или типы, что позволяет нам повторно использовать элемент
определения.Это делается путем именования элементов simpleTypes и complexTypes,
а затем укажите на них через атрибут type элемента.
Вот третий дизайн файла схемы («shiporder.xsd»):
xs: simpleType>
xs: simpleType>
xs: simpleType>
xs: ограничение>
xs: simpleType>
xs: sequence>
xs: complexType>
xs: sequence>
xs: complexType>
xs: sequence>
xs: complexType>
xs: schema>
Элемент ограничения указывает, что тип данных получен из W3C XML.
Тип данных пространства имен схемы.Итак, следующий фрагмент означает, что значение
элемент или атрибут должен быть строковым значением:
Элемент ограничения чаще используется для применения ограничений к элементам.
Посмотрите на следующие строки из схемы выше:
xs: ограничение>
xs: simpleType>
Это означает, что значение элемента или атрибута должно быть строкой, оно должно состоять ровно из шести символов в строке, и эти символы должны быть
число от 0 до 9.
.