Языки описания информации Лекция 3. Кафедра «ОСУ» Весенний семестр 2010/2011 уч. года XML Schema и XLink
XSD (XML Schema Definition Language) XML Schema: альтернатива использованию DTD
Стандарт XML Schema XML Schema это альтернатива языку DTD, основанная на синтаксисе языка XML. XML 1.0 поддерживает DTD для определения структуры документов. Язык XML Schema имеет лучшие возможности поддержки для приложений, структуры документов, атрибутов т типов данных. Будущие версии XML будут основываться на XML Schema для определения типов XML документов. Стандарт XML Schema включает – XML Schema Structures specifies the XML Schema definition language. – XML Schema Data types specifies extensible data types for XML.
Спецификации XML Shema и временной график их принятия SpecificationDraft / ProposalRecommendation XML Schema (XSD) 02. May 2001 XML Schema 1.0: Structures 02. May 2001 XML Schema 1.0: Datatypes 02. May 2001 XML Schema (2.Ed) 28. Oct 2004 XML Schema Structures (2.Ed) 28. Oct 2004 XML Schema Datatypes (2.Ed) 28. Oct 2004 XML Schema Component Designators 17. Nov 2008 XML Schema 1.1: Structures30. Apr 2009 XML Schema 1.1: Datatypes30. Apr 2009
Язык XML Schema Языка DTD не основывается на синтаксисе языка XML и имеет ограниченный набор типов данных. Описания на языке DTD конкретного языка разметки (структура содержимого и объявления списков атрибутов) трудно читать и понимать, в элементах и атрибутах нельзя задавать тип и шаблоны данных. Для преодоления этих недостатков был разработан другой язык описания синтаксиса (структуры) конкретных языков разметки, называемый XML Schema, – часто обозначается как XSD (XML Schema Definition). Язык XML Schema имеет следующее пространство имен –
Преимущества языка XSD Основное преимущество языка XSD – разработан на основе метаязыка XML и использует его синтаксис. – Это позволяет обрабатывать описания синтаксиса на языке XSD с помощью тех же программ, что и сами документы. – Схемы XML можно расширять с помощью применения пространств имен. Другое большое преимуществ языка XSD – поддержка большого количества типов данных. – это позволяет точнее задавать правила проверки содержания XML-документов и создавать новые типы данных.
Рассмотрим пример простого XML- документа (note.xml) Луценко Фролов Напоминание Не забудь о собрании лаборатории в субботу!
DTD описание (в файле note.dtd) В первой строке определяется, что элемент сообщение должен иметь 4 дочерних элемента: для_кого, от_кого, заголовок, содержание. В последующих строках описывается, что эти дочерние элементы имеют тип "#PCDATA" (т.е. могут содержать текст).
Связывание DTD описания с XML документом Луценко Фролов Напоминание Не забудь о собрании лаборатории в субботу!
Описание схемы на языке XML Schema На языке XML Schema язык разметки использованный для составления XML- документа note.xml может быть описан следующим образом (файл note.xsd):
Связывание XML-документ note.xml с описанием его синтаксиса на языке XML Schema можно выполнить следующим образом: < сообщение xmlns=" xmlns:xsl=" xsl:schemaLocation=" note.xsd"> Луценко Фролов Напоминание Не забудь о собрании лаборатории в субботу!
Здесь все используемые элементы, с помощью первого атрибута объявлены в пространстве имен " Во втором атрибуте (xmlns:xsl=" создается префикс для пространства имен «XML Schema Instance», которое используется для связывания с экземплярами документов описания схем на языке XSD. Из данного пространства имен можно использовать атрибут schemaLocation, которому задается два значения, разделенные пробелом. – первое значение ( – это используемое пространство имен, – второе значение (note.xsd) – местоположение документа с описанием XML схемы для данного пространства имен. Например: xsl:schemaLocation=" note.xsd"
Язык XML Schema позволяет описывать структуру XML документа. Пример XSD описания:
Введение в XML Schema Язык XML Schema предназначен для описания структуры XML документов. – Язык XML Schema также называется XML Schema Definition (XSD). Целью создания языка XML Schema является описание правильного синтаксиса конкретного языка разметки (также, как и язык DTD). XML Schema определяет: – элементы, которые могут появляться в документах; – атрибуты, которые могут использоваться с элементами; – как элементы могут вкладываться друг в друга; – порядок следования дочерних элементов; – может ли элемент быть пустым или может ли он включать текст; – типы данных для элементов и атрибутов; – значения по умолчанию и фиксированные значения для элементов и атрибутов.
XML Schema является правопреемником (заменителем) языка DTD. Считается, что скоро XML Schema будет использоваться в большинстве Web приложений в качестве замены для DTDs. Причинами этого является: – XML Schema является расширяемым для будущих дополнений; – XML Schema более выразительный и более мощный, чем DTD; – XML Schema использует семантику метаязыка XML; – XML Schema поддерживает типы данных; – XML Schema поддерживает пространства име (namespaces).
Почему нужно использовать XML Schema Язык XML Schemas является более мощным по сравнению с языком DTD. – XML Schemas поддерживает Data Types. – XML Schemas использует XML Syntax. – XML Schemas делает безопасным Data Communication. – XML Schemas является Extensible. – Well-Formed не является Достаточным.
XML Schemas поддерживает типы данных One of the greatest strength of XML Schemas is the support for data types. With support for data types: – It is easier to describe allowable document content – It is easier to validate the correctness of data – It is easier to work with data from a database – It is easier to define data facets (restrictions on data) – It is easier to define data patterns (data formats) – It is easier to convert data between different data types
Рассмотрим пример простого XML- документа (note.xml) Луценко Фролов Напоминание Не забудь о собрании лаборатории в субботу!
Описание схемы на языке XML Schema На языке XML Schema язык разметки использованный для составления XML- документа note.xml может быть описан следующим образом (файл note.xsd):
Связывание XML-документ note.xml с описанием его синтаксиса на языке XML Schema можно выполнить следующим образом: < сообщение xmlns=" xmlns:xsl=" xsl:schemaLocation=" note.xsd"> Луценко Фролов Напоминание Не забудь о собрании лаборатории в субботу!
Здесь все используемые элементы, с помощью первого атрибута объявлены в пространстве имен " Во втором атрибуте (xmlns:xsl=" создается префикс для пространства имен «XML Schema Instance», – используется для связывания с экземплярами документов описания схем на языке XSD. Из данного пространства имен используется атрибут schemaLocation, которому задается два значения, разделенные пробелом. – первое значение ( – это используемое пространство имен, – второе значение (note.xsd) – местоположение документа с описанием XML схемы для данного пространства имен. Например: xsl:schemaLocation=" note.xsd"
Синтаксис языка XSD Корневым элементом описаний на языке XML Schema является элемент :... Элемент может включать некоторые атрибуты. Например:
Первый атрибут xmlns:xs=" указывает, что в данном документе используется пространство имен " Второй атрибут targetNamespace= " указывает на то, что для описываемых в документе новых элементов (сообщение, для_кого, от_кого, заголовок, содержание) задается пространство имен " Третий атрибут xmlns=" w3schools.com" указывает, что пространством имен по умолчанию является " Четвертый атрибут elementFormDefault= "qualified" указывает, что все элементы данного XML-документа должны браться из пространства имен targetNamespace.
Встроенные типы языка XML Schema В описаниях всех элементов и атрибутов конкретного языка может использоваться атрибут type – тип значений элемента или атрибута. В языке XML Schema определен набор из 19 встроенных (предопределенных) типов данных, которые могут использоваться при описании элементов и атрибутов.
Примеры встроенных типов xs:string – произвольные строки текста; xs:byte, xs:float, xs:long – числовые форматы: – xs:byte – любое 8-разрядное число со знаком; – xs:long – любое 32-разрядное число со знаком; – xs:float – число с плавающей точкой, например, 15,6 или 5.032E-6. xs:time, xs:date, xs:timeinstant, xs:timeduration – шаблоны для обозначения времени, даты и длительности;
xs:boolean – значение true или false (допускаются также числовые эквиваленты: 0 или 1); xs:binary – шаблон для двоичных чисел, например, ; xs:language – код языка, например, en-US или RUS; xs:uri-reference – шаблон для любого URI, например, xs:ID, xs:IDREF, xs:IDREFS, xs:NMTOKEN, xs:NMTOKENS – типы атрибутов, действующие так же, как соответствующие типы в DTD.
Такое большое количество встроенных типов делает язык XSD очень полезным для описания документов, связанных со специальными приложениями для обработки данных. – например, базами данных и бланками ввода заказов. не требуется писать программу, проверяющую типы данных, т.к. эту работу выполняет сам XML-процессор.
Описание простых элементов В состав описываемого конкретного языка могут входить простые элементы и составные элементы. – Простые элементы могут включать только текстовое содержание и не могут включать другие элементы или атрибуты. – Составные элементы могут содержать текст, атрибуты и дочерние элементы. Для описания простого элемента используется следующий синтаксис: где "имя" это имя элемента, а "тип" – тип данных, которые описываемый элемент может иметь.
Примеры простых XML элементов XML-документ: Refsnes Эти элементы могут быть следующим образом описаны с помощью языка XSD:
Значения по умолчанию и фиксированные значения Простые элементы могут иметь значения по умолчанию или фиксированные значения. Значение по умолчанию автоматически назначается элементу, когда никакого значения ему не задано. Например: Если для простого элемента задано фиксированное значение, то данному элементу не могут быть заданы другие значения. Например:
Описание атрибутов Простые элементы не могут иметь атрибуты. Если элемент имеет атрибуты, то он считается составным типом. Однако, сами атрибуты описываются, как простые типы, следующим образом:, – "имя" – это имя атрибуты, – "тип" – тип данных, который может быть задан данному атрибуту. Например: Атрибуты, также, как и простые типы могут иметь значения по умолчанию или фиксированные значения. Например:
По умолчанию атрибуты считаются не обязательными. Для задания обязательности описываемых атрибутов используется атрибут "use". Например:
Ограничения на содержание элементов Если простому элементу или атрибуту задан тип, то он налагает ограничения на их содержание. – Например, если элемент типа xs:date будет содержать строку типа "Hello World", то он не будет считаться верным. Кроме использования типов на значения простых элементов и атрибутов можно также накладывать дополнительные ограничения, которые еще называются «гранями» (facets). Ограничения можно задать с помощью элементов xs:restriction, в который вкладываются разные типы ограничений,
Типы ограничений на элементы Ограничение Описание enumeration Определение допустимых значений. fractionDigits Задание максимальное количество знаков после запятой (равно или больше чем 0). length Задание точного количества разрешенных символов или значений (равно или больше 0). maxExclusive Задание верхней границы для числового значения (значение должно быть меньше чем заданная граница). maxInclusive Задание верхней границы для числового значения (значение должно быть меньше или рано заданной границе). maxLength Задание максимального количества символов или элементов списка. (равно или больше чем 0).
Типы ограничений на элементы (2) Ограничение Описание minExclusive Задание нижней границы для числового значения (значение должно быть больше чем заданная граница). minInclusive Задание нижней границы для числового значения (значение должно быть больше или равно заданной границе). minLength Задание минимального количества символов или элементов списка. (равно или больше чем 0). pattern Описание точной последовательности символов, которые считаются верными. totalDigits Задание точного количества цифр (больше чем 0). whiteSpace Описание того, как обрабатываются пробельные символы в тексте (white space) (перевод строки, табуляция, пробел и возврат каретки).
Пример ограничения Для элемента age (возраст) возможный интервал значений от 0 до 120 можно задать следующим образом:
Пример ограничения (2) C помощью элемента xs:enumeration можно ограничить содержание элемента списком возможных значений. Например, с помощью элемента xs:enumeration можно установит условие, что элементу car могут задаваться только значения из списка (Audi, Golf, BMW):
Пример с типами автомобилей можно описать и по- другому: – вначале создать новый тип carType, – затем использовать его для описания элемента car: Новый тип carType может использоваться и для описания и других элементов, т.к. не является частью элемента car.
Ограничения содержания текстового элемента Для ограничения содержания элемента, имеющего тип xs:string, можно использовать шаблоны, которые задаются с помощью элемента xs:pattern и атрибута value. Шаблоны используют язык регулярных выражений и задают наборы правил формирования последовательности допустимых символов. Они могут задаваться в виде перечня разрешенных строк разделенных знаком "|". – Например: "male | female".
В каждой строке могут быть заданы конкретные символы или не определенные символы, описываемые в квадратных скобках […], в которых перечисляются возможные их значения, – например, [xyz] – символ может получать значение x или y или z. Вместо перечисления значений символа можно задавать интервалы возможных значений: – a-z (только маленькие буквы); – A-Z (только большие буквы); – 0-9 (только цифры). Интервалы можно комбинировать, – например, a-zA-Z – возможна маленькая или большая буква.
Кроме задания символов в квадратных скобках можно использовать следующие указатели: – \d – одна цифра; – \s – пробельный символ; – \w – буква или цифра. С помощью круглых скобок возможные символы можно объединять в группы, после которой можно указать сколько раз данная группа может повториться. Для этого после закрывающейся скобки группы можно указать символы: – * – ноль или более; – + – 1 или более; – {n} – точно n раз.
Пример 1 разрешенными значениями являются одна или несколько пар символов, каждая пара состоит из маленькой и большой буквы – верно: "sToP"; – неверно: "Stop" или "STOP".
Пример 2 должно задаваться точно 8 символов, каждый из которых может быть – маленькой (a-z) или большой буквой (A-Z), или – цифрой от 0 до 9 (0-9).
Пример 3 может задаваться – любой символ алфавита ([A-Z]), – за которым следует дефис (-) и – три цифры (\d{3}).
Описание составных элементов Составные элементы могут содержать текст, другие элементы и/или атрибуты. Имеются 4 вида составных элементов: – пустые элементы пустые элементы, которые не могут иметь содержание, но могут иметь атрибуты; – элементы, содержащие другие элементы; – элементы, содержащие только текст; – элементы, которые содержат другие элементы и текст (смешанное содержание). Каждый из этих видов элементов также может содержать и атрибуты.
Примеры составных элементов Пример пустого составного элемента "product": Пример составного элемента "employee", содержащего только дочерние элементы : John Smith
Описание пустых элементов Пустые элементы не могут иметь содержания, но могут иметь атрибуты. Их нужно описывать, как составные элементы, но не включать в них никакие дочерние элементы, а определять только их атрибуты. Например: элемент, использующий атрибут pid, которому могут задаваться только целые положительные значения (например, ), может описываться на языке XML Schema следующими способами:
Создание нового составного типа и указание его в описании элемента product: Непосредственное описание элемента без содержания и с одним атрибутом с помощью элементов xs:complexType и xs:restriction:
Описание составных элементов, содержащих только дочерние элементы Составные элементы, содержащие только дочерние элементы, как например элемент person: John Smith могут определяться на языке XSD следующим образом: Элемент xs:sequence указывает, что дочерние элементы (firstname и lastname) должны в XML-документе появляться в заданном порядке.
Также можно задать создать новый тип составного элемента persontype и использовать его при описании элемента person:
Описание элементов, имеющих простое содержание При описании элемента, включающего только простое содержимое (текст и атрибуты), нужно использовать элемент simpleContent. В элементе simpleContent можно описать расширение (xs:extension) или ограничение (xs:restriction):...
Описание элемента simpleContent с использованием ограничение (xs:restriction):...
Пример описания простого элемента Например, нужно описать элемент "shoesize" (размер обуви), которые записываются следующим образом: 35 Данный элемент может быть описан, как составной элемент, содержащий только целые значения и использующий атрибут с именем country: Также можно вначале создать новый составной тип shoetype, а затем использовать его при описании элемента shoesize.
Описание составных типов со смешанным содержанием Составные типы со смешанным содержанием могут включать атрибуты, дочерние элементы и текст. Например, рассмотрим элемент letter, который может содержать, как текст, так и другие элементы: Уважаемый господин Луценко Александр. Ваш заказ 1032 Был отправлен
Данный элемент "letter" можно описать следующим образом: Отметим, чтобы разрешить записывать символьные данные между дочерними элементами, требуется задать атрибуту mixed значение true.
Индикаторы Для задания правил использования в XML- документе дочерних элементов применяются индикаторы. Имеется три вида индикаторов: – Индикаторы порядка – используются для определения порядка элементов (all, choice, sequence). – Индикаторы кратности – используется для определения того, сколько раз могут записываться элементы: (maxOccurs, minOccurs). – Индикаторы группирования – используются для задания взаимосвязанных наборов элементов (Group, attributeGroup).
Индикатор Индикатор указывает, что дочерние элементы могут появляться в любом порядке и каждый элемент должен быть появится только один раз. Например: Отметим, что при использовании индикатора можно – индикатору задавать значение 0 или 1, – индикатору может задаваться только значение 1.
Индикатор Индикатор указывает, что в составном элементе должен быть задан один из перечисленных дочерних элементов. Например:
Индикатор Индикатор указывает, что дочерние элементы должны записываться в том порядке, как они описаны. Например:
Индикаторы и Индикатор указывает на максимальное количество, а индикатор указывает на минимальное количество дочерних элементов. Например, для задания ограничения детей от 0 до 10 можно записать
По умолчанию для всех элементов задаются индикаторы maxOccurs=1 и minOccurs=1. Для того, что не было ограничения на максимальное количество дочернего элемента нужно задать: maxOccurs="unbounded".
С помощью индикаторов группирования элементов можно описывать группы элементов, задавать им имена и использовать их в других описаниях. При создании группы элементов нужно указать индикатор порядка элементов внутри данной группы (all, choice или sequence). Например: описание группы элементов с именем persongroup, которые должны появляться в заданном порядке:
После определения группы с именем persongroup, на нее можно ссылаться в других описаниях с помощью атрибута ref. Например, при описании составного элемента:
С помощью индикаторов группирования атрибутов можно описывать группы атрибутов, задавать им имена и использовать их в других описаниях. Например: описание группы атрибутов с именем personattrgroup: После создания данной группы атрибутов на нее можно ссылаться в других описаниях. Например:
Элемент Элемент позволяет включать в XML-документ элементы, которые не указаны в описании схемы конкретного языка разметки. Пример, показанный ниже, является фрагментом из схемы конкретного языка разметки, хранящегося в файле family.xsd. В нем содержится описание элемента person. С помощью элемента выполняется расширение содержания типа элементов person. В этом случае в элементе person после элемента lastname могут записываться любые не описанные в схеме элементы:
Теперь в элементе person включать, например, элемент children, хотя в самой схеме возможность использования данного элемента не была описана. Рассмотрим файл, называемый "children.xsd", который содержит описание схему (описание синтаксиса конкретного языка разметки):
Ниже показан XML-документ (называемый "Myfamily.xml"), использующий элементы из двух разных схем "family.xsd" и "children.xsd": Hege Refsnes Cecilie Stale Refsnes
Данный XML-документ является действительным (valid), так как схема "family.xsd" позволяет расширять элемент "person" необязательным элементом после элемента "lastname". Элементы и используются для того, чтобы сделать конкретный язык разметки расширяемым! Они позволяют документу содержать дополнительные элементы, которые не объявлены в основной XML схеме.
Спасибо за внимание!