Partilhar via


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.

Confira também

Funções em nós
Função de nome local (XQuery)