Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Во всех примерах, приведенных в разделе Общие сведения о выражениях пути в XQuery, для выражений пути используется полный синтаксис, включающий в себя имя оси и элемент проверки узла, которые разделены двойным двоеточием, за которыми могут следовать квалификаторы шага.
Например:
child::ProductDescription[attribute::ProductModelID=19]
Запрос XQuery поддерживает в выражениях пути следующие сокращения.
Ось child является осью по умолчанию. Поэтому в выражении ось child:: для шага может быть опущена. Например,
/child::ProductDescription/child::Summaryможет быть записано как/ProductDescription/Summary.Для оси attribute может использоваться сокращение «@». Например,
/child::ProductDescription[attribute::ProductModelID=10]может быть записано как/ProudctDescription[@ProductModelID=10].Для выражения /descendant-or-self::node()/ может быть записано сокращение //. Например,
/descendant-or-self::node()/child::act:telephoneNumberможет быть записано как//act:telephoneNumber.
Предыдущий запрос извлекает все телефонные номера, хранящиеся в столбце AdditionalContactInfo таблицы Contact. Схема для столбца AdditionalContactInfo определена таким образом, что элемент <telephoneNumber> может появиться в любом месте документа. Поэтому для извлечения всех телефонных номеров необходимо просмотреть каждый узел в документе. Поиск начинается от корня документа и проходит по всем узлам, являющимся его потомками.
Следующий запрос извлекает все контактные телефонные номера для указанного клиента:SELECT AdditionalContactInfo.query(' declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; declare namespace crm="http://schemas.adventure-works.com/Contact/Record"; declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo"; /descendant-or-self::node()/child::act:telephoneNumber ') as result FROM Person.Contact WHERE ContactID=1Если выражение пути заменяется сокращенным синтаксическим выражением,
//act:telephoneNumberобеспечивает тот же самый результат.Элемент self::node() в шаге может быть заменен сокращенным выражением, сводящимся к точке (.). Однако точка не эквивалентна элементу self::node() и не взаимозаменяема с ним.
Например, в следующем запросе точка представляет значение, а не узел:("abc", "cde")[. > "b"]Элемент parent::node() в шаге может быть заменен двумя точками (..).