ВВЕДЕНИЕ В ТЕХНОЛОГИИ W3C ЛЕКЦИЯ 12. DTD, XML SCHEMA, XPATH, XSLT DOCUMENT TYPE DEFINITION (DTD) Определение допустимых компонентов XML документа: • Элементов • Атрибутов НАЗНАЧЕНИЕ DTD • XML документ описывает собственный формат • Соглашение о формате обмена данными • Проверка файлов на соответствие формату ВАРИАНТА ОПРЕДЕЛЕНИЯ DTD Встроенный Внешний • В том же документе что и тело XML • Внутри определения DOCTYPE • <!DOCTYPE root-element [element-declarations]> • В отдельном файле • DOCTYPE ссылается на файл • <!DOCTYPE root-element SYSTEM "filename"> БЛОКИ DTD • Elements • Attributes • Entities • PCDATA • CDATA ЭЛЕМЕНТЫ • Основа XML • <!ELEMENT element-name category> • <!ELEMENT element-name (element-content)> КАТЕГОРИИ ЭЛЕМЕНТОВ • Пустой • <!ELEMENT br EMPTY> • <br /> • С обрабатываемыми данными • <!ELEMENT element-name (#PCDATA)> • С произвольным содержимым • <!ELEMENT note ANY> • С дочерними элементами • <!ELEMENT element-name (child1,child2,...)> МОДИФИКАТОРЫ • Только одно вхождение • • Одно и более вхождений • • <!ELEMENT note (message+)> Ноль и более вхождений • • <!ELEMENT note (message)> <!ELEMENT note (message*)> Не более одного вхождения • <!ELEMENT note (message?)> АТРИБУТЫ • Метаданные элементов • <!ATTLIST element-name attribute-name attribute-type attributevalue> • <!ATTLIST payment type CDATA "check"> • <payment type="check" /> ТИПЫ АТРИБУТОВ CDATA Символьные данные (en1|en2|..) Список значений ID Уникальный идентификатор IDREF Ссылка на идентификатор другого элемента IDREFS Ссылка на идентификаторы других элементов NMTOKEN Правильное имя XML NMTOKENS Список правильных имен XML ENTITY Сущность ENTITIES Список сущностей NOTATION Примечание xml: Предопределенное значение xml ТИПЫ ЗНАЧЕНИЙ АТРИБУТОВ • value – некоторое значение по умолчанию • #REQUIRED – обязательный атрибут • #IMPLIED – необязательный атрибут • #FIXED value – неизменяемое значение СУЩНОСТИ (ENTITIES) • Переменные используемые для подстановки значений • <!ENTITY writer "Donald Duck."> <!ENTITY copyright "Copyright W3Schools."> • <author>&writer;&copyright;</author> XML - SCHEMA • Альтернатива DTD • Основана на XML • XML Schema Definition (XSD) ЧТО ОПИСЫВАЕТ XML-SCHEMA • Элементы, которые может содержать документ • Атрибуты, которые может содержать документ • Отношения между элементами • Порядок дочерних элементов • Типы данных для атрибутов • Значения по умолчанию и фиксированные значения ПРЕИМУЩЕСТВА XML SCHEMA • Расширяемость • Более широкие возможности • Написана на XML • Поддержка типов данных • Поддержка пространств имен ЭЛЕМЕНТ <SCHEMA> • • Корневой элемент XML Schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> ... ... </xs:schema> АТТРИБУТЫ • xmlns:xs=http://www.w3.org/2001/XMLSchema • Пространство имен схемы • targetNamespace=http://www.w3schools.com • Пространство имен документа, описываемого схемой • xmlns=http://www.w3schools.com • Пространство имен по умолчанию ССЫЛКИ НА XML SCHEMA • <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> ОПРЕДЕЛЕНИЕ ЭЛЕМЕНТОВ • <xs:element name="xxx" type="yyy"/> • name – имя элемента • type – тип данных • default = “value” – значение по умолчанию • fixed = “value” – фиксированное значение ОПРЕДЕЛЕНИЕ АТРИБУТА • <xs:attribute name="xxx" type="yyy"/> • name – имя элемента • type – тип данных • default = “value” – значение по умолчанию • fixed = “value” – фиксированное значение • use=“required” – обязательный атрибут ОГРАНИЧЕНИЯ • <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element> ОГРАНИЧЕНИЯ • <xs:element name="car"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element> ОГРАНИЧЕНИЯ • <xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element> СЛОЖНЫЕ ТИПЫ ДАННЫХ • <xs:element name="employee" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> ИНДИКАТОРЫ • Порядка • All • Choice • Sequence • Вхождения • maxOccurs • minOccurs • Групп • Group name • attributeGroup name ЭЛЕМЕНТ <ANY> • <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:any minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> АТРИБУТ <ANYATTRIBUTE> • <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> XPATH • Язык поиска информации в XML • Используется • • • • XSLT XQuery XPointer XLink ТИПЫ УЗЛОВ • Элементы • Атрибуты • Текст • Пространства имен • Инструкции по обработке • Комментарии • Документы АТОМАРНЫЕ ЗНАЧЕНИЯ • Узлы не имеющие предков и потомков • Текст в элементах • Значения атрибутов ТИПЫ ОТНОШЕНИЙ • Родитель • Дочерний • Ровесник • Предок • Потомок ВЫБОР УЗЛОВ nodename Все узлы с указанным именем / Корневой элемент // Выбор элементов не зависимо от их положения в документе . Текущий узел .. Родительский узел @ Выбор атрибута ПРЕДИКАТЫ • [1] – номер узла • []last()] – последний узел • [last()-1] – предпоследний узел • [position()<3] – первые два узла • [@attr] – все элементы с указанным атрибутом • [@attr=“value”] – все элементы с выбранным значением атрибута ПОИСК НЕИЗВЕСТНЫХ УЗЛОВ • * - все элементы • @* - все атрибуты • node() – любой узел НАПРАВЛЕНИЯ ПОИСКА ancestor предки ancestor-or-self Предки или сам узел attribute child descendant атрибуты Дочерние узлы Потомки descendant-or-self Потомки или сам узел following Все в документе после закрывающего тега following-sibling namespace parent preceding Все ровесники после закрывающего тега Все пространства имен Родительский узел Все в документе до открывающего тега preceding-sibling self Все ровесники до открывающего тега Текущий элемент XSLT • Язык трансформации XML документа в другой XML документ • Использует XPath для навигации по документу ОПРЕДЕЛЕНИЕ ФАЙЛА ТРАНСФОМАЦИИ • <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> • <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <XSL:TEMPLATE> • Элемент описания шаблона • Атрибут match содержит XPath выражение к которому применяется шаблон <XSL:VALUE-OF> • Извлечение данных из XML элементов • <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> <XSL:FOR-EACH> • Применение для каждого элемента, найденного запросом • <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> <XSL:SORT> • Сортировка элементов выборки • Используется совместно с <xsl:for-each> • <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> <XSL:IF> • Проверка условия • <xsl:if test="expression"> ...some output if the expression is true... </xsl:if> <XSL:CHOOSE> • • Выбор из нескольких выриантов <xsl:choose> <xsl:when test="expression"> ... some output ... </xsl:when> <xsl:otherwise> ... some output .... </xsl:otherwise> </xsl:choose> <XSL:APPLY-TEMPLATES> • Применение именованного шаблона к текущему элементу или его дочерним элементам