Partilhar via


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, 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 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 AdventureWorks.

A.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 digitada Instructions xml. 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=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. 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

Funções em nós

Conceitos

Função local-name (XQuery)