Funciones usadas en nodos: namespace-uri

Se aplica a:SQL Server

Devuelve el URI del espacio de nombres del QName especificado en $arg como xs:string.

Sintaxis

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

Argumentos

$arg
Nombre del nodo cuya parte del URI del espacio de nombres se va a recuperar.

Comentarios

  • Si se omite este argumento, el valor predeterminado es el nodo del contexto.

  • En SQL Server, fn:namespace-uri() sin un argumento solo se puede usar en el contexto de un predicado dependiente del contexto. En concreto, solo se puede utilizar entre corchetes ([ ]).

  • Si $arg es la secuencia vacía, se devuelve la cadena de longitud cero.

  • Si $arg es un nodo de elemento o atributo cuyo nombre expandido-QName no está en un espacio de nombres, la función devuelve la cadena de longitud cero.

Ejemplos

En este tema se proporcionan ejemplos de XQuery en las instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.

A. Recuperar el URI de espacio de nombres de un nodo específico

La consulta siguiente se especifica en una instancia XML sin tipo. La expresión de la consulta, namespace-uri(/ROOT[1]), recupera la parte del URI del espacio de nombres del nodo especificado.

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

Dado que el QName especificado no tiene la parte del URI del espacio de nombres sino únicamente la parte del nombre local, el resultado es una cadena de longitud cero.

La consulta siguiente se especifica en la columna xml instrucciones con tipo . La expresión, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), devuelve el URI del espacio de nombres del primer <Location> elemento secundario del <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  

El resultado es el siguiente:

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

B. Usar namespace-uri() sin argumento en un predicado

La siguiente consulta se especifica para la columna xml con tipo CatalogDescription. La expresión devuelve todos los nodos de elementos cuyo URI del espacio de nombres es https://www.adventure-works.com/schemas/OtherFeatures. La función namespace-uri() se especifica sin un argumento y usa el nodo 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 es el 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>  
...  

Puede cambiar el URI del espacio de nombres de la consulta anterior por https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. A continuación, recibirá todos los elementos secundarios del nodo de elemento del <ProductDescription> elemento cuyo URI de espacio de nombres de la QName expandida es .https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain

Limitaciones de la implementación

Éstas son las limitaciones:

  • La función namespace-uri() devuelve instancias de tipo xs:string en lugar de xs:anyURI.

Consulte también

Funciones en nodos
local-name (función de XQuery)