Функция namespace-uri (XQuery)
Возвращает пространство имен URI для QName, указанного в аргументе $arg как xs:string.
Синтаксис
fn:namespace-uri() as xs:string
fn:namespace-uri($arg as node()?) as xs:string
Аргументы
- $arg
Имя узла, для которого будет получена URI-часть пространства имен.
Примечания
- Если аргумент опускается, значением по умолчанию является узел контекста.
- В SQL Server функция fn:namespace-uri() без аргумента может использоваться только в контексте или зависимом от контекста предикате. Она может использоваться только в скобках ([ ]).
- Если аргумент $arg является пустой последовательностью, возвращается строка нулевой длины.
- Если аргумент $arg является элементом или узлом атрибута, чье расширенное имя QName не обозначает пространство имен, функция возвращает строку нулевой длины.
Примеры
Этот подраздел предлагает для рассмотрения примеры использования XQuery с XML-экземплярами, хранимыми в различных столбцах типа xml в базе данных AdventureWorks. Обзор каждого из этих столбцов см. в разделе Представление типов xml-данных в базе данных AdventureWorks.
А. Получение пространства имен URI определенного узла
Следующий запрос производится к нетипизированному XML-экземпляру. В выражении запроса выражение namespace-uri(/ROOT[1])
получает часть URI пространства имен указанного узла.
set @x='<ROOT><a>111</a></ROOT>'
SELECT @x.query('namespace-uri(/ROOT[1])')
Так как указанное имя QName не содержит URI части пространства имен, а только часть локального имени, результатом будет строка нулевой длины.
Следующий запрос указывается в типизированном столбце xml типа Instructions. Выражение namespace-uri(/AWMI:root[1]/AWMI:Location[1])
возвращает пространство имен URI первого дочернего элемента <Location
> элемента <root
>.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
namespace-uri(/AWMI:root[1]/AWMI:Location[1])') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
Результат:
https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions
Б. Использование пространства имен-uri() без аргумента в предикате
Следующий запрос указывается в типизированном столбце xml типа CatalogDescription. Выражение возвращает все узлы элементов, чье пространство имен URI является адресом https://www.adventure-works.com/schemas/OtherFeatures
. Функция пространства имен-uri() указывается без аргумента и использует узел контекста.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/p1:ProductDescription//*[namespace-uri() = "https://www.adventure-works.com/schemas/OtherFeatures"]
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19
Частичный результат:
<p1:wheel xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">High performance wheels.</p1:wheel>
<p2:saddle xmlns:p2="https://www.adventure-works.com/schemas/OtherFeatures">
<p3:i xmlns:p3="http://www.w3.org/1999/xhtml">Anatomic design</p3:i> and made from durable leather for a full-day of riding in comfort.</p2:saddle>
…
Пространство имен URI в предыдущем запросе можно изменить на адрес https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
. Тогда будут получены все дочерние узлы элемента <ProductDescription
>, чья URI часть пространства имен расширенного QName является адресом https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
.
Ограничения использования
Ниже приведены ограничения:
- Функция namespace-uri() возвращает экземпляры типа xs:string вместо xs:anyURI.