340 likes | 594 Views
XML- ТЕХНОЛОГИИ. Лекция 2 Схемы XML -документа. Ограничения на структуру документа. XML предоставляет слишком большую свободу в организации корректного документа Такая свобода может стать источником ошибок и путаницы Решение — задать структурные и семантические ограничения.
E N D
XML-ТЕХНОЛОГИИ Лекция 2 Схемы XML-документа
Ограничения на структуру документа • XML предоставляет слишком большую свободу в организации корректного документа • Такая свобода может стать источником ошибок и путаницы • Решение — задать структурные и семантические ограничения
Примеры ограничений на структуру документа • Структурное ограничение: элемент с именем А может содержать только элементы с именем В • Семантическое ограничение: атрибут a, содержащийся в элементе A, должен обладать уникальным значением среди множества значений атрибутов a
Схемы XML-документов • Схема XML-документа — модель, отделенная от самого документа, в которой заданы его структурные и параметрические ограничения • Схема — модель типов • Наиболее популярными языками являются DTD, XML Schema (XSD), RelaxNG, XDR
ВалидныеXML-документы • ВалидныйXML-документ по отношению к некоторой схеме — корректный XML-документ, удовлетворяющий всем ограничениям, определенным в схеме
DTD. Аббревиатура и назначение • DTD — Document Type Definition • DTD —это язык описания, который позволяет определить, какие элементы должны быть в XML-документе, сколько раз они должны повторяться, какие атрибуты должны быть у этих элементов, какие атрибуты обязательные и какие не обязательные, а также какие сущности могут использоваться в документе
DTD. Преимущества • DTD является де-факто стандартом спецификации схем (по крайней мере, пока стандарт XML Schema не будет окончательно утвержден) • схемы DTD можно однозначно отобразить на другие XML-схемы
DTD. Объявление типа документа • <!DOCTYPEкорневой_элементURI_внешнего_подмножества [внутреннее_подмножество]>: • <!DOCTYPEroot"schemas/test.dtd"> или • <!DOCTYPEroot[ <!ELEMENT root (elem1)+> ]> или • <!DOCTYPEroot"schemas/test.dtd" [ <!ELEMENT root (elem1)+> ] >
DTD. Объявление элементов • <!ELEMENT название элемента (что может содержать)> Специальные знаки: • «+» —один или несколько экземпляров объекта в скобках • «*» — ноль, один или несколько экземпляров объекта • «?» —допустимы ноль или один экземпляр объекта
DTD. Объявление элементов • «EMPTY» — элемент должен быть пустым • «ALL» —элемент может содержать любые вложенные элементы и текстовые узлы • «#PCDATA» —элемент может содержать только текст, но не вложенные элементы
DTD. Примеры объявления элементов • <!ELEMENT снабжение (поставщик)+> • <!ELEMENT поставщик (поставка)*> • <!ELEMENT поставка (товар)> • <!ELEMENT товар EMPTY>
DTD. Объявление атрибутов • <!ATTLIST родительский_элемент имя тип режим_использования> • Типы атрибутов: ID, CDATA, IDREF и т.д. • Режимы: #IMPLIED, #REQUIRED, «значение по умолчанию»
DTD. Пример объявления атрибутов • <!ATTLIST снабжение номер CDATA#REQUIRED > • <!ATTLIST поставщик код ID#REQUIRED имя CDATA#REQUIRED статус CDATA"10" город CDATA#REQUIRED > • <!ATTLIST товар код ID#REQUIRED назвCDATA #REQUIRED цвет (синий | красный | белый | иной) #IMPLIED город CDATA # IMPLIED >
DTD. Недостатки • Отличный от XML синтаксис языка • Нет проверки типов данных. В DTD есть только один тип – строка • В DTD нет пространств имен. Нельзя поставить в соответствие документу два и более DTD описаний
XSD. Главные XML-схемы • XSD — альтернативный способ создания правил построения XML-документов • По сравнению с DTD схемы обладают более мощными средствами для определения сложных структур данных, обеспечивают более понятный способ описания грамматики языка, способны легко модернизироваться и расширяться. • XSD позволяют описывать правила для XML- документа средствами самого же XML
XSD. Стандарты • XML DTD forXML-Data-Schema • Версия 1.0 была одобрена в качестве рекомендации консорциума W3C 2 мая 2001 года • 28 октября 2004 года была опубликована вторая редакция версии 1.0, исправляющая ряд ошибок
XSD. Корневой элемент • schema — корневой элемент любой XSD-схемы • в XSD всегда пространство имензадается URL http://www.w3c.org/2001/XMLSchema • в XSDдля обозначения пространства имен принято использовать префикс xsd • <xsd:schemaxmlns:xsd=http://www.w3c.org/2001/XMLSchema>
XSD. Сложные и простые типы • Элемент простого типа не может содержать другие элементы или атрибуты • Элемент простого типа задается конструкцией simpleType • Комплексный тип может создавать эффект встраивания элементов в другие элементы или может ассоциировать атрибуты с элементом • Элемент сложного типа задается конструкцией complexType
XSD. Определение простых типов • Некоторые из простых типов, например string и decimal встроены в язык XML-схемы, в то время как другие определены специально для конкретных документов • Для определения имени и типа собственного простого типа используют оператор simpleType. • С помощью оператора restriction указывают прототип и идентифицируют фасеты
XSD. Ограничение вхождений • minOccures — минимальное число экземпляров элемента (например, 0 ) • maxOccures— максимальное число экземпляров элемента (например, 1 или unbounded) • Пример: <xsd:element name="test" minOccurs="0" maxOccurs="unbounded">…</xsd:element>
XSD. Ограничение вхождений • minOccures — минимальное число экземпляров элемента (например, 0 ) • maxOccures— максимальное число экземпляров элемента (например, 1 или unbounded) • Пример: <xsd:element name="test" minOccurs="0" maxOccurs="unbounded">…</xsd:element>
XSD. Определение элементов • В определении элемента указываются: имя элемента, его тип, количество вхождений и структура • Совокупность дочерних элементов обозначается как sequence (характерно только для элементов сложного типа) • Совокупность атрибутов элемента задается непосредственно в элементе complexType
XSD. Пример определения элементов <xsd:element name="Снабжение"> <xsd:complexType> <xsd:sequence> <xsd:element name="Поставщик"> <xsd:complexType> <xsd:sequence> <xsd:element name="Поставка"> … </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
XSD. Определение атрибутов • В определении атрибута указываются: имя атрибута, тип данных и режим использования • Совокупность атрибутов элемента задается непосредственно в элементе complexType
XSD. Пример определения атрибутов <xsd:element name="Снабжение"> <xsd:complexType> <xsd:sequence> <xsd:element name="Поставщик"> <xsd:complexType> <xsd:attribute name="ID" type="xsd:string“ use="required"/> <xsd:attribute name=“name" type="xsd:string“ use="required"/> <xsd:attribute name=“status" type="xsd:positiveInteger" /> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="ID" type="xsd:string“ use="required"/> </xsd:complexType> </xsd:element>
RelaxNG. Почему XSD недостаточно? • XSD решает все проблемы DTD: он является XML приложением, и позволят описывать все мыслимые виды ограничений на структуру документа • XSD характеризуется излишней сложностью • На основе языков TREX и RELAX был разработан язык схем, названный RELAX NG • RELAX NG (REgularLAnguagefor XML NextGeneration)
RelaxNG. Корневой элемент • Корневой элемент — grammar • Описание конструкций Relax NG — start • Пространство имен в Relax NG относится к URL http://relaxng.org/ns/structure/1.0 <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> </start> </grammar>
RelaxNG. Элементы <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <element name="Снабжение"> <element name="Поставщик"> <element name="Поставка"> <element name="Товар"> </element> </element> </element> </element> </start> </grammar>
RelaxNG. Атрибуты <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <element name="Снабжение"> <attribute name="ID"> <text /> </attribute> <element name="Поставщик"> <attribute name="ID"> <text /> </attribute> <attribute name="name"> <text /> </attribute> <attribute name="status"> <text /> </attribute> <element name="Поставка"> <element name="Товар"> </element> </element> </element> </element> </start> </grammar>
RelaxNG. Смешанное содержимое <element name="subject"> <mixed> <element name="b"> <text /> </element> <element name="i"> <text /> </element> </mixed> </element> Элементtest может содержать как текст, так и один элемент b или один элемент i.
RelaxNG. Опциональные элементы <element name="subject"> <mixed> <optional> <element name="b"> <text /> </element> </optional> <optional> <element name="i"> <text /> </element> </optional> </mixed> </element> Элементtest может содержать как текст, так и один элемент b или один элемент i.
RelaxNG. Альтернатива <element name="location"> <choice> <element name="description"><text/></element> <element name="place"><text/></element> </choice> </element> Элементlocation может содержать или один элемент description, или один элемент place.
RelaxNG. Множественные вхождения … <element name="Снабжение"> <oneOrMore> <element name="Поставщик"> <zeroOrMore> <element name="Поставка"> <oneOrMore> <element name="Товар"> </element> </oneOrMore> </element> </zeroOrMore> </element> </oneOrMore> </element> …