Главная страница
Навигация по странице:

  • Описание DTD Описание DTD нашей адресной книжки записано в листинге 1.3. Листинг 1.3. Описание DTD документа XML

  • http://msdn.microsoft.com/xml/.

  • http://www.w3.org/xml/schema/

  • Встроенные простые типы XSD

  • ДОПОЛНИТеЛЬНЫХ СИМВОЛОВ

  • Определение простых типов

  • • — наименьшее значение, уже не входящее в определяе- мый тип; • — наименьшее значение определяемого типа; •

  • значений определяемого типа ;

  • Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами


    Скачать 9.24 Mb.
    НазваниеИльдар ХабибуллинРазработкаWebслужбсредствами
    АнкорРазработка веб-служб средствами Java.pdf
    Дата03.02.2018
    Размер9.24 Mb.
    Формат файлаpdf
    Имя файлаРазработка веб-служб средствами Java.pdf
    ТипКнига
    #15148
    КатегорияИнформатика. Вычислительная техника
    страница2 из 21
    1   2   3   4   5   6   7   8   9   ...   21
    содержат по одной строке, со- стоящей только из цифр.
    Это словесное описание, называемое схемой документа XML, формализует- ся несколькими способами. Наиболее распространены два способа: можно сделать описание DTD, пришедшее в XML из SGML, или описать схему на языке XSD.
    Описание DTD
    Описание DTD нашей адресной книжки записано в листинге 1.3.
    ' Листинг 1.3. Описание DTD документа XML
    notebook (person)*>
    name EMPTY>
    first CDATA #IMPLIED
    second CDATA
    surname CDATA
    birthday (#PCDATA)>
    (#PCDATA)>
    city (#PCDATA)>
    type (город | поселок I деревня)
    zip (#PCDATA)>
    phone-list (work-phone*, home-phone*)>
    work-phone (#PCDATA)>
    home-phone

    Разработка Web-служб средствами Java
    Как видите, описание DTD почти очевидно. Оно повторяет приведенное выше словесное описание. Первое слово
    ELEMENT
    означает, что элемент может содержать тело с вложенными элементами. Вложенные элементы перечисляются в круглых скобках. Порядок перечисления вложенных элементов в скобках должен соответствовать порядку их появления в до- кументе. Слово
    EMPTY
    в третьей строке листинга 1.3 означает пустой элемент.
    Слово
    ATTLIST
    начинает описание списка атрибутов элемента. Для каждого атрибута указывается имя, тип и обязательность указания атрибута. Типов атрибута всего девять, но чаще всего употребляется тип
    CDATA
    (Character
    DATA), означающий произвольную строку символов Unicode, или перечис- ляются значения типа. Так сделано в описании атрибута type тега ,
    принимающего одно из трех значений город, поселок или деревня. В ка- вычках показано значение по умолчанию город.
    Обязательность указания атрибута отмечается одним из трех слов:

    #REQUIRED
    — атрибут обязателен,

    — атрибут необязателен,

    — значение атрибута фиксировано, оно задается в DTD.
    Первым словом могут быть, кроме слов
    ELEMENT ИЛИ ATTLIST,
    слова
    ANY,
    MIXED
    или
    ENTITY.
    Слова
    ANY
    и
    MIXED,
    означают, что элемент может содер- жать и простые данные и/или вложенные элементы. Слово
    ENTITY
    означает обозначение или адрес данных, записанный в описании DTD, так называе- мую сущность.
    После имени элемента в скобках записываются вложенные элементы или тип данных, содержащихся в теле элемента. Тип
    PCDATA
    (Parsed Character
    DATA) означает строку символов Unicode, которую надо интерпретиро- вать.
    Звездочка, записанная после имени элемента, означает "нуль или более вхождений" данного элемента, а плюс — "одно или более вхождений". Во- просительный знак означает "нуль или один раз". Если эти символы отно- сятся ко всем вложенным элементам, то их можно указать после круглой скобки, закрывающей список вложенных элементов.
    Описание DTD можно занести в отдельный файл, например, ntb.dtd, указав его имя во второй части пролога, как показано во второй строке листин- гов 1.1 и 1.2. Можно включить описание во вторую часть пролога XML- файла, заключив его в квадратные скобки:
    notebook [ Описание DTD ]>
    После того как создано описание DTD нашей реализации XML и написан документ, размеченный тегами этой реализации, следует проверить пра-

    Глава 1. Обработка документов XML 23
    вильность их написания. Для этого есть специальные программы — прове-
    ряющие анализаторы (validating parsers). Все фирмы, разрабатывающие сред- ства для работы с XML, выпускают бесплатные или коммерческие прове- ряющие анализаторы. Например, фирма IBM выпускает анализатор xml4j,
    входящий в состав сервера приложений WebSphere. Его можно использовать и отдельно, свободно загрузив с адреса архи- вы xml4j.jar, xerces.jar и xercesSamples.jar.
    Проверяющий анализатор фирмы Sun Microsystems содержится в пакете классов JAXP (Java API for XML Processing, интерфейс программирования приложений на Java для обработки XML), входящем в состав и J2SDK
    Standard Edition, и J2SDK Enterprise Edition [10]. Кроме того, этот пакет можно загрузить отдельно или в составе пакета Java XML Pack с адреса
    Корпорация Microsoft поставляет проверяющий анализатор MSXML
    (Microsoft XML Parser), доступный по адресу http://msdn.microsoft.com/xml/.
    Есть еще множество проверяющих анализаторов, но лидером среди них яв- ляется, пожалуй, Apache Xerces 2, входящий во многие средства обработки документов XML, выпускаемые другими фирмами. Он свободно доступен по адресу
    Ограниченные средства DTD не позволяют полностью описать структуру документа
    В частности, описание DTD не указывает точное количе- ство повторений вложенных элементов, оно не задает точный тип тела эле- мента. Например, в листинге 1.3 из описания DTD не видно, что в элемен- те содержится дата рождения. Эти недостатки DTD привели к появлению других схем описания документов XML. Наиболее развитое опи- сание дает язык XSD. Мы будем называть описание на этом языке просто
    схемой XML
    Schema).
    Посмотрим, как создаются схемы XML, но сначала познакомимся еще с одним понятием XML — пространством имен.
    Пространство имен тегов
    Поскольку в разных языках разметок — реализациях XML — могут встре- титься одни и те же имена тегов и их атрибутов, имеющие совершенно раз- ный смысл, а в документе XML их часто приходится смешивать, анализато- ру надо дать возможность их как-то различать. Для этого имена тегов и ат- рибутов снабжают префиксом, который отделяется от имени двоеточием.
    Префикс имени связывается с идентификатором, определяющим простран-
    ство имен (namespace). Все имена тегов и атрибутов, префиксы которых связаны с одним и тем же идентификатором, образуют одно пространство

    24 Разработка Web-служб средствами Java
    имен. Префикс и идентификатор пространства имен определяются атрибу- том следующим образом:
    =
    Как видите, префикс ntb только что определен, но его уже можно исполь- зовать в имени
    В дальнейшем имена тегов и атрибутов, кото- рые мы хотим отнести к пространству имен снабжаются префиксом ntb, например:
    Имя вместе с префиксом, например,
    называется расширенным или
    уточненным именем
    (Qualified Name).
    Идентификатор пространства имен должен иметь форму URI. Адрес URI,
    такой как не имеет никакого значения и может не соответствовать никакому действительному адресу. Анализатор документа XML и другие программы, использующие документ, не будут об- ращаться по этому адресу. Там даже нет никакой Web-странички. Просто идентификатор пространства имен должен быть уникальным во всем Ин- тернете, и разработчики рекомендации по применению пространства имен,
    которую можно посмотреть по адресу http://www.w3.org/TR/1999/REC-xml- справедливо решили, что будет удобно использовать для него DNS-имя сайта, на котором размещено определение пространства имен. Смотрите на URI просто как на строку символов, идентифицирую- щую пространство имен. Обычно указывается URL (Universal Resource
    Locator, адрес универсальных ресурсов) фирмы, создавшей данную реализа- цию XML, или имя файла с описанием схемы XML.
    По правилам SGML и XML двоеточие может применяться в именах как обычный символ, поэтому имя с префиксом — это просто фокус, анали- затор рассматривает его как обычное имя. Отсюда следует, что в описа- нии DTD нельзя опускать префиксы имен. Некоторым анализаторам на- до специально указать необходимость учета пространства имен. Напри- мер, при работе с анализатором Xerces надо применить метод
    Атрибут xmins может появиться в любом элементе XML, а не только в кор- невом элементе. Определенный им префикс можно применять в том эле- менте, в котором записан атрибут xmins, и во всех вложенных в него эле- ментах. Больше того, в одном элементе можно определить несколько про- странств имен:
    xmlns:ntb =
    = "http://some.firm.com/2003/bookral">

    Глава 1. Обработка документов XML 25
    Появление имени тега без префикса в документе, использующем простран- ство имен, означает, что имя принадлежит пространству имен по умолчанию
    (default namespace). Например, язык XHTML допускает применение тегов
    HTML и тегов XML в одном документе. Допустим, мы определили тег с именем t i t l e . Чтобы анализатор не принял его за один из тегов HTML,
    поступаем следующим образом:
    =
    = "http://some.firm.com/2002/ntbml">

    Java Web


    Разработка Web-служб средствами Java
    документа XML. Корневой компонент схемы носит имя
    Компо- ненты схемы описывают элементы XML и определяют различные типы элементов. Рекомендация схемы XML, которую можно посмотреть по адре- су http://www.w3.org/xml/schema/, перечисляет 13 типов компонентов, но наиболее важны компоненты, определяющие простые и сложные типы эле- ментов, сами элементы и их атрибуты.
    Язык XSD различает простые и сложные элементы XML. Простыми (simple)
    элементами описываемого документа XML считаются элементы, не содер- жащие атрибутов и вложенных элементов. Соответственно, сложные
    (complex) элементы содержат атрибуты и/или вложенные элементы. Схема
    XML описывает простые типы — типы простых элементов, и сложные ти-
    пы — типы сложных элементов.
    Язык описания схем содержит много встроенных простых типов. Они пере- числены в следующем разделе.
    Встроенные простые типы XSD
    Встроенные типы языка описания схем XSD позволяют записывать двоич- ные и десятичные целые числа, вещественные числа, дату и время, строки символов, логические значения, адреса URI. Рассмотрим их по порядку.
    Вещественные числа
    Вещественные числа в языке XSD разделены на три типа: decimal, float и double.
    Тип decimal составляют вещественные числа, записанные с фиксированной точкой: 123.45, —0.1234567689345 и так далее. Фактически хранятся два це- лых числа: мантисса и порядок. Спецификация языка XSD не ограничивает количество цифр в мантиссе, но требует, чтобы можно было записать не менее 18 цифр. Этот тип легко реализуется классом входящем в стандарт Java API (Application Programming Interface, интерфейс программирования приложений) [9].
    Типы float и double соответствуют стандарту и одноименным типам Java [9]. Они записываются с фиксированной или с плавающей деся- тичной
    Целые числа
    Основной целый тип integer понимается как подтип типа decimal, содер- жащий числа с нулевым порядком. Это целые числа с любым количеством десятичных цифр: -34567, 123456789012345 и так далее. Этот тип легко реа- лизуется классом
    [9].

    Глава 1. Обработка документов XML 27
    Типы long, int, short и byte полностью соответствуют одноименным ти- пам Java. Они понимаются как подтипы типа integer, типы более коротких чисел считаются подтипами более длинных чисел: тип byte — это подтип типа short, оба они подтипы типа int, и так далее.
    Типы
    И
    — ПОДТИПЫ
    integer —
    составлены из неположительных и отрицательных чисел соответственно с любым количеством цифр.
    Типы
    И
    — ПОДТИПЫ типа integer —
    составлены из неотрицательных и положительных чисел соответственно с любым количеством цифр.
    У типа nonNegativelnteger есть подтипы беззнаковых целых чисел:
    unsignedLong,
    unsignedShort И unsignedByte.
    Строки
    Основной символьный тип string описывает произвольную строку симво- лов Unicode. Его можно реализовать классом
    Тип
    — подтип типа string — это строки, не содержащие символы перевода строки возврата каретки и символы горизон- тальной табуляции
    В строках типа token — подтипа типа normaiizedstring — нет, кроме того,
    начальных и завершающих пробелов и нет нескольких подряд идущих про- белов.
    В типе token выделены три подтипа. Подтип language определен для запи- си названия языка согласно RFC 1766, например, ru, en, de, fr. Подтип используется только в атрибутах для записи их перечисляемых зна- чений. Подтип name составляют имена XML — последовательности букв,
    цифр, дефисов, точек, двоеточий, знаков подчеркивания, начинающиеся с буквы (кроме зарезервированной последовательности букв X, х, М, m, L, 1 в любом сочетании регистров) или знака подчеркивания. Двоеточие в значе- ниях типа name используется для выделения префикса пространства имен.
    Из типа name выделен подтип NCName (Non-Colonized Name) имен, не со- держащих двоеточия, в котором, в свою очередь, определены три подтипа
    ID, ENTITY,
    описывающие идентификаторы XML, сущности и пере- крестные
    Дата и время
    Тип duration описывает промежуток времени, например, запись означает один год два месяца (2м), три дня
    (3D),

    Разработка Web-служб средствами Java
    десять часов
    тридцать минут (зом) и сорок пять секунд (4 5s). Запись
    может быть сокращенной, например,
    означает 120 месяцев, а Т120М —
    120 минут.
    ТИП
    И время В формате
    Ha-
    пример, 2003-04-25Т09:30:05. Остальные типы выделяют какую-либо часть
    даты или времени.
    Тип time содержит
    В обычном формате
    Тип date содержит дату в формате
    Тип
    выделяет год и месяц в формате
    Тип
    содержит месяц и день месяца в формате -MM-DD.
    Тип gYear означает год в формате CCYY, ТИП gMonth — месяц в формате - мм-, тип gDay — день месяца в формате -DD.
    Двоичные типы
    Двоичные целые числа записываются либо в форме без всяких
    ДОПОЛНИТеЛЬНЫХ СИМВОЛОВ: 0B2F, 356С0А И
    далее, ЭТО ТИП h e x B i n a r y ,
    В кодировке Base64 [10], ЭТО — ТИП base64Binary.
    Прочие встроенные простые типы
    Еще три встроенных простых типа описывают значения, часто используе- мые в документах XML.
    Адреса URI относятся к типу
    Расширенное имя тега или атрибута (qualified name, то есть, имя вместе с префиксом, отделенным от имени двоеточием, — это тип QName.
    Элемент
    NOTATION
    описания DTD выделен как отдельный простой тип схе- мы XML. Его используют для записи математических, химических и других символов, нот, азбуки Бройля и прочих обозначений.
    Определение простых типов
    В схемах XML с помощью встроенных типов можно тремя способами опре- делить новые типы простых элементов. Они вводятся как сужение
    (restriction) встроенного или ранее определенного простого типа, список (list)
    или объединение (union) простых типов.
    Простой тип определяется компонентом схемы , имеющим

    Глава 1. Обработка документов XML 29
    Сужение
    Сужение простого типа определяется компонентом , в кото- ром атрибут base указывает сужаемый простой тип, а в теле задаются ог- раничения, выделяющие определяемый простой тип. Например, почтовый индекс zip можно определить как шесть арабских цифр следующим обра- зом:
    name="zip">
    />
    Можно дать другое определение простого типа zip как целого положитель- ного числа, находящегося в диапазоне от 100000 до 999999:
    value="100000" />
    />
    Теги
    ,
    и другие теги, задающие ограничения, на-
    зываются фасетками (facets). Вот их список:

    наибольшее значение, оно уже не входит в опреде-
    ляемый тип;

    наибольшее значение определяемого типа;
    — наименьшее значение, уже не входящее в определяе-
    мый тип;

    — наименьшее значение определяемого типа;

    общее количество цифр в определяемом числовом ти-
    пе — сужении ТИПа decimal;
    количество цифр в дробной части числа;

    значений определяемого типа;

    Разработка Web-служб средствами Java

    — наибольшая длина значений определяемого типа;

    — наименьшая длина значений определяемого типа;

    — одно из перечисляемых значений;

    — регулярное выражение [8];
    — применяется при сужении типа string и определяет способ преобразования пробельных символов
    Атрибут value этого тега принимает одно из трех значений:
    • preserve — не убирать пробельные символы,
    • replace — заменить пробельные символы
    • collapse — после замены пробельных символов пробелами убрать начальные и конечные пробелы, а из нескольких подряд идущих про- белов оставить только один.
    В тегах-фасетках можно записывать следующие атрибуты, называемые ба-
    зисными фасетками
    facets):
    • ordered — задает упорядоченность определяемого типа, принимает одно из трех значений:

    — тип неупорядочен,
    • p a r t i a l — тип частично упорядочен,
    • t o t a l — тип полностью упорядочен;
    • bounded — задает ограниченность или неограниченность типа значения- ми true ИЛИ false;
    • cardinality — задает конечность или бесконечность типа значениями finite ИЛИ countably infinite;
    • numeric — показывает, числовой этот тип или нет, значениями true или false.
    Как видно из приведенных выше и ниже примеров, в одном сужении может быть несколько ограничений-фасеток. При этом фасетки и
    задают независимые друг от друга ограничения, их можно мысленно объединить союзом "или". Остальные фасетки задают общие, со- вместно накладываемые ограничения, их можно мысленно объединить сою- зом "и".
    Простой тип-список — это тип элементов, в теле которых записывается,
    через пробел, несколько значений одного и того же простого типа. Напри-

    Глава 1. Обработка документов XML 31
    мер, в документе XML может встретиться такой элемент, содержащий спи- сок целых чисел:
    21 34 55 4 6
    Список определяется компонентом в котором атрибутом указывается тип элементов определяемого списка. Тип элементов списка можно определить и в теле элемента
    Например, показанный выше элемент документа XML можно определить в схеме так:
    name="days"
    />
    а использованный при его определении тип integer задать как спи- сок не более чем из пяти целых чисел следующим образом:
    />

    При списка можно применять фасетки
    ,
    ,
    . В приведенном выше список — тело элемента — не может содержать более пяти чисел.
    1   2   3   4   5   6   7   8   9   ...   21


    написать администратору сайта