Классика баз данных - статьи

       

XQueryX


XQueryX9 определяет XML-представление XQuery. В этой спецификации определяется структура элементов, отражающая абстрактный синтаксис XQuery. Определение XQueryX немного изменилось со времени нашей предыдущей статьи. В Примере 1 содержится простой XQuery-запрос и соответствующее XQueryX-представление.

Хотя XQueryX труднее читается и пишется людьми, у него имеется несколько полезных свойств. XQueryX-представления легко генерируются инструментальными средствами и многослойными приложениями, и они легко встраиваются в более крупные XML-документы, позволяя формулировать «запросы над запросами».

Конечно, все изменения, которым подвергся XQuery, в равной степени относятся и к XQueryX. Но в XQueryX имеется еще одно достаточно важное изменение. Во время нашей предыдущей публикации XML Schema, определяющая синтаксис XQueryX, основывалась на иерархии типов, которую оказалось трудно поддерживать при добавлении к языку новых возможностей, а также несколько затруднительно держать в голове человека. Эта иерархическая организация было заменена другой, основанной на группах подстановок XML Schema. Такой подход поддается более простому расширению при появлении новых языковых возможностей и более близок знатокам Schema. for $b in .//book return $b/title

<xqx:module    xmlns:xqx="http://www.w3.org/2005/XQueryX"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <xqx:mainModule>    <xqx:queryBody>     <xqx:flworExpr>      <xqx:forClause>       <xqx:forClauseItem>        <xqx:typedVariableBinding>         <xqx:varName>b</xqx:varName>        </xqx:typedVariableBinding>        <xqx:forExpr>         <xqx:pathExpr>          <xqx:argExpr>           <xqx:contextItemExpr/>          </xqx:argExpr>          <xqx:stepExpr>           <xqx:xpathAxis>             descendant-or-self           </xqx:xpathAxis>           <xqx:anyKindTest/>          </xqx:stepExpr>          <xqx:stepExpr>           <xqx:xpathAxis>child</xqx:xpathAxis>           <xqx:nameTest>book</xqx:nameTest>          </xqx:stepExpr>         </xqx:pathExpr>        </xqx:forExpr>       </xqx:forClauseItem>      </xqx:forClause>      <xqx:returnClause>        .        .        .      </xqx:returnClause>     </xqx:flworExpr>    </xqx:queryBody>   </xqx:mainModule> </xqx:module>

Пример 1. XQuery-запрос и его эквивалентное XQueryX-представление

Несколько небольших изменений было внесено также в схему XQueryX. Наиболее существенным изменением является новый элемент схемы <xqx:xquery>, используемый для тривиального встраивания текста XQuery (в читаемом человеком виде) в XML-документы.



Содержание раздела