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 colchetes ([]).
Se $arg for a seqüê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. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks.
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 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.