Funções em Nós – namespace-uri
Aplica-se: SQL Server
Retorna o URI do namespace do QName especificado no $arg como um xs:string.
Sintaxe
fn:namespace-uri() as xs:string
fn:namespace-uri($arg as node()?) as xs:string
Argumentos
$arg
Nome de nó cuja parte do namespace URI será recuperada.
Comentários
Se o argumento for omitido, o padrão será o nó de contexto.
No SQL Server, fn:namespace-uri() sem um argumento só pode ser usado no contexto de um predicado dependente de contexto. Mais precisamente, só pode ser usado entre parênteses ([]).
Se $arg for a sequência vazia, a cadeia de caracteres de comprimento zero será retornada.
Se $arg for um nó de elemento ou atributo cujo expanded-QName não está em um namespace, a função retornará a cadeia de caracteres de comprimento zero
Exemplos
Este tópico fornece exemplos de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.
R. Recuperar o URI do namespace de um nó específico
A consulta a seguir é especificada em uma instância XML não digitada. A expressão de consulta, namespace-uri(/ROOT[1])
, recupera a parte do namespace URI do nó especificado.
set @x='<ROOT><a>111</a></ROOT>'
SELECT @x.query('namespace-uri(/ROOT[1])')
Em razão do QName especificado não possuir a parte do namespace URI, mas só a parte de nome local, o resultado será uma cadeia de caracteres de comprimento zero.
A consulta a seguir é especificada na coluna xml digitada Instruções. A expressão, namespace-uri(/AWMI:root[1]/AWMI:Location[1])
, retorna o URI do namespace do primeiroLocation
<> filho do <root
> elemento.
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
Este é o resultado:
https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions
B. Usando um namespace-uri() sem argumento em um predicado
A consulta a seguir está especifica em uma coluna digitada CatalogDescription xml. A expressão retorna todos os nós de elementos cujo namespace URI seja https://www.adventure-works.com/schemas/OtherFeatures
. A função namespace-uri() é especificada sem um argumento e usa o nó de contexto.
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
Este é um resultado parcial:
<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>
...
Você pode alterar o namespace URI na consulta anterior para https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
. Em seguida, você receberá todos os filhos do nó do <ProductDescription
> elemento cuja parte do URI do namespace do QName expandido é .https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
Limitações de implementação
Estas são as limitações:
- A função namespace-uri() retorna instâncias do tipo xs:string em vez de xs:anyURI.