Информационные технологии, интернет, веб программирование, IT, Hi-Tech, …. Xml пример


Примеры XML

Здравствуйте! Я уже приводил довольно много примеров XML, и теперь решил собрать их все в одном месте, чтобы Вам, уважаемые читатели блога okITgo.ru, можно было быстро найти решение конкретной задачи при использовании языка разметки XML или просто познакомиться с этим языком.

Эти примеры демонстрируют XML файлы, XML форматирование и XML трансформацию (XSLT).

Также они показывают использование JavaScript совместно с XML (AJAX).

Просмотр XML Файлов

Посмотреть простой XML файл (note.xml)Тот же XML файл с ошибкойПосмотреть XML CD каталогXML каталог магазина растенийXML меню кафе

Объяснение примеров в статье о просмотре XML файлов

XML и CSS

Просмотр XML CD каталогаПоказать соответствующий CSS файлОтображение CD каталога, отформатированного при помощи CSS файла

Объяснение примеров отображения XML с CSS

XML и XSLT

Показать XML меню для кафеПосмотреть соответствующую таблицу стилей XSLTТо же меню из кафе с использованием стилей из таблицы стилей XSLT

Подробнее об XML и XSLT

Парсинг (Разбор) XML и XML DOM

Посмотреть простой XML файл (note.xml)Разобрать XML файл – Кроссбраузерный примерРазобрать XML строку – Кроссбраузерный пример

Объяснение примеров XML DOM

XML в HTML

Показать XML CD каталогОтобразить XML данные в HTML таблице

Превращаем XML в HTML – Объяснение примеров

XML Приложения

Посмотреть XML CD каталог (исходный файл)Показать XML данные внутри HTML элемента divНавигация по XML узламПростое приложение – CD каталог

Объяснение примеров XML приложений

XML Вывод с Сервера

Посмотрите пример возврата XML с сервера посредством ASPПосмотрите пример возврата XML с сервера при помощи PHPПросмотр вывода XML из базы данных

XML на Сервере – Объяснение примеров

XML DOM

Получить значение XML элементаПолучить значение XML атрибутаИзменить значение XML элементаДобавить новый атрибут к XML элементуСоздать новый XML элементУдалить XML элемент

Объяснение примеров XML DOM

Надеюсь, данная обощающая статья оказалась для Вас полезной и Вы нашли то, что искали. До новых встреч на страницах сайта okITgo.ru!

Похожие материалы:

  1. Просмотр XML
  2. Примеры Использования XML
  3. XML и XSLT
  4. XML и CSS
  5. XML на Сервере

okitgo.ru

Пример 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> </xs:element>

Теперь определим элемент orderperson, который будет простого типа (так как он не содержит ни атрибуты, ни другие элементы). Его тип (xs:string) имеет префикс пространства имен, ассоциированного с XML схемой, что указывает на использование предопределенного типа данных:

<xs:element name="orderperson" type="xs:string"/>

Теперь нам нужно определить два элемента составного типа: shipto и item. Начнем с определения элемента shipto:

<xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>

При помощи схем мы можем определить число возможных вхождений любого элемента. В этом нам помогут атрибуты maxOccurs и minOccurs. Атрибут maxOccurs задает максимальное число вхождений элемента, а атрибут minOccurs задает минимальное число вхождений. По умолчанию значение обоих атрибутов равно 1.

Теперь определим элемент item. Этот элемент может использоваться неограниченное число раз внутри элемента shiporder. Определить такую особенность элемента item позволяет присваивание атрибуту maxOccurs значения "unbounded". Это означает, что элемент item может использоваться столько раз, сколько нужно автору документа. Обратите внимание, что элемент note опционален. Определим это установив атрибут minOccurs в нулевое значение:

<xs:element name="item" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string" minOccurs="0"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element>

Теперь мы можем декларировать атрибут элемента shiporder. Поскольку это обязательный атрибут, используем определение use="required".

Примечание: Атрибуты должны всегда декларироваться последними:

<xs:attribute name="orderid" type="xs:string" use="required"/>

Вот полный код файла схемы "shiporder.xsd":

<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="shiporder"> <xs:complexType> <xs:sequence> <xs:element name="orderperson" type="xs:string"/> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string" minOccurs="0"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="orderid" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:schema>

Разделение схемы

Предыдущий способ компоновки схемы весьма прост, однако, когда документ достаточно сложен, при подобном способе соответствующая схем может оказаться довольно громоздкой, что сильно скажется на удобстве ее чтения и обслуживания.

Следующий способ компоновки схемы заключается в том, что сначала определяются все элементы и атрибуты, а затем на эти определения создаются ссылки при помощи атрибута ref.

Ниже приводится новая компоновка файла схемы ("shiporder.xsd"):

<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- определение простых элементов --> <xs:element name="orderperson" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> <!-- определение атрибутов --> <xs:attribute name="orderid" type="xs:string"/> <!-- определение составных элементов --> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element ref="name"/> <xs:element ref="address"/> <xs:element ref="city"/> <xs:element ref="country"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item"> <xs:complexType> <xs:sequence> <xs:element ref="title"/> <xs:element ref="note" minOccurs="0"/> <xs:element ref="quantity"/> <xs:element ref="price"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="shiporder"> <xs:complexType> <xs:sequence> <xs:element ref="orderperson"/> <xs:element ref="shipto"/> <xs:element ref="item" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="orderid" use="required"/> </xs:complexType> </xs:element> </xs:schema>

Использование поименованых типов

Третий способ компоновки схемы предполагает определение классов или типов, которые позволяют повторное использование определений элементов. Это становится возможным, если дать имена элементам simpleTypes и complexTypes, а затем указать на них при помощи атрибута type.

Третий способ компоновки файла схемы ("shiporder.xsd"):

<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="stringtype"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="inttype"> <xs:restriction base="xs:positiveInteger"/> </xs:simpleType> <xs:simpleType name="dectype"> <xs:restriction base="xs:decimal"/> </xs:simpleType> <xs:simpleType name="orderidtype"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{6}"/> </xs:restriction> </xs:simpleType> <xs:complexType name="shiptotype"> <xs:sequence> <xs:element name="name" type="stringtype"/> <xs:element name="address" type="stringtype"/> <xs:element name="city" type="stringtype"/> <xs:element name="country" type="stringtype"/> </xs:sequence> </xs:complexType> <xs:complexType name="itemtype"> <xs:sequence> <xs:element name="title" type="stringtype"/> <xs:element name="note" type="stringtype" minOccurs="0"/> <xs:element name="quantity" type="inttype"/> <xs:element name="price" type="dectype"/> </xs:sequence> </xs:complexType> <xs:complexType name="shipordertype"> <xs:sequence> <xs:element name="orderperson" type="stringtype"/> <xs:element name="shipto" type="shiptotype"/> <xs:element name="item" maxOccurs="unbounded" type="itemtype"/> </xs:sequence> <xs:attribute name="orderid" type="orderidtype" use="required"/> </xs:complexType> <xs:element name="shiporder" type="shipordertype"/> </xs:schema>

Элемент restriction указывает на то, что тип данных является производным от типов данных из пространства имен W3C XML Schema. Таким образом, следующий фрагмент кода означает, что значение элемента или атрибута должно быть строковым:

<xs:restriction base="xs:string">

Однако гораздо чаще элемент restriction используется для накладывания ограничений на элементы. Посмотрите на следующие строки из приведенной выше схемы:

<xs:simpleType name="orderidtype"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{6}"/> </xs:restriction> </xs:simpleType>

Этот фрагмент кода указывает, что значение элемента или атрибута должно быть строковым, ровно шесть символов в длину, и этими символами должны быть цифры от 0 до 9.

msiter.ru

Примеры XML-схем

Эта документация перемещена в архив и не поддерживается.

В данном разделе содержатся примеры заказов на покупку, построенные в соответствии с рекомендациями консорциума W3C. Первый пример - схема заказа на покупку. Второй пример - документ экземпляра, проверенный по схеме из первого примера.

В следующем примере показана схема po.xsd, определяющая заказ на покупку. В данном примере иллюстрируется использование объявлений element и attribute. В примере также показаны определения типов simpleType и complexType.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://tempuri.org/po.xsd" xmlns="http://tempuri.org/po.xsd" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> Purchase order schema for Example.com. Copyright 2000 Example.com. All rights reserved. </xs:documentation> </xs:annotation> <xs:element name="purchaseOrder" type="PurchaseOrderType"/> <xs:element name="comment" type="xs:string"/> <xs:complexType name="PurchaseOrderType"> <xs:sequence> <xs:element name="shipTo" type="USAddress"/> <xs:element name="billTo" type="USAddress"/> <xs:element ref="comment" minOccurs="0"/> <xs:element name="items" type="Items"/> </xs:sequence> <xs:attribute name="orderDate" type="xs:date"/> </xs:complexType> <xs:complexType name="USAddress"> <xs:annotation> <xs:documentation> Purchase order schema for Example.Microsoft.com. Copyright 2001 Example.Microsoft.com. All rights reserved. </xs:documentation> <xs:appinfo> Application info. </xs:appinfo> </xs:annotation> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence> <xs:attribute name="country" type="xs:NMTOKEN" fixed="US"/> </xs:complexType> <xs:complexType name="Items"> <xs:sequence> <xs:element name="item" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="productName" type="xs:string"/> <xs:element name="quantity"> <xs:simpleType> <xs:restriction base="xs:positiveInteger"> <xs:maxExclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="USPrice" type="xs:decimal"/> <xs:element ref="comment" minOccurs="0"/> <xs:element name="shipDate" type="xs:date" minOccurs="0"/> </xs:sequence> <xs:attribute name="partNum" type="SKU" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <!-- Stock Keeping Unit, a code for identifying products --> <xs:simpleType name="SKU"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-[A-Z]{2}"/> </xs:restriction> </xs:simpleType> </xs:schema>

В следующем примере показан документ экземпляра po.xml для схемы заказа на покупку, проверенный с помощью схемы po.xsd из предыдущего примера.

<?xml version="1.0"?> <purchaseOrder xmlns="http://tempuri.org/po.xsd" orderDate="1999-10-20"> <shipTo country="US"> <name>Alice Smith</name> <street>123 Maple Street</street> <city>Mill Valley</city> <state>CA</state> <zip>90952</zip> </shipTo> <billTo country="US"> <name>Robert Smith</name> <street>8 Oak Avenue</street> <city>Old Town</city> <state>PA</state> <zip>95819</zip> </billTo> <comment>Hurry, my lawn is going wild!</comment> <items> <item partNum="872-AA"> <productName>Lawnmower</productName> <quantity>1</quantity> <USPrice>148.95</USPrice> <comment>Confirm this is electric</comment> </item> <item partNum="926-AA"> <productName>Baby Monitor</productName> <quantity>1</quantity> <USPrice>39.98</USPrice> <shipDate>1999-05-21</shipDate> </item> </items> </purchaseOrder>
Ссылки
Основные понятия

msdn.microsoft.com

Примеры Использования XML

Здравствуйте, уважаемые посетители сайта okITgo.ru! В предыдущей статье об использовании XML я умопинал о том, какие технические приемы не следует применять на практике. Теперь давайте рассмотрим несколько примеров, как можно использовать XML для обмена информацией.

Пример: XML Новости

Спецификация XMLNews (XML Новости) служит для обмена новостями и другой информацией.

Использование XML News в качестве единого стандарта упрощает создание, получение и архивацию любого вида новостной информации для новостных агентв и клиентов (тех кто получает и просматривает новости), применяя различное оборудование, программное обеспечение и языки программирования.

Вот пример документа XMLNews:

<?xml version="1.0" encoding="UTF-8"?> <nitf>  <head>    <title>Землетрясение в Колумбии</title>  </head>  <body>    <headline>      <hl1>Землетрясение в Колумбии привело к 143 смерти</hl1>    </headline>    <byline>      <bytag>автор: Джаред Котлер</bytag>    </byline>    <dateline>      <location>Богота, Колумбия</location>      <date>Понедельник, 25 Января 1999, 7:28 (Восточное Время)</date>    </dateline>  </body> </nitf>

Пример: Служба Погоды XML

Пример использования XML в национальной службе погоды из NOAA (National Oceanic and Atmospheric Administration – Национальная Океаническая и Атмосферная Администрация, США):

<?xml version="1.0" encoding="UTF-8" ?> <current_observation>

<credit>Национальная Служба Погоды NOAA</credit> <credit_URL>http://weather.gov/</credit_URL>

<image> <url>http://weather.gov/images/xml_logo.gif</url> <title>Национальная Служба Погоды NOAA</title> <link>http://weather.gov</link> </image>

<location>Нью-Йорк/Международный Аэропорт Джона Ф. Кеннеди, NY</location> <station_id>KJFK</station_id> <latitude>40.66</latitude> <longitude>-73.78</longitude> <observation_time_rfc822>ПН, 11 Фев 2008 06:51:00 -0500 EST </observation_time_rfc822>

<weather>Немного Облачно</weather> <temp_f>11</temp_f> <temp_c>-12</temp_c> <relative_humidity>36</relative_humidity> <wind_dir>Восточное</wind_dir> <wind_degrees>280</wind_degrees> <wind_mph>18.4</wind_mph> <wind_gust_mph>29</wind_gust_mph> <pressure_mb>1023.6</pressure_mb> <pressure_in>30.23</pressure_in> <dewpoint_f>-11</dewpoint_f> <dewpoint_c>-24</dewpoint_c> <windchill_f>-7</windchill_f> <windchill_c>-22</windchill_c> <visibility_mi>10.00</visibility_mi>

<icon_url_base>http://weather.gov/weather/images/fcicons/ </icon_url_base> <icon_url_name>nfew.jpg</icon_url_name> <disclaimer_url>http://weather.gov/disclaimer.html</disclaimer_url> <copyright_url>http://weather.gov/disclaimer.html</copyright_url>

</current_observation>

Приведенные примеры демонстрируют, как документы XML используются в реальной жизни. Можно было бы привести таких примеров великое множество, но, думаю, и этого достаточно, чтобы понять всю мощь и возможности, которые перед нами открывает расширяемый язык разметки. Спасибо за внимание! До новых встреч на страницах сайта okITgo.ru.

okitgo.ru

Документ XML

Приветствую, уважаемые посетители блога okITgo.ru! Продолжаем рассматривать язык XML. В данной статье подробнее остановимся на строении документа расширяемого языка разметки. XML документы формируют древовидную структуру, которая начинается в “корне” и разветвляется до “листьев”.

Пример XML документа

XML документы описывают сами себя и используют простой синтаксис:

<?xml version=”1.0″ encoding=”UTF-8″?>

<note>

<to>Петя</to>

<from>Марина</from>

<heading>Напоминание</heading>

<body>Не забудь купить молока!</body>

</note>

Первая строка – это XML объявление. Она определяет версию XML (1.0) и используемую кодировку(UTF-8 – Юникод).

Следующая строка описывает корневой элемент документа xml, в данном случае мы указываем, что этот документ является запиской (англ. note):

Следующие 4 строки описывают 4 дочерних элемента корня (to, from, heading и body):

<to>Петя</to>

<from>Марина</from>

<heading>Напоминание</heading>

<body>Не забудь купить молока!</body>

И наконец последняя строчка определяет конец корневого элемента:

Из структуры документа приведенного примера легко предположить, что этот XML документ содержит записку от Марины к Пете.

Данный пример хорошо иллюстрирует тот факт, что XML является самодокументированным языком, т.е. описывающим самого себя.

XML Документы Формируют Древовидную Структуру

XML документы должны содержать корневой элемент. Этот элемент является “родительским” для всех остальных элементов.

Элементы в документе XML составляют дерево документа. Это дерево начинается с корня и разветвляется, заканчиваясь листьями.

Все элементы могут иметь внутри себя другие элементы, называемые дочерними:

<отец>

<сын 1>

<сын 2>…..</сын 2>

</сын 1>

</корень>

Термины отец, сын, брат используются для описания взаимоотношений между элементами. Родительские элементы имеют дочерние. Дочерние элементы на одном и том же уровне иерархии называются братьями (или сестрами).

Все элементы могут иметь текстовое содержимое и атрибуты (прямо как в HTML).

Пример:

Изображение выше представляет собой одну книгу, описанную в XML документе ниже:

<bookstore>

<book category=”NOVEL”>

<title lang=”en”>Банка червей</title>

<author>Джеймс Хэдли Чейз</author>

<year>1992</year>

<price>30.00</price>

</book>

<book category=”CHILDREN”>

<title lang=”en”>Книга джунглей</title>

<author>Редьярд Киплинг</author>

<year>1998</year>

<price>29.99</price>

</book>

<book category=”WEB”>

<title lang=”en”>Изучаем XML</title>

<author>Эрик Рей</author>

<year>2003</year>

<price>39.95</price>

</book>

</bookstore>

Корневым элементом в примере является <bookstore> – книжный магазин. Все элементы <book> в документе содержатся внутри <bookstore>. Элемент <book> имеет 4 дочерних элемента: <title> (заголовок),< author> (автор), <year> (год издания), <price> (цена).

okitgo.ru

XML Schema (XML схема) - описание структуры XML-документов

В предыдущей статье про XML мы рассмотрели такой уже устаревший способ валидации XML-документов, как XML DTD. Данный способ до сих пор применяется для проверки XML-данных, но с каждым днем его все больше и больше вытесняет новая технология под названием XML Schema. В XML схемах было исправлено множество недоработок, которые были в XML DTD, поэтому на данный момент все передовые разработчики для валидации документов применяют только XML схемы.

Чтобы оценить преимущество XML схем (XML Schema) перед DTD, давайте более подробно рассмотрим основные недостатки DTD, которые с успехом были исправлены в XML схемах. О них я уже упоминал в статье «XML DTD», но для лучшего понимания давайте повторим.

Недостатки XML DTD перед XML Schema

  1. Отличный от XML синтаксис языка. То есть, DTD не является XML. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов.
  2. Нет проверки типов данных. В XML DTD существует лишь один тип данных – строка. В связи с этим, например, если в числовом поле будет текст, документ все равно пройдет верификацию, так как XML DTD не может проверить тип данных.
  3. Нельзя поставить в соответствие одному XML-документу больше одного DTD описания. То есть, верифицировать документ можно лишь одним DTD описанием. Если их несколько, то придется переделывать описания и совмещать все в одном файле, что очень неудобно.

Это были основные недостатки XML DTD, которые с успехом исправлены в промышленном стандарте описания XML-документов XML Schema.

XML Schema – промышленный стандарт описания XML-документов

Если быть кратким, то XML Schema делает следующее:

  1. Описывает названия элементов и атрибутов (словарь).
  2. Описывает взаимосвязь между элементами и атрибутами, а также их структуру (модель содержания).
  3. Описывает типы данных.

Также хочу заметить, что на данный момент при помощи схем можно описывать практически все. То есть, схема – это универсальный способ описания грамматики данных, который может применяться не только для верификации XML-документов, но и описания баз данных и т.д. Таким образом, область применения схем на данный момент очень широкая.

Пример XML Schema для валидации XML-документа

Как показывает практика, материал намного лучше усваивается, если сразу начинать изучение с примеров. Сразу скажу, что углубляться во все тонкости мы не будем, так как материал очень сложный, особенно если изучать его в текстовом виде.

Пример простой схемы XML 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="книга" type="Книга" /> <xs:complexType name="Книга"> <xs:sequence> <xs:element name="название" type="xs:string" /> <xs:element name="цена" type="xs:decimal" /> </xs:sequence> </xs:complexType> </xs:schema>

При помощи данной схемы можно проверить XML-документ следующего содержания.

<книга xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "book.xsd"> <название>Основы XML</название> <цена>300</цена> </книга>

Итак, вернемся к нашей XML схеме. Как вы уже заметили, для создания XML схем используется уже известный нам XML. Единственное отличие здесь в том, что в XML Schema уже определены элементы, в отличие от обычного XML. В связи с этим используются пространства имен. В данном случае обязательным пространством имен будет «http://www.w3.org/2001/XMLSchema», которое будет задаваться при помощи префиксов «xs».

Сразу хочу заметить, что можно использовать как префиксы пространств имен, так и задавать пространство имен для корневого элемента. Как таковой разницы здесь нет. Каждый сам решает, как ему поступать в данной ситуации. Скажу только, что обычно используются префиксы «xs» или «xsd».

Ну а теперь давайте разберемся, как же расшифровать вышеприведенную схему. Как уже говорилось выше, XML Schema это описание словаря и типов данных. Отталкиваясь от этого, произведем расшифровку каждого элемента.

  • <xs:element name=»книга» type=»Книга» /> — объявляем элемент «книга» с типом «Книга».
  • <xs:complexType name=»Книга»> — объявляем комплексный тип с именем «Книга» (xs:complexType – может содержать в себе вложенные элементы).
  • <xs:sequence> — объявление вложенности. То есть, тип будет содержать вложенные элементы.
  • <xs:element name=»название» type=»xs:string» /> — объявляем элемент с именем «название» (стандартного типа «строка» — xs:string).
  • <xs:element name=»цена» type=»xs:decimal» /> — объявляем элемент с именем «цена» (стандартного типа «число» — xs:decimal).

Как видите, ничего сверхсложного здесь нет. Если вдуматься, то все очень просто.

Основные элементы XML Schema

Если быть кратким, то XML схему можно описать следующим образом.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:annotation> <xsd:documentation> Ваша схема </xsd:documentation> </xsd:annotation> … </xsd:schema>

Как видно с примера, каждая XML схема состоит с корневого элемента «schema» и обязательного пространства имен «http://www.w3.org/2001/XMLSchema». Далее идет описание схемы и собственно сама схема. При этом очень часто в очень качественных схемах описание бывает куда большим, чем сама XML Schema.

Описание элементов в XML Schema

В начале статьи мы уже рассмотрели пример простейшей XML схемы. В ней мы отдельно описывали элементы и типы. При этом сразу хочу заметить, что последовательность здесь не играет роли. Схема будет работать в любом случае.

Теперь давайте рассмотрим второй способ написания XML Schema, который основывается на том, чтобы описывать тип сразу внутри элемента. Данный способ подойдет в том случае, если вы не планируете использовать одно и то же описание для разных элементов. Для наглядности рассмотрим пример.

<?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="age" type="xs:integer" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

Как видно с примера, элемент объявляется при помощи специальной конструкции «element» с использованием соответствующего префикса. В данном случае мы определяем элемент с названием «root» без указания типа (type), так как он будет описан внутри элемента. То есть, есть два способа описания элементов.

1 способ

<xs:element name="название элемента" type="название типа" /> <xs:complexType name="название типа"> Описание типа </xs:complexType>

2 способ

<xs:element name="root"> Описание типа элемента </xs:element>

Вы можете использовать как первый способ, так и второй. Все они работают одинаково. Вопрос лишь в удобстве в данном конкретном случае.

Далее после объявления элемента мы указываем, что он комплексного типа (<xs:complexType>) и перечисляем (<xs:sequence>) вложенные элементы. В данном случае это элементы name и age с типами «xs:string» и «xs:integer». Префикс xs означает, что это базовый тип, который уже описан в стандарте XML Schema.

Как видите, пока все довольно просто. Опять же, углубляться во все подробности мы не будем, так как данная статья предназначена для ознакомления с XML Schema, а не ее детальным изучением.

Как ставится в соответствие XML Schema и документ

Особенностью XML Schema является то, что она описывает не сам документ, а пространство имен. В связи с этим чаще всего никаких упоминаний о ней в документе нет. Обработчик сам ставит в соответствие нужную вам схему без использования каких-либо инструкций в XML-документе.

На случай, если обработчик не знает где лежит схема, мы можем указать, где ее искать. Делается это при помощи специального атрибута «schemaLocation». Поскольку этот атрибут принадлежит другому пространству имен, то перед началом использования атрибута пространство тоже нужно указать. Для наглядности рассмотрим пример.

XML Schema

<?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.site.com" ...

XML-документ

<?xml version="1.0" ?> <my:product xmlns:my="http://www.site.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.site.com/product.xsd" …

Теперь давайте подробно разберем каждую строчку.

  • targetNamespace=»http://www.site.com» – указываем для какого пространства имен эта XML Schema.
  • xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» – подключаем пространство имен в котором описан атрибут «schemaLocation».
  • xsi:schemaLocation=»http://www.site.com/product.xsd» – указываем, где можно найти схему на случай, если парсер не знает где она лежит. Если XML-документ не принадлежит никакому пространству имен, а следовательно и в схеме нет на него указания, то атрибут «schemaLocation» заменяется на «noNamespaceSchemaLocation» (указание на схему без определения пространств имен).

Рекомендую также ознакомиться с другими статьями по XML и XSLT:

На этом я заканчиваю данную статью. Надеюсь, мне удалось объяснить этот сложный материал и вышеизложенная информация будет вам полезна. Если не хотите пропустить выпуска других статей по XML, рекомендую подписаться на новостную рассылку, воспользовавшись формой ниже.

На этом все. Удачи вам и успехов в изучении XML!

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

dmitriydenisov.com

Визуализация Xml-документов / Хабр

Думаю, для многих не секрет, что xml является достаточно удобным способом хранения и передачи информации. Вот уже который раз натыкаюсь в литературе на утверждение, что в будущем xml должен заменить html, а появление xhtml является тому подтверждением. Но тут есть нюанс. все браузеры знают как отображать html-документы, но ни один из них не знает, как должны отображаться xml-документы. Это связано прежде всего с тем, что формируя xml-документ Вы можете ввести свои теги. Я хочу коротко (это очень большая тема, на самом деле) рассказать о так называемых «Таблицах преобразований xml-документов». Думаю, что многие наверняка знакомы с ними, но надеюсь что кому-то это может быть полезно, а, учитывая мою любовь к практике, хочу показать всё на очень простом примере
Что мы имеем
Рассмотрим простенький xml-документ:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <document>
  3.  <header>Это заголовок Xml-документа</header>
  4.  <items>
  5.   <item>
  6.    <name>Habrahabr.ru</name>
  7.    <description>
  8.     В Хабрахабр заложена модель совместного творчества людей. Это
  9.     универсальное средство для всех представителей нового поколения
  10.     средств массовой информации.
  11.    </description>
  12.   </item>
  13.   <item>
  14.    <name>Bash.org.ru</name>
  15.    <description>
  16.     Вы добавляете цитату. После этого цитата попадает в Бездну, где
  17.     ее могут увидеть и проголосовать за нее наши посетители, читающие
  18.     сей суровый раздел.
  19.    </description>
  20.   </item>
  21.  </items>
  22. </document>
Если мы попробуем просмотреть его в браузере, то увидим нечто подобное:

Существует несколько способов визуализировать содержимое этого документа. К нему можно подключить обычную таблицу стилей (css-файл) или таблицу преобразований. Таблица преобразований представляет из себя xml-документ, оформленный по определённым правилам и имеющий расширение .xslt.

Допустим нам нужно отобразить информацию, содержащуюся в xml-документе, для этого создадим таблицу преобразований (файл будет называться style.xslt):

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0"
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4. xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  5. exclude-result-prefixes="msxsl">
  6.  
  7.  <xsl:template match="document">
  8.   <html>
  9.    <head><title><xsl:value-of select="header" /></title></head>
  10.    <body><xsl:apply-templates select="items" /></body>
  11.   </html>
  12.  </xsl:template>
  13.  
  14.  <xsl:template match="items">
  15.   <ul><xsl:apply-templates select="item" /></ul>
  16.  </xsl:template>
  17.  
  18.  <xsl:template match="item">
  19.   <li><a>
  20.     <xsl:attribute name="href">
  21.      http:// <xsl:value-of select="name"/>
  22.     </xsl:attribute>
  23.     <xsl:value-of select="name"/>
  24.    </a> - <xsl:value-of select="description"/>
  25. <li> </xsl:template>
  26.  
  27. </xsl:stylesheet>
Подключить таблицу преобразований (к исходному xml-документу конечно же) можно следующим образом: В итоге, открыв тот же самый файл в браузере мы увидим следующее:

В двух словах, как это работает
В таблице преобразований описаны три шаблона: document, items и item. Когда в шаблоне встречается элемент xsl:apply-templates на его место подставляются то, что получится в результате обработки всех элементов, удовлетворяющих выражению select (я указывал просто названия тегов, хотя там могут быть достаточно сложные конструкции). Аналогично вставляются значения тегов (тег xsl:value-of) и атрибуты для тегов (тег xsl:attribute).

Шаблон document формирует основу html-страницы (теги html, head, body), а в них подставляются заголовок страницы и список элементов, формирующийся по шаблону items (Элементы списка формируются по шаблону items).

Всё преобразование делается на стороне клиента.

Это лишь малая доля того, что может предоставить технология таблиц преобразований. Visual Studio имеет удобный интерфейс по работе с ними, в том числе просмотр сгенерированного html.

habr.com