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-документы.