XSD XML Schema Definition среда, 27 ноября 2013 г.среда, 27 ноября 2013 г.среда, 27 ноября 2013 г.среда, 27 ноября 2013 г.среда, 27 ноября 2013 г.
Пространства имён XML префиксы Для логического разделения имён могут быть использованы префиксы Для обеспечения уникальности пространства имён связывают с URI (URL) Имя пространства имёнИмя элемента
Недостатки DTD определения DTD не являются расширяемыми; с документом можно связать только одно определение DTD; не поддерживаются пространства имён; слабая типизация данных; синтаксис DTD не является синтаксисом XML; отсутствует поддержка DOM;
Структура XSD-документа
Простые встроенные типы встроенные простые типы данных В спецификации XML-схем предусмотрены следующие встроенные простые типы данных: anyURI, boolean, byte, date, dateTime, decimal, double, float, hexBinary, ID, IDREF, IDREFS, integer, long, name, qname, short, string, time, unsignedByte и другие Можно создавать собственные простые типы данных при помощи элементов Простые типы данных Простые типы данных – определяют множество допустимых значений для элементов и атрибутов
Иерархия типов данных
Составные типы данных Новые составные типы в схемах определяются с помощью элемента. Оно обычно содержит объявления элементов, ссылки на другие элементы и объявления атрибутов. Элементы объявляются с помощью элементов, а атрибуты -
Определение составного типа …
Определение количества экземпляров элементов minOccursmaxOccurs Допустимое количество экземпляров элементов задаётся при помощи атрибутов minOccurs и maxOccurs. minOccurs По умолчанию значение атрибута minOccurs равно 1. maxOccurs minOccurs Если значение maxOccurs не определено, то считается, что оно совпадает с minOccurs. maxOccursunbounded Если количество элементов должно быть неограниченно, то maxOccurs устанавливается равным unbounded.
Определение значений элементов, заданных по умолчанию defaultfixed У элемента также существуют атрибуты default и fixed. default Атрибут default позволяет установить значение элемента по умолчанию. fixed Атрибут fixed устанавливает единственно возможное значение элемента.
Ограничения и значения атрибутов по умолчанию use Атрибут use элемента может принимать следующие значения: required required optional optional default default fixed fixed prohibited prohibited defaultfixed value Значение default или fixed предполагают наличие атрибута value
Использование определений анонимных типов
Создание альтернатив
Создание простых типов с помощью фасетов фасетов Основные разновидности фасетов: Количество символьных позиций; Диапазон значений; Количество цифр десятичного числа; Перечисления; Шаблоны;
Ограничения количества символов
Указание диапазонов значений
Использование шаблонов
Перечислимые типы
Модифицированный пример
Особые случаи определения содержимого Расширение или ограничение составных типов Пустые элементы Элементы со сложным смешанным содержимым
Ограничение или расширение составных типов Разновидности составных типов: simpleContent – содержит simpleType complexContent – содержит вложенные элементы Типы преобразований: restriction extension
Пример расширения типа
Пример расширения типа
Создание пустых элементов
Повторное использование Помимо расширения и ограничения можно определять группы элементов и атрибутов: xsd:group xsd:group xsd:attributeGroup xsd:attributeGroup name ref Определения групп должны иметь атрибут name, а ссылки на них – атрибут ref
Проверка действительности документов XML при помощи DTD Using DTD Using DTD var doc = new ActiveXObject("MSXML2.DOMDocument.4.0"); doc.validateOnParse = true; if (doc.load(xml-doc.xml)) document.write(" The document is valid. "); else { document.write(" The document is not valid. "); if (doc.parseError.errorCode != 0) document.write(" Error: " + doc.parseError.reason + " ");}
Проверка действительности документов XML при помощи XSD Using XML Schemas Using XML Schemas var schemaCache = new ActiveXObject("MSXML2.XMLSchemaCache.4.0"); schemaCache.add("", schema.xsd"); var doc = new ActiveXObject("MSXML2.DOMDocument.4.0"); doc.schemas = schemaCache; doc.validateOnParse = true; if (doc.load(xml-doc.xml")) document.write(" The document is valid. "); else { document.write(" The document is not valid. "); if (doc.parseError.errorCode != 0) document.write(" Error: " + doc.parseError.reason + " ");}
Резюме: сравнение DTD и XSD DTDXSD СинтаксисEBNFXML 1.0 Поддержка DOM ОтсутствуетЕсть Типизация данных СлабаяСильная РасширяемостьОтсутствуетНеограниченная Поддержка нескольких словарей Нет – только одно DTD на документ Да – с использованием пространств имён Динамические схемы Нет – DTD применяется только для чтения Да – схемы можно модифицировать во время работы