Partilhar via


Funções em nós - namespace-uri

Aplica-se a:SQL Server

Retorna o URI do namespace do QName especificado em $arg como xs:string.

Sintaxe

fn:namespace-uri() as xs:string  
fn:namespace-uri($arg as node()?) as xs:string  

Argumentos

$arg
Nome do nó cuja parte URI do namespace 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 do contexto. Especificamente, só pode ser utilizado entre parênteses ([ ]).

  • Se $arg for a sequência vazia, a cadeia de caracteres de comprimento zero será retornada.

  • Se $arg for um elemento ou nó de atributo cujo QName expandido não esteja em um namespace, a função retornará a cadeia de caracteres de comprimento zero

Exemplos

Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas xml type no banco de dados AdventureWorks.

Um. Recuperar URI de namespace de um nó específico

A consulta a seguir é especificada em relação a uma instância XML sem tipo. A expressão de consulta, namespace-uri(/ROOT[1]), recupera a parte URI do namespace do nó especificado.

set @x='<ROOT><a>111</a></ROOT>'  
SELECT @x.query('namespace-uri(/ROOT[1])')  

Como o QName especificado não tem a parte URI do namespace, mas apenas a parte do nome local, o resultado é uma cadeia de caracteres de comprimento zero.

A consulta a seguir é especificada em relação às Instruções digitadas coluna xml. A expressão, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), retorna o URI do namespace do primeiro elemento <Location> filho do elemento <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  

Este é o resultado:

https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions  

B. Usando namespace-uri() sem argumento em um predicado

A consulta a seguir é especificada na coluna xml digitada CatalogDescription. A expressão retorna todos os nós de elemento cujo URI de namespace é https://www.adventure-works.com/schemas/OtherFeatures. A funçãonamespace- 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 URI do namespace na consulta anterior para https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Em seguida, você receberá todos os filhos do nó do elemento <ProductDescription> cujo URI do namespace parte 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.

Ver também

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