Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л10-11,5.docx
Скачиваний:
5
Добавлен:
23.08.2019
Размер:
255.47 Кб
Скачать

Web-технологии и web-дизайн

Валидация XML Лекции №10-11

Керносов М.А.

Факультет компьютерных наук Кафедра ИУС

Правильно сформированный XML-документ...

Правильно сформированный (well-formed) XML- документ удовлетворяет синтаксическим правилам XML:

  • начинается с XML-декларации;

  • сдержит один уникальный корневой элемент;

  • все теги закрыты (для каждого открывающего тега должен существовать соответствующий ему закрывающий тег);

  • имена элементов записаны с учетом их чувствительности к регистру;

  • все элементы правильно вложены;

  • все значения атрибутов взяты в кавычки;

  • для добавления в документ спецсимволов используются сущности-заменители.

не позволяет избежать ошибок!

Даже правильно сформированные с точки зрения синтаксиса XML (well-formed) документы могут содержать ошибки в их логической структуре, последствия которых могут быть достаточно серьёзными.

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

DTD (Document Type Definition) - определение типа документа.

XSD (XML Schema Definition) - определение XML- схемы.

  • Назначение DTD и XSD заключается в определении допустимых «строительных блоков» XML- документов.

  • DTD & XSD определяют структуру документа с помощью перечня допустимых элементов и атрибутов.

  • XML-документ, прошедший валидацию посредством DTD или XSD называется "Валидным" (Valid).

Для чего следует использовать

DTD или XSD?

  • DTD или XSD, позволяют добавить к XML- файлам описание их формата.

  • Независимые группы людей могут договориться об использовании стандартного DTD или XSD

для обмена данными.

  • Программные приложения могут использовать стандартный DTD или XSD для проверки того, что данные, полученные извне, валидные.

  • Данные технологии могут быть применены для

проверки пользовательских данных (например, в html, xhtml...).

«Строительные блоки» XML

С точки зрения DTD или XSD все XML- документы (и HTML-документы также) состоят из таких «строительных блоков»:

  • Элементы (Elements);

  • Атрибуты (Attributes);

  • Сущности (Entities);

  • Обрабатываемые текстовые данные (PCDATA);

  • Текстовые данные (СDATA).

  • Элементы являются основными строительными блоками XML- и HTML-документов.

Примерами HTML-элементов являются теги "body" и "table":

<body>some text</body>

Примерами XML-элементом могли бы быть теги "note" и "message".

<message>some text</message>

  • Элементы могут содержать текст, другие элементы, или быть пустыми.

Примерами пустых HTML-элементов являются теги "hr", "br" и "img" (<br></br>, <br />).

Атрибуты

  • Атрибуты предоставляют дополнительную информацию об элементах.

  • Атрибуты всегда располагаются внутри открывающего тега элемента.

  • Атрибуты всегда записываются в виде пар имя/значение.

Пример: следующий элемент "img" содержит дополнительную информацию о файле с изображением:

<img src-'computer.gif'/>

  • Некоторые символы в XML имеют специальное значение. Например знак «меньше» (<), который определяет начало XML-тега.

  • Наиболее распространённой сущностью в HTML является: " " (неразрывный пробел)".

  • Сущности расширяются (заменяются на соответствующие им символы) когда документ обрабатывается XML-парсером.

Предопределённые сущности в

XML

Ссылка на сущность

Символ

<

<

>

>

&

&

"

и

'

1

Сложный тип, содержащий

только текст

Данный тип содержит только простое содержимое (simple content) - текст и атрибуты, поэтому его содержимое обрамляется тегом simpleContent.

Когда используется простое содержимое, внутри тега simpleContent должно быть обязательно объявлено расширение (extension) ИЛИ ограничение (restriction) базового типа.

<xs:element name="somename"> <xs:complexType> <xs:simpleContent> <xs:extension base="basetype">

</xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>

ИЛИ

<xs:element name="somename"> <xs:complexType> <xs:simpleContent>

<xs:restriction base="basetype"> • • • •

• • • •

</xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element>

<phone country="Finland">3252353</phone>

<xs:element name-'phone"> <xs:complexType> <xs:simpleContent> <xs:extension base-'xs:integer"> <xs:attribute name-"country" type-'xs:string''/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>

Сложные типы со смешанным

содержимым

Пример XML-элемента "letter", содержащего

текст и другие элементы:

<letter>

Dear Mr.<name>John Smith</name>. Your order <orderid>1032</orderid> will be shipped on <shipdate>2012-07-13</shipdate>. </letter>

Фрагмент XSD для элемента "letter":

<xs:element name="letter"> <xs:complexType mixed=,,true"> <xs:sequence> <xs:element name="name" type=,,xs:string7> <xs:element name=,,orderid" type=,,xs:positivelnteger"/> <xs:element name="shipdate" type="xs:date'7> </xs:sequence> </xs:complexType> </xs:element>

Для того, чтобы разрешить появление текстовых данных между дочерними элементами элемента «letter», XSD- атрибут «mixed» должен быть установлен в "true".

Индикаторы порядка:

  • All;

  • Choice;

  • Sequence.

Индикаторы повторений:

  • maxOccurs;

  • minOccurs.

Групповые индикаторы:

  • Group name;

  • attributeGroup name.

Индикатор All

Индикатор <all> определяет, что в XML-документы дочерние элементы могут объявляться в родительском в произвольном порядке, и что каждый дочерний элемент должен быть объявлен только один раз:

<xs:element name="person"> <xs:complexType> <xs:all>

<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type-'xs:string7> </xs:all> </xs:complexType> </xs:element>

При использовании индикатора <all>, значение индикатора <minOccurs> может быть установлено только в 0 или 1, а значение индикатора <maxOccurs> - только в 1.

Индикатор Choice

Индикатор <choice> определяет, что в родительском элементе может присутствовать

только один из перечня дочерних элементов:

<xs:element name="person"> <xs:complexType>

<xs:choice>

<xs:element riame="employee" type="employee"/> <xs:elemerit name="student" type="student"/> </xs:choice> </xs: со m p I exTy pe > </xs:element>

Индикатор Sequence

Индикатор <sequence> определяет, что дочерние элементы должны вноситься в родительский в строго определённом порядке:

<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element riame="firstriame" type="xs:string"/> <xs:elemerit riame="lastriame" type="xs:string'У> </xs:sequence> </xs: со m p I exTy pe > </xs:element>

Индикаторы maxOccurs и

minOccurs

Индикатор <maxOccurs> (< minOccurs >) определяет максимальное (минимальное) число вхождений дочернего элемента в родительский:

<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type-'xs:string7> <xs:element name-'child_nameM type="xs:string" max0ccurs="107> </xs:sequence> </xs:complexType> </xs:element>

PCDATA (Parsed Character Data)

Под текстовыми данными подразумевается

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

  • PCDATA - это текст, который БУДЕТ обработан парсером. Парсер проверяет наличие в тексте сущностей и вложенных тегов разметки.

  • Теги внутри текста будут интерпритированы, а сущности будут заменены на соответствующий им текст.

  • PCDATA не может содержать символы &, <, или >, которые должны быть представлены в виде сущностей & < arid > соответственно.

Неограниченное вхождение

элемента

  • Для всех индикаторов, определяющих порядок и группировку элементов (any, all, choice, sequence, group name, attributeGroup name и group reference) значение индикаторов maxOccurs и minOccurs no уомлчанию 1.

  • Чтобы разрешить элементу встречать неограниченное количество раз используется опция maxOccurs-'unbounded":

family.xml Пример family.xsd

<?xml version="1.0" encoding="ISO-8859-1"?> <persons

xm Iris: xsi=" http://www.w3. org/2001/XMLSchema- instance"

xsi:noNamespaceSchemaLocation="family.xsd"> <person>

<full_name>Hege Refsnes</full_name> <child_name>Cecilie</child_name> </person>

<person>

<full_name>Tove Refsnes</full_name> <child_name>Hege</child_name> <child_name>Stale</child_riame> <child_name>Jim</child_name> <child_name>Borge</child_name> </person>

<person>

<full_name>Stale Refsnes</full_name> </person>

</persons>

<?xml version="1.0" encoding="ISO-8859-1"?> <xs:schema

xm I ns: xs="http ://www ,w3.0 rg/2001/XMLSche ma" elementFormDefault-'qualified">

<xs:element name-"persons'^ <xs:complexType> <xs:sequence> <xs:element name-"person"

maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name-Tull_name" type="xs:string7> <xs:element name-'child_name" type-'xs: string" minOccurs-'0" maxOccurs-'57> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>

Группы элементов

Индикатор элементов all, choice, или sequence могут использоваться внутри декларации групп элементов.

Example :

<xs:group name="persongroup"> <xs:sequence> <xs:element name-'firstname"type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:element name="birthday" type="xs:date"/> </xs:sequence> </xs:group>

Ссылка на группу элементов

<xs:element name="person" type-'personinfo"/>

<xs:complexType name-'personinfo"> <xs:sequence> <xs:group ref="persongroup'7> <xs:element name="country" type="xs:string'7> </xs:sequence> </xs:complexType>

Группы атрибутов

<xs:attributeGroup name="persoriattrgroup"> <xs:attribute name-'firstname"type="xs:string"/> <xs:attribute riame="lastriame" type="xs:string"/> <xs:attribute name-'birthday"type="xs:date"/> </xs: att r i b uteG ro u p >

<xs:elemerit name="person"> <xs:complexType>

<xs:attributeGroup ref="personattrgroup"/> </xs: со m p I exTy pe > </xs:element>

Элемент <any>

Элемент <апу> позволяет расширять XML-элемент элементами, которые не определены в XSD.

<xs:element name="person"> <xs:complexType> <xs:sequence>

<xs:element name="firstname" type="xs:string"/> <xs:element name-'lastname" type="xs:string7> <xs:any min0ccurs="07> </xs:sequence> </xs:complexType> </xs:element>

Элемент <anyAttribute>

Элемент <anyAttribute> позволяет расширять XML- элемент атрибутами, которые не определены в XSD.

<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> <xs:anyAttribute/> </xs:complexType> </xs:element>

order.xml Последний пример ordered

<?xml version-' 1.0" encoding-'ISO-8359-1 "?>

<shiporder orderid-'SS9923" xmlns:xsi="http://www ,w3. org/2001/XMLSchema -instance"

xsi:noNamespaceSchemaLocation="order.xsd"> <orderperson>John Smith</orderperson> <shipto> <name>Nordmann</name> <address>Langgt 23</address> <city>4000 Stavanger</city> < с о u ntr у > N о rway </с о u ntry > </shipto> <item> <title>Empire</title> <note>Special Edition</note> <qua ntity> 1 </q uantity> <price>10.90</price> </item> <item>

<title>Hide your heart</title> <qua ntity> 1 </q uantity> <price>9.90</price> </item> </shiporder>

<?xml version-' 1.0" encoding-'ISO-SS59-1" ?> <xs:schema

xmlns:xs="http://vwvw.w3 .org/2 001 /XMLSch ema">

<!-- definition of simple elements ->

<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: positive I nteger"/>

<xs:element name-'price" type-'xs:decimal"/>

<!-- definition of attributes ->

<xs:attribute name-'order id" type-'xs:string"/>

<!-- definition of complex elements --> <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>

Последний пример (часть 2)

<?xml version-' 1.0" encoding-'ISO-8S59-1 "?>

<shiporder orderid="889923" xmlns:xsi="http://www ,w3. org/2001/ХМ LSchema -instance"

xsi:noNamespaceSchemaLocation-,order.xsd"> <orderperson>John Smith</orderperson> <shipto> <name>Nordmann</name> <address>Langgt 23</address> <city>4000 Stavanger</city> < с о u ntr у > N о rway </с о u ntry > </shipto> <item> <title>Empire</title> <note>Special Edition</note> <qua ntity> 1 </q uantity> <price>10.90</price> </item> <item>

<title>Hide your heart</title> <qua ntity> 1 </q uantity> <price>9.90</price> </item> </shiporder>

<xs:element name="item"> <xs:complexType> <xs:sequence> <xs: element ref-'title "/> <xs:element ref-'note" min0ccurs-'07> <xs: element ref-'quantity"/> <xs:element ref-'price"/> </xs:sequence> </xs:cornplexType> </xs:element>

<xs:element name-'shiporder"> <xs:complexType> <xs:sequence> <xs:element ref-'orderperson'7> <xs:element ref-'shipto'7> <xs:element ref-"item"

maxOccurs-'unbounded7>

</xs:sequence>

<xs:attribute ref-'orderid" use-'required'7> </xs:complexType> </xs:element>

</xs:schema>

С DATA (Character Data)

  • С DATA - это текст, который НЕ БУДЕТ обработан парсером.

  • Теги внутри текста НЕ БУДУТ интерпретированы как разметка, и сущности НЕ БУДУТ заменены на соответствующий им текст.

  • Секция CDATA в XML начинается символами "<![CDATA[" и заканчивается

DTD и XSD позволяют определить

  • элементы и атрибуты, которые могут использоваться в документе;

  • иерархические связи элементов (какие элементы являются дочерними, какие родительскими);

  • порядок расположения дочерних элементов в родительском;

  • количество дочерних элементов;

  • являются ли элементы пустыми или могут содержать текст;

  • типы данных элементов и атрибутов (только XSD);

  • значения по умолчанию и фиксированные значения (default arid fixed values) элементов и атрибутов.

В XML DTD может быть объявлено как непосредственно внутри XML-документа, так и в виде ссылки на внешний документ.

Декларация DTD внутри XML

Если DTD объявляется непосредственно внутри XML-файла, для правил DTD используется следующий синтаксис-обертка DOCTYPE:

<!DOCTYPE root-element [element-declarations]>

Пример XML-документа с внутренним DTD ("note.xml")

<?xml version-"!.0"?> <! DOCTYPE note [

<! ELEMENT note (to, from .heading, body) > <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>

]>

<note>

<to>Receiver</to> <from>Sender</from> <heading>Theme</heading> <body>Some text</body> </note>

Использование внешнего DTD

Если DTD объявляется во внешнем по отношению к XML файле, для ссылки на него используется следующий синтаксис:

<!DOCTYPE root-element SYSTEM "filename">

Пример ("note.xml")

<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to> Recei ver</to> <from>Sender</from> <heading>Theme</heading> <body>Some text</body> </note>

<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>

Объявление элементов в DTD

<!ELEMENT element-name category> или

<!ELEMENT element-name (element-content)> где

category - тип содержимого элемента;

element-content - перечень имен дочерних элементов по отношению к текущему.

Пустые элементы

Пустые элементы объявляются путем указания ключевого слова EMPTY в качестве тип содержимого элемента:

<!ELEMENT element-name EMPTY>

Пример DTD: <!ELEMENT br EMPTY>

Пример XML:

<br />

Элементы с PCDATA

Элементы с обрабатываемыми текстовыми данными объявляются путем указания типа # PC DATA :

<!ELEMENT element-name (#PCDATA)> Пример:

<!ELEMENT from (#PCDATA)>

Указание типа #CDATA для элемента недопустимо.

Элементы с любым содержимым

Элементы, объявленные с типом содержимого ANY, могут содержать любую комбинацию данных, которые могут быть обработаны парсером (без спецсимоволов):

<!ELEMENT elemerit-riame ANY> Пример:

<!ELEMENT note ANY>

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

Элементы с дочерними элементами (последовательности)

При объявлении элементов, которые содержат один или несколько дочерних элементов внутри скобок указывается перечень имен элементов- потомков:

<!ELEMENT elemerit-riame (child1)> или

<!ELEMENT elemerit-riame (child1Jchild2)...)> Пример:

<!ELEMENT note (to,from,heading,body)>

Полный пример

  • Когда дочерние элементы, разделенные запятыми, указываются в списке, это означает, что они должны появляться в документе в том

же самом порядке.

  • Полная декларация элемента подразумевает,

что все дочерние элементы также должны быть объявлены и в свою очередь также могут иметь дочерние элементы.

Полная декларация элемента "note" имеет вид:

<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>

<!ELEMENT element-name (child-name)> Пример:

<!ELEMENT note (message)>

Приведенный пример декларирует, что дочерний элемент "message" должен встречаться один и только один раз внутри элемента "note".

<!ELEMENT element-name (child-name+)> Пример:

<!ELEMENT note (message+)>

Знак + в примере декларирует, что дочерний элемнет "message" должен встречаться один или более раз внутри элемента "note".

Объявление нуля или многих вхождений элемента

<!ELEMENT element-name (child-name*)> Пример:

<!ELEMENT note (message*)>

Символ * в примере декларирует, что дочерний элемент "message" может встречаться ноль, один или много раз внутри элемента "note".

<!ELEMENT element-name (child-name?)> Пример:

<!ELEMENT note (message?)>

Знак ? в примере декларирует, что дочерний элемент "message" может встречаться ноль или один раз внутри элемента "note".

Объявление содержимого

«или/или»

Пример:

<!ELEMENT note

(to,from, header, (message | body))>

В примере декларируется, что элемент "note" должен содержать 4 элемента: элементы "to", "from", "header", и один элемент или "message" или "body".

Пример:

<!ELEMENT note

(#PCDATA|to |from | header] message)*>

В примере декларируется, что элемент "note" может содержать ноль, один или много вхождений обрабатываемых текстовых данных, элементов, "to", "from", "header" или "message", размещенных в произвольном порядке.

Объявление атрибутов в DTD

Декларация атрибута имеет следующий

синтаксис:

<!ATTLIST element-name attribute-name attribute- type default-value>

Пример DTD:

Тип

Описание

С DATA

Значение является текстовыми данными

(еп1\еп2\..)

Значением должен быть один из элементов приведенного списка

ENTITY

Значением является сущность

<!ATTLIST payment type С DATA Mcheck"> Пример XML: < payment type-'check" />

Значение

Описание

value

Непосредственно значение атрибута по умолчанию

#REQUIRED

Атрибут является обязательным

#IMPLIED

Атрибут не является обязательным

#FIXED value

Значение атрибута фиксировано

Значение атрибута по умолчанию (Value)

DTD:

«ELEMENT square EMPTY> <!ATTLIST square width С DATA "0">

Валидный XML: <square width=M100M/>

В примере элемент "square" определён как пустой элемент с атрибутом "width", имеющим тип данных CDATA. Если атрибут "width" не указан, он имеет значение по умолчанию, равное 0.

#REQUIRED

Синтаксис

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

Пример

DTD:

<!ATTLIST person number С DATA #REQUIRED>

Валидный XML: <person number="5677" />

Невалидный XML: <person />

Ключевое слово #REQUIRED используется, если значения по умолчанию задать не удаётся, но требуется обеспечить обязательное наличие атрибута.

#IMPLIED

Синтаксис

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

Пример

DTD:

<!ATTLIST contact fax CDATA #IMPLIED>

Валидный XML: <contact fax="555-667788" />

Валидный XML: < contact />

Ключевое слово #IMPLIED используется, если значение по умолчанию для атрибута задать не удаётся, и его наличие в элементе не является обязательным.

#FIXED

Синтаксис

<!ATTLIST elemerit-name attribute-riame attribute-type #FIXED "value">

Пример

DTD:

dATTLIST sender company С DATA #FIXED "Microsoft"*

Валидный XML:

<sender company="Microsoft" />

Невалидный XML: <sender company="KNURE" />

Ключевое слово #FIXED используется, если атрибут должен иметь фиксированное значение, а автор XML-документа не должен иметь возможность его изменить. Если автор внесет другое значение, XML-napcep вернёт ошибку. Наличие атрибута с фиксированным значением в элементе не является обязательным, в случае его отсутствия значения подставится автоматически.

Перечисленные значения атрибутов

Синтаксис

<!ATTLIST element-name attribute-name (en1|en2|..) default-value>

Пример

DTD:

<!ATTLIST payment type (check|cash) "cash"> XML:

<payment type="check" /> или

<payment type="cash" />

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

DTD - Сущности

  • Сущностями в DTD являются переменные, которые используются для определения именованных ссылок на повторяемый текст или спецсимволы.

  • Ссылки на сущности заменяются соответствующим им текстом.

  • Сущности могут быть внутренними и внешними по отношению к документу DTD.

Объявление внутренней сущности

Синтаксис

<! ENTITY entity-name "entity-value">

Пример

DTD:

<!ENTITY writer "Donald Duck.">

<!ENTITY copyright "Copyright Donald Duck.">

XML:

<author>&writer;&copyright;</author>

Замечание: Ссылка на сущность состоит из трёх частей: амперсанта (&), имени сущности, и символа «точка с запятой» (;).

Объявление внешней сущности

Синтаксис

<!ENTITY entity-name SYSTEM "URI/URL">

Пример

DTD:

  • ENTITY writer SYSTEM "http://www. mysite.com/entities.dtd">

  • IENTITY copyright SYSTEM "http://www. mysite.com/entities.dtd">

XML:

  • author>&writer;&copyright;</author>

XML Schema

  • XML Schema это основанная на XML

альтернатива DTD.

  • Язык XML Schema также часто называется как XML Schema Definition (XSD) - определение XML- схемы.

  • XML Schema является рекомендацией W3C. Validator:

htt p ://www. w3. о rg/2001 /03/we bd ata/xs v

Xml Schema является наследником dtd

На сегодняшний день определена тенденция перехода в web-приложениях от использования DTD к применению XML Schema.

Причины данной тенденции:

  • XML Schema синтаксически более богата и обладает большими возможностями, чем DTD;

  • XML Schema создается с применением XML;

  • XML Schema поддерживает типы данных;

  • XML Schema поддерживает пространства имён;

  • XML Schema - это расширяемый язык, открытый для будущих дополнений.

Xml Schema использует синтаксис xml

Многие преимущества XSD связаны с тем, что она создается с применением XML:

  • используется один универсальный язык;

  • для редактирования XSD файлов может использоваться XML-редактор;

  • XSD файлы могут обрабатываться XML парсером, как и обычные XML-файлы;

  • с XSD манипулировать, используя XML DOM;

  • возможна трансформация XSD с использованием XSLT.

XML Schema поддерживает типы

данных

Поддержка типов данных позволяет облегчить:

  • описание допустимого содержимого документа;

  • валидацию корректности данных в документе;

  • работу с данными, полученными из баз данных;

  • определение аспектов данных (ограничений на данных - data facet);

  • определение шаблонов данных (data formats);

  • осуществлять конвертацию данных между различными типами данных.

Xml Schema является расширяемой

Расширяемая XSD позволяет:

  • повторно использовать разработанную схему в других схемах;

  • создавать собственные типы данных, наследуя их от стандартных типов;

  • использовать несколько XSD в одном документе.

Пример ("note.xml")

<?xml version="1.0"?> <note> <to>Receiver</to> <from>Sender</from> <heading>Theme</heading> <body>Some text</body> </note>

Внешнее DTD

<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>

An XML Schema ("note.xsd")

<?xml version="1.0"?>

<xs:schema xm I ns:xs="http:/AAAAAA/.w3. org/2001/XMLSche ma" targetNamespace="http://www.mysite.com" xml ns="http:/A/\/ww. mysite.com" elementFormDefault="qualified">

<xs:element name="note">

<xs:complexType>

<xs:sequence>

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

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

<xs:element name="heading" type="xs:string7>

<xs:element name="body" type="xs:string7>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Ссылка на внешнее DTD

<?xml version="1.0"?> <!DOCTYPE note SYSTEM

"http://www.mysite.com/dtd/note.dtd"> <note>

<to>Receiver</to> <from>Sender</from> <heading>Theme</heading> <body>Some text</body> </note>

Ссылка на XML Schema

<?xml version-'1.0"?> <note

xmlns="http://www. mysite.com"

xmlns:xsi="http://vwvw.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://vwvw. mysite.com http://www.mysite.com/xsd/note.xsd"> <to>Receiver</to> <from>Sender</from> <heading>Theme</heading> <body>Some text</body> </note>

  • Фрагмент:

xmlns="http:/ArtAM^ mysite.com"

определяет пространство имен, используемое по умолчанию. Эта декларация объявляет валидатору, что все элементы, используемые в XML-документе без префикса-названия пространства имен, объявлены в пространстве имён "http://www.mysite.com".

  • Поскольку создается экземпляр XML Schema, доступно пространство имен:

xmlns:xsi="http://www. w3.org/2QQ1/XMLSchema-instance"

Включение данного пространства имен делает обязательной валидацию ХМL-документа.

  • При указании расположения XSD-документа можно использовать атрибут schemaLocation пространтства имён XMLSchema-instance.

Этот атрибут содержит пары значений, разделённые пробелами. Первое значений - это имя пространства имён. Второе значение - это URL XSD, используемого для данного прострнаства имен:

xsi:schemaLocation="http:/AAAAAA/.mvsite.com http://www.mysite.cofn/xsd/note.xsd" xsi:schemaLocation= "namespace_name uri

namespace_name url..."

XSD. Элемент <schema>

Элемент <schema> является корневым элементом любого экземпляра XML Schema:

  • ?xml version="1.0"?>

  • xs:schema> ■ ■ ■

■ ■ ■

  • /xs:schema>

Атрибуты элемента Schema

Элемент <schema> может содержать

атрибуты.

Пример декларации XSD :

<?xml version="1.0"?> <xs:schema

xmlns:xs="http://www.w3. org/2001 /ХМ LSchema" targetNamespace="http://www. mysite.com" xm I ns="http://www. mysite.com"

elementFormDefault="qualified">

</xs:schema>

  • Следующий фрагмент:

xmlns:xs="http://www.w3.org/2001/^

определяет, что элементы и типы данных, используемые в схеме, принадлежат пространству имен "http://www.w3.org/2001/XMLSchema".

Он также определяет, что элементы и типы данных из пространства имен "http://www.w3.org/2001 /XMLSchema" должны использоваться с префиксом "xs:".

  • Следующий фрагмент:

targetNamespace="http://www. mysite.com"

что элементы, определённые в этом XSD (note, to, from, heading, body.) принадлежат пространству имен "http://www.mysite.com".

  • Данный фрагмент:

xmlns="http://www.mysite.com"

определяет, что пространством имен по умолчанию является "http://www.mysite.com".

  • Данный фрагмент:

elementFormDefault-'qualified"

что любой элемент, указанный в данном XSD при использовании в экземпляре XML- документа должен содержать префикс пространства имен.

Простые элементы (Simple Elements)

  • Простым элементом является XML-элемент, который может содержать только текст. Такой элемент не может содержать другие элементы или атрибуты.

  • Текст может принадлежать к нескольким различным типам данных. Это может быть как один из типов данных, включенных в XSD

(boolean, string, date и т.д.), так и пользовательский тип данных.

  • К типам данных также можно добавлять ограничения с целью ограничить допустимое содержимое, или обеспечения соответствия данных определённому шаблону.

Декларация простого элемента

Синтаксис

< xs:element name-'xxx" type="yyy"/> где xxx- это имя элемента; ууу - это тип данных элемента.

XML Schema имеет набор предопределённых типов данных. Например:

  • xs: string

  • xs:decimal

  • xs: integer

  • xs: boolean

  • xs:date

  • xs:time

XML-элементы:

  • lastname>Refsnes</lastname>

  • age>36</age>

  • dateborri>1970-03-27</dateborri>

XSD-декларация соответствующих простых элементов:

  • xs:element name-'lastname" type-'xs:string'У>

  • xs:element name="age" type="xs:integer"/>

  • xs:element name-'dateborn" type="xs:date"/>

Значения по умолчанию и фиксированные значения простых элементов

• Значение по умолчанию автоматически присваивается элементу в случае, если для него не было указано никакое другое значение.

< xs:element name-'color" type="xs:string"

default="red"/>

• Фиксированное значение элемента не может быть изменено, хотя элемент и может быть пустым, тогда фиксированное значение подставляется автоматически.

< xs:element name-'color" type="xs:string"

fixed="red"/>

Атрибуты XSD

  • Простые элементы не могут иметь атрибуты. Если элемент содержит атрибуты, то ему присвоен (сложный тип данных complex type).

  • Но сам по себе атрибут всегда объявляется как простой тип.

Декларация атрибута

Синтаксис

<xs:attribute name="xxx" type="yyy"/> где ххх- это имя атрибута; ууу - это тип данных атрибута.

Для атрибутов также как и для элементов могут задаваться предопределённые в XML Schema типы данных:

  • xs:string

  • xs:decimal

  • xs: integer

  • xs: boolean

  • xs:date

  • xs:time

XML-элемент с атрибутом: <lastname lang="EN">Smith</lastname>

Соответствующая декларация атрибута в XSD:

<xs:attribute name-'lang" type="xs:string"/>

Значения по умолчанию и фиксированные значения атрибутов

• Значение по умолчанию автоматически присваивается атрибуту в случае, если для него не было указано никакое другое значение.

<xs:attribute name-'lang"type="xs:string"

default="EN"/>

• Фиксированное значение атрибута не может быть изменено, хотя атрибут и может быть пустым, тогда фиксированное значение подставляется автоматически.

<xs:attribute name-'lang"type="xs:string'

fixed="EN"/>

Опциональные и обязательные

атрибуты

По умолчанию атрибуты являются опциональными. Для указания того, что XML-атрибут является обязательным, используется XSD-атрибут "use":

<xs:attribute name-'lang" type="xs:string"

use="required"/>

Ограничения содержимого

  • Когда XML-элементу или атрибуту назначается тип данных, это задает ограничения на содержимое элемента или атрибута.

Например, если XML-элемент имеет тип данных "xs:date" и содержит строку "Hello World", такой элемент валидацию не пройдет.

  • XML Schema, позволяет разрабатывать собственные ограничения для XML- элементов и атрибутов. Эти ограничения называются аспекты данных (facets).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]