namespace-uri (función de XQuery)

Devuelve el URI de 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 argumento solo se puede usar en el contexto de un predicado dependiente del contexto. Concretamente, 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 atributo o elemento cuyo QName expandido no está en un espacio de nombres, la función devuelve la cadena de longitud cero.

Ejemplos

En este tema se ofrecen ejemplos de consultas XQuery con instancias XML almacenadas en varias columnas de tipo xml en 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 siguiente consulta se especifica para la columna xml con tipo Instructions. La expresión namespace-uri(/AWMI:root[1]/AWMI:Location[1]) devuelve el URI del espacio de nombres del primer elemento secundario <Location> del 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

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 argumento y utiliza el nodo del 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

Éste 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. En este caso, recibirá todos los elementos secundarios del nodo del elemento <ProductDescription> cuya parte del URI del espacio de nombres del QName expandido 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.

Vea también

Referencia

Funciones en nodos

Conceptos

local-name (función de XQuery)