Função namespace-uri (XQuery)

Retorna o namespace URI 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 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 do contexto. Mais precisamente, ela só pode ser usada dentro de 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 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 instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks2008R2. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks2008R2.

A. Recuperar o namespace URI 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 tipada xml Instructions. A expressão, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), retorna o namespace URI do primeiro elemento filho <Location> 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 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=19l

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. Você receberá todas as crianças de nó do elemento <ProductDescription> cuja parte do namespace URI do QName expandido seja 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.

Consulte também

Referência

Conceitos