Однако это не означает, что схемы могут полностью заменить DTD- описания - этот способ определения грамматики языка используется сейчас практическими всеми верифицирующими анализаторами XML и, более того, сами схемы, как обычные XML- элементы, тоже описываются DTD. Но серьезные возможности нового языка и его относительная простота, безусловно, дают основания утверждать, что будущий стандарт найдет широкое применение в качестве удобного и эффективного средства проверки корректности составления документов.
В настоящее время в W3 консорциуме идет работа над первой спецификацией схем данных. В этом разделе мы рассмотрим основные возможности схем данных, попытаемся использовать их для проверки корректности ранее описываемых XML- документов.
2.4. XMark и его запросы
XMark Эталонная описанная Версия 1.0 берет вызов и показывает набор инструментов чтобы оценить выполнение поиска памяти XML и процессоров запроса: спецификация рабочей нагрузки, масштабируемая база данных документа и всесторонний набор запросов. Чтобы помогать пользователям, каждый из запросов предназначен, чтобы бросить вызов процессору запроса с важным примитивом языка запросов. Это полезно множеством способов: Во-первых, мудрая особенностью экспертиза процессоров запроса оказывается выгодной, поскольку процессор запроса может оперировать разнообразие архитектуры, каждая из которой имеет тенденцию быть удовлетворенной для различных прикладных рабочих нагрузок и показывает специальные характеристики.
2.4.1 Описание базы данных
Дизайн XML Эталонного теста требует, чтобы тщательно смоделированная база данных примера делала поведение запросов, предсказуемых и учла формулировку запросов, что и чувствовать себя естественной и представлять краткие вызовы. Позвольте нам сначала выделять характеристики документа и затем иметь более близкий взгляд на технические проблемы производства таких документов.
2.4.1.1 Иерархическая Структура Элемента
Вложение элементов выполняет полную древовидную структуру XML документов. В этом подразделе мы описываем структуру документа, который смоделирован, после базы данных как развернуто сайтом аукциона Internet. Основные объекты: person, open auction, closed auction, item and category. Отношения между ними выражены через ссылки за исключением annotations и descriptions, которые берут после текста естественного языка и - центральные документом структуры элемента, внедренные в поддеревья, которым они семантически принадлежат. Семантика объектов, только упомянутых следующих:
· Items - объекты, которые идут для продажи или что уже были проданы. Каждый 'item' несет уникальный идентификатор и имеет свойства подобно оплате (credit card, money order,...), ссылка seller, description т.д., весь закодированный как элементы. Каждый item назначен мировая область, представленная родителем item'а.
· Open auctions - аукционы в прогрессе. Их свойства - состояние секретности, хронология предложения (то есть увеличения через какое-то время) наряду со ссылками претендентам и продавцу, текущему предложению, заданному по умолчанию увеличению, тип аукциона (Dutch, Featured, Regular), интервал времени, в пределах которого предложения приняты, состояние сделки и ссылки к продаваемому item'y.
· Closed auctions - аукционы, которые закончены. Их свойства - продавец (ссылка person), покупатель (ссылка person), ссылка к соответствующему item’у, цене, количество проданных item , дата, когда сделка была закрыта, тип сделки, и аннотаций, которые были сделаны прежде, в течение и после процесса предложения цены.
· Person характеризованы по имени, адрес электронной почты, номер телефона, отправляют по почте адрес, домашняя страница URL, номер кредитной карточки, конфигурация их интересов, набор открытых аукционов, которые они наблюдают.
· Categories показывают имя и описание; они используются, чтобы осуществить классификацию item. Граф category связывает категории в сеть. Эти объекты составляют относительно структурную и ориентированную на данные часть документа: схема правильна на в основание объекта и исключения, типа того не, каждый человек имеет домашнюю страницу, предсказуем. Кроме случайных списков типа предлагающих цену хронологий, порядок ввода не особенно уместен. Это находится на абсолютном контрасте потомству annotations и description элементов, которые восполняют двойной характер, центральную документом сторону, XML. Здесь длина строк и внутренней структуры подэлементов изменяется очень. Пометка теперь включает перечисленные списки, ключевые слова, и даже форматирование команд и символьных данных, подражание характеристикам текстов естественного языка. Это гарантирует, что база данных закрывает полный диапазон XML воплощений образца, от наверх отмеченных структур данных до традиционной прозы. Приложение дает впечатление от документа, показывая некоторые отрывки.
Иерархическая схема изображена в Рисунке:
2.4.1.2 Эталонные запросы
Этот раздел перечисляет запросы, из которых эталонный тест состоит. Мы хотели выражать запросы в XQuery [CFR+01], преемник Quilt [CRF00], который является о быть стандартизированным. Обратите внимание, что запрос, установленный все еще предварителен.
Q1. Возвратите имя item'а с идентификатором ‘item20748’ зарегистрированный в North America
FOR $b IN document("auction.xml")/site/regions/namerica/item[@id="item20748"]
RETURN $b/name/text()
- Упорядоченный Доступ
Эти запросы должны помочь пользователям вникать, как система управления базой данных справляется со встроенным порядком XML документов и как эффективный они могут ожидать, что система управления базой данных обработает запросы с ограничениями порядка.
Q2. Возвратите начальные увеличения всех open auctions.
FOR $b IN document("auction.xml")/site/open_auctions/open_auction
RETURN <increase> $b/bidder[1]/increase/text() </increase>
Этот запрос оценивает стоимость поисков массива. Обратите внимание, что этот запрос может фактически быть тяжелее, чтобы оценить, чем это взгляды; особенно относительные внутренности, вероятно, придется изо всех сил пытаться с довольно сложными соединениями частей, чтобы выбрать элемент претендента индексом 1.
Q3. Возвратите кулак и текущие увеличения всех open auctions, текущее увеличение которых не дважды столь же высоко как начальное увеличение.
FOR $b IN document("auction.xml")/site/open_auctions/open_auction
WHERE $b/bidder[0]/increase/text() * 2 <= $b/bidder[last()]/increase/text()
RETURN <increase first=$b/bidder[0]/increase/text()
last=$b/bidder[last()]/increase/text()>
Это - более сложное приложение индексных поисков. В случае относительной системы управления базой данных, запрос может использовать в своих интересах оцененные набором агрегаты на индексном атрибуте, чтобы ускорить выполнение. Запросы Q2 и Q3 являются родственными соединениям частей в TPCD [Gra93] эталонный тест.
Q4. Перечислите резервы тех открытых аукционов, где некоторый человек выпустил предложение перед другим человеком.
FOR $b IN document("auction.xml")/site/open_auctions/open_auction
WHERE $b/bidder/personref[id="person18829"] BEFORE
$b/bidder/personref[id="person10487"]
RETURN <history> $b/initial/text() </history>
- Приведение
Строки - универсальный тип данных в XML документах. Запросы, которые интерпретируют строки, будут часто должны привести строки к другому типу данных, который несет больше семантики. Этот запрос бросает вызов системе управления базой данных в терминах примитивов приведения, которые это обеспечивает. Особенно, если нет никакой дополнительной информации схемы, или только DTD под рукой, приведения, вероятно, произойдет часто.
Q5. Сколько проданных items стоит больше чем 40?
COUNT (FOR $i IN document("auction.xml")/site/closed_auctions/closed_auction
WHERE $i/price/text () >= 40
RETURN $i/price)
- Правильные Выражения Пути
Правильные выражения пути - фундаментальный стандартный блок фактически каждого языка запросов для XML или слабоструктурированных данных. Эти запросы исследуют, как хорошо процессор запроса может оптимизировать выражения пути и сократить обходы несоответствующих частей дерева.
Q6. Сколько items перечислено на всех континентах?
FOR $b IN document("auction.xml")/site/regions
RETURN COUNT ($b//item)
Q7. Сколько частей прозы находится в нашей базе данных?
FOR $p IN document("auction.xml")/site
LET $c1 := count($p//description),
$c2 := count($p//mail),
$c3 := count($p//email),
$sum := $c1 + $c2 + $c3
RETURN $sum;
- Преследование Ссылок
Ссылки - неотъемлемая часть XML, поскольку они позволяют более богатые отношения, чем только иерархические структуры элемента. Эти запросы определяют горизонтальные обходы с увеличивающейся сложностью. Хороший оптимизатор запроса должен использовать в своих интересах количества элементов наборов, которые будут присоединены.
Q8. Перечислите имена людей и номера item'а, которые они купили. (Присоединяется к человеку, закрытый аукцион)
FOR $p IN document("auction.xml")/site/people/person
LET $a := FOR $t IN document("auction.xml")/site/closed_auctions/closed_auction
WHERE $t/buyer/@person = $p/@id
RETURN $t
RETURN <item person=$p/name/text()> COUNT ($a) </item>
Q9. Перечислите имена людей и имен item, которые они купили в Европе. (Присоединяется к person, closed auction, item)
FOR $p IN document("auction.xml")/site/people/person
LET $a := FOR $t IN document("auction.xml")/site/closed_auctions/closed_auction
LET $n := FOR $t2 IN document("auction.xml")/site/regions/europe/item
WHERE $t/itemref/@item = $t2/@id
RETURN $t2
WHERE $p/@id = $t/buyer/@person
RETURN <item> $n/name/text() </item>
RETURN <person name=$p/name/text()> $a </person>
- Конструкция Сложных Результатов
Построение новых элементов может поместить механизм памяти под напряжением особенно в контексте создания осуществленных обозрений документа. Следующий запрос полностью изменяет структуру отчетов человека, группируя их согласно конфигурации интереса человека. Большие части отчетов человека неоднократно восстанавливаются. Чтобы избегать простого копирования оригинальной базы данных, мы транслируем пометку во французский язык.