ref xml что это

Шаблоны проектирования XSD

ref xml что это. Смотреть фото ref xml что это. Смотреть картинку ref xml что это. Картинка про ref xml что это. Фото ref xml что это

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

Сегодня хочу поговорить о том, какие есть шаблоны проектирования XSD, о преимуществах и недостатках каждого, и почему мы для своих задач выбрали «Райский сад».

Для примера возьмем следующий XML-документ в качестве источника данных.

И посмотрим, как можно описать одну и ту же структуру XML-документа разными способами.
В основе разделения на шаблоны лежит принцип определения глобальных элементов и/или типов данных внутри XSD.

Матрешка (Russian Doll)

ref xml что это. Смотреть фото ref xml что это. Смотреть картинку ref xml что это. Картинка про ref xml что это. Фото ref xml что это

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

Схема, описывающая структуру нашего файла-источника с использованием шаблона «Матрешка», выглядит так:

Салями (Salami Slice)

ref xml что это. Смотреть фото ref xml что это. Смотреть картинку ref xml что это. Картинка про ref xml что это. Фото ref xml что это

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

Схема, описывающая структуру файла-источника с использованием шаблона «Салями», выглядит так:

Венецианские жалюзи (Venetian Blind)

ref xml что это. Смотреть фото ref xml что это. Смотреть картинку ref xml что это. Картинка про ref xml что это. Фото ref xml что это

Суть шаблона в том, что описываемый XML-документ разделяется на составные типы, каждый из которых описывается в XSD как глобальный. Затем объявляется корневой элемент, соответствующий глобальному типу, соединяющему схему воедино.

Схема, описывающая структуру файла-источника с использованием шаблона «Венецианские жалюзи», выглядит так:

Райский сад (Garden of Eden)

ref xml что это. Смотреть фото ref xml что это. Смотреть картинку ref xml что это. Картинка про ref xml что это. Фото ref xml что это

«Райский сад» хорош тем, что определяет каждый элемент и составной тип данных как глобальный. Это позволяет ссылаться на любой тип или элемент в пределах одного XSD или из любой другой XSD и даже из WSDL. Только так можно полностью контролировать семантику и типов и элементов.

Схема, описывающая структуру файла-источника с использованием шаблона «Райский сад», выглядит так:

Выбор шаблона

Часто при выборе шаблона проектирования приходится искать баланс между возможностью повторно использовать компоненты схемы и глубиной взаимосвязи между компонентами. На рисунке показан потенциал каждого из шаблонов в разрезе этих двух аспектов.

ref xml что это. Смотреть фото ref xml что это. Смотреть картинку ref xml что это. Картинка про ref xml что это. Фото ref xml что это

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

Нам в проекте важнее всего было повторное использование типов и элементов схемы и во вторую очередь тотальный семантический контроль имен. Выбор шаблона был очевиден – Райский сад.

Небольшое лирическое отступление. Самым интересным применением шаблонов проектирования XML-схем на моей памяти был и остается гипноз аудитории. Один наш титулованный аналитик любит брать инициативу в свои руки через рассказ на эту тему. Засекала время, через 5 минут взгляд слушателей тускнеет, и они уходят куда-то далеко в себя. На «Райском саде» сознание большинства отключается.

И в заключении хочу добавить, что миксы шаблонов тоже возможны, мы с ними встречались.

Источник

XSD элемент element

Элемент element определяет элемент.

Синтаксис элемента

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

Не обязательный. Препятствует использованию элемента, который имеет заданный тип наследования, вместо данного элемента. Может принимать значение #all или список из расширений/ограничений/замещений:

Не обязательный. Запрещает указанный метод наследования элемента. Может принимать значение #all или список из расширений/ограничений:

Пример использования

Пример №1
В следующем примере декларируется XML схема с четырьмя простыми элементами «fname», «lname», «age» и «dateborn»:

Пример №3
Следующий пример аналогичен примеру №2. Разница лишь в том, что для ссылки на имена элементов используется атрибут ref:

Источник

Инструменты пользователя

Инструменты сайта

Содержание

Аннотации

компонент может иметь атрибут xml: lang, в котором указывается язык написания самой аннотации.

разработки, таблицы стилей и других приложений. Например, в середине компонента appInfo можно представить информацию о том, какие фасетки могут быть применены к каждому простого типа.

Типы данных

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

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

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

Необязательный атрибут use может принимать одно из следующих значений:

Простые и комплексные типы данных

simpleType

Простые типы в основном используются для сужение типов (restriction)

Cужение типов (restriction)

С помощью сужение типов (restriction) Мы можем контролировать любой тип данных на наличие его значения то есть ограничивать его значения
Приме: Схема

АтрибутОписание
idНе обязательный. Определяет уникальный идентификатор для элемента
nameНе обязательный. Определяет имя элемента. Этот атрибут требуется, если родительским элементом является элемент schema
refНе обязательный. Ссылается на имя другого элемента. Атрибут ref может включать префикс пространства имен. Этот атрибут нельзя использовать, если родительским элементом является элемент schema
typeНе обязательный. Определяет либо имя встроенного типа данных, либо имя элемента simpleType или complexType
substitutionGroupНе обязательный. Определяет имя элемента, который может быть замещен этим элементом. Этот атрибут нельзя использовать, если родительским элементом является не элемент schema
defaultНе обязательный. Определяет значение элемента по умолчанию (может использоваться только если содержимое элемента простого типа или текст)
fixedНе обязательный. Определяет фиксированное значение элемента (может использоваться только если содержимое элемента простого типа или текст)
formНе обязательный. Определяет форму элемента. Значение «qualified» указывает на то, что этот элемент должен уточняться префиксом пространства имен. Значение «unqualified» указывает на то, что этот элемент не требует уточнения префиксом пространства имен. Значением по умолчанию является значение атрибута elementFormDefault атрибута элемента schema. Этот атрибут нельзя использовать, если родительским элементом является элемент schema
maxOccursНе обязательный. Определяет, сколько раз максимально может появляться элемент в родительском элементе. Значением может быть любое целое число >= 0, если же нужно снять лимит на использование, то следует указать ключевое слово «unbounded». Значение по умолчанию 1. Этот атрибут нельзя использовать, если родительским элементом является элемент schema
minOccursНе обязательный. Определяет, сколько раз минимально может появляться элемент в родительском элементе. Значением может быть любое целое число >= 0. Значение по умолчанию 1. Этот атрибут нельзя использовать, если родительским элементом является элемент schema
nillableНе обязательный. Определяет, можно ли элементу присваивать явное нулевое значение nil. Значение true позволяет элементу устанавливать атрибут nil в значение true. Атрибут nil определен как часть пространства имен XML схемы. Значение по умолчанию false
abstractНе обязательный. Определяет, можно ли использовать этот элемент в документе. Значение true определяет, что элемент не может использоваться в документе. Вместо этого, на месте данного элемента должен появляться другой элемент, атрибут substitutionGroup которого содержит имя с префиксом (QName) этого элемента. Значение по умолчанию false
block
Название фасеткиОписание
Наибольшее значение, которое больше не входит в определяем тип
Наибольшее значение определяемого типа
Наименьшее значение, которое больше не входит в Определяемый тип
Наименьшее значение определяемого типа
Общее количество цифр в определяемого числовом типе; сужение типа decimal
Количество цифр в дробной части числа
Длина значений определяемого типа
Наибольшая длина значений определяемого типа
Наименьшее длина значений определяемого типа
Одно из перечисленных значений

В тегах-фасетка также могут иметь атрибуты. Эти атрибуты называют базисными фасетками (fundamental facets). Среди них выделяют:

complexType

Схема: базовый элемент

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

Группа позволяет описать общие элементы. (работает как include) Схема:

Источник

CIV. Функции разборщика XML

XML (eXtensible Markup Language) это формат данных для обмена структурированными документами в Web. Это стандарт, созданный консорциумом World Wide Web consortium (W3C). Информация о XML и сопутствующих технологиях находится на сайте http://www.w3.org/XML/

Установка

Это расширение использует библиотеку expat, которую можно найти на http://www.jclark.com/xml/. Makefile, который поставляется вместе с expat, не строит библиотеку по умолчанию. Вы можете использовать такое make-правило:

Постройте PHP. Tada! Вот и всё.

Об этом расширении

Это расширение позволяет создавать XML-разборщики и определять обработчики различных XML-событий. Каждый XML-разборщик также имеет несколько параметров, которые вы можете настроить.

Вот имеющиеся XML-обработчики:

Таблица 1. Поддерживаемые XML-обработчики

Выравнивание регистра/Case Folding

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

XML_ERROR_NONE
XML_ERROR_NO_MEMORY
XML_ERROR_SYNTAX
XML_ERROR_NO_ELEMENTS
XML_ERROR_INVALID_TOKEN
XML_ERROR_UNCLOSED_TOKEN
XML_ERROR_PARTIAL_CHAR
XML_ERROR_TAG_MISMATCH
XML_ERROR_DUPLICATE_ATTRIBUTE
XML_ERROR_JUNK_AFTER_DOC_ELEMENT
XML_ERROR_PARAM_ENTITY_REF
XML_ERROR_UNDEFINED_ENTITY
XML_ERROR_RECURSIVE_ENTITY_REF
XML_ERROR_ASYNC_ENTITY
XML_ERROR_BAD_CHAR_REF
XML_ERROR_BINARY_ENTITY_REF
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF
XML_ERROR_MISPLACED_XML_PI
XML_ERROR_UNKNOWN_ENCODING
XML_ERROR_INCORRECT_ENCODING
XML_ERROR_UNCLOSED_CDATA_SECTION
XML_ERROR_EXTERNAL_ENTITY_HANDLING

Целевая кодировка выполняется, когда PHP передаёт данные функциям XML-обработчиков. Когда XML-обработчик создаётся, устанавливается та же самая целевая кодировка, что и исходная кодировка, но она может быть изменена в любой момент. Целевая кодировка влияет на символьные данные и на имена тэгов и цели инструкций процессинга.

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

Если PHP находит в разбираемом XML-документе символы, которые не могут быть представлены в избранной целевой кодировке, проблемные символы будут «понижены в звании». В настоящее время это означает, что такие символы заменяются знаком вопроса.

Вот примеры скриптов PHP, разбирающих XML-документы.

Пример структуры XML-элементов

В первом примере отображается структура стартовых элементов документа с отступом.

Пример 1. Показ структуры XML-элементов

Пример Отображения XML-тэгов

Пример 2. Отображение XML в HTML

Этот пример отображает тэги XML-документа непосредственно в тэги HTML. Элементы, не найденные в «массиве отображения», игнорируются. Конечно, этот пример будет работать только со специфическим типом XML-документов.

Пример внешнего экземпляра XML

Этот пример разъясняет XML-код. Он показывает, как использовать обработчик ссылки на внешний экземпляр для включения и разбора других документов, а также то, как можно обработать PI, и способ определения «trust/доверия» PI, содержащим код.

Источник

Пример XML схемы

В этой главе будет показано, как писать XML схемы. Также вы узнаете, что схемы можно писать разными способами.

XML документ

Давайте посмотрим на следующий XML документ под названием «shiporder.xml»:

Приведенный выше XML документ состоит из корневого элемента shiporder с обязательным атрибутом orderid. Элемент shiporder содержит три дочерних элемента: orderperson, shipto и item. Элемент item используется дважды и содержит элемент title, необязательный элемент note, а также элементы quantity и price.

Строка xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» говорит XML парсеру, что этот документ должен быть проверен на соответствие схеме. Строка xsi:noNamespaceSchemaLocation=»shiporder.xsd» указывает, где именно находится схема (в данном случае она находится в той же папке, что и файл «shiporder.xml»).

Создание XML схемы

Теперь для приведенного выше XML документа создадим XML схему.

Создадим новый файл, который назовем «shiporder.xsd». Для создания XML схемы будем просто следовать за структурой XML документа и определять каждый встреченный элемент. Начнем со стандартной XML декларации, за которой опишем элемент xs:schema, который и определяет саму схему:

Здесь мы используем стандартное пространство имен (xs) и URI, ассоциированный с этим пространством имен, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.

Теперь мы должны определить элемент shiporder. У этого элемента есть атрибут, и он содержит другие элементы, поэтому мы рассматриваем его как элемент составного типа. Определения дочерних элементов элемента shiporder поместим в декларацию xs:sequence, что задает жесткую последовательность подэлементов:

Теперь определим элемент orderperson, который будет простого типа (так как он не содержит ни атрибуты, ни другие элементы). Его тип (xs:string) имеет префикс пространства имен, ассоциированного с XML схемой, что указывает на использование предопределенного типа данных:

Теперь нам нужно определить два элемента составного типа: shipto и item. Начнем с определения элемента shipto:

При помощи схем мы можем определить число возможных вхождений любого элемента. В этом нам помогут атрибуты maxOccurs и minOccurs. Атрибут maxOccurs задает максимальное число вхождений элемента, а атрибут minOccurs задает минимальное число вхождений. По умолчанию значение обоих атрибутов равно 1.

Теперь определим элемент item. Этот элемент может использоваться неограниченное число раз внутри элемента shiporder. Определить такую особенность элемента item позволяет присваивание атрибуту maxOccurs значения «unbounded». Это означает, что элемент item может использоваться столько раз, сколько нужно автору документа. Обратите внимание, что элемент note опционален. Определим это установив атрибут minOccurs в нулевое значение:

Теперь мы можем декларировать атрибут элемента shiporder. Поскольку это обязательный атрибут, используем определение use=»required».

Примечание: Атрибуты должны всегда декларироваться последними:

Вот полный код файла схемы «shiporder.xsd»:

Разделение схемы

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

Следующий способ компоновки схемы заключается в том, что сначала определяются все элементы и атрибуты, а затем на эти определения создаются ссылки при помощи атрибута ref.

Ниже приводится новая компоновка файла схемы («shiporder.xsd»):

Использование поименованых типов

Третий способ компоновки схемы предполагает определение классов или типов, которые позволяют повторное использование определений элементов. Это становится возможным, если дать имена элементам simpleTypes и complexTypes, а затем указать на них при помощи атрибута type.

Третий способ компоновки файла схемы («shiporder.xsd»):

Элемент restriction указывает на то, что тип данных является производным от типов данных из пространства имен W3C XML Schema. Таким образом, следующий фрагмент кода означает, что значение элемента или атрибута должно быть строковым:

Однако гораздо чаще элемент restriction используется для накладывания ограничений на элементы. Посмотрите на следующие строки из приведенной выше схемы:

Этот фрагмент кода указывает, что значение элемента или атрибута должно быть строковым, ровно шесть символов в длину, и этими символами должны быть цифры от 0 до 9.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *