Sdílet prostřednictvím


Funkce v uzlech – namespace-uri

platí pro:SQL Server

Vrátí identifikátor URI oboru názvů QName zadaný v $arg jako xs:string.

Syntax

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

Argumenty

$arg
Název uzlu, jehož část URI oboru názvů se načte.

Poznámky

  • Pokud argument vynecháte, výchozí hodnota je kontextový uzel.

  • V SQL Serveru fn:namespace-uri() bez argumentu lze použít pouze v kontextu predikátu závislého na kontextu. Konkrétně lze použít pouze vnitřní závorky ([ ]).

  • Pokud $arg je prázdná sekvence, vrátí se řetězec nulové délky.

  • Pokud $arg je uzel elementu nebo atributu, jehož rozbalený název QName není v oboru názvů, vrátí funkce řetězec nulové délky.

Příklady

Toto téma obsahuje příklady XQuery pro instance XML uložené v různých xml sloupce typu v databázi AdventureWorks.

A. Načtení identifikátoru URI oboru názvů konkrétního uzlu

Následující dotaz je určen pro netypovou instanci XML. Výraz dotazu namespace-uri(/ROOT[1])načte část identifikátoru URI oboru názvů zadaného uzlu.

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

Vzhledem k tomu, že zadaný název QName nemá část identifikátoru URI oboru názvů, ale pouze část místního názvu, je výsledkem řetězec nulové délky.

Následující dotaz se zadává pro sloupec xml Typu Instrukce. Výraz, namespace-uri(/AWMI:root[1]/AWMI:Location[1]), vrátí identifikátor URI oboru názvů prvního elementu <Location> podřízený prvek <root> elementu.

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  

Toto je výsledek:

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

B. Použití oboru názvů-uri() bez argumentu v predikátu

Následující dotaz je určen pro sloupec Xml typu CatalogDescription. Výraz vrátí všechny uzly prvků, jejichž identifikátor URI oboru názvů je https://www.adventure-works.com/schemas/OtherFeatures. Obor názvůuri() funkce je zadán bez argumentu a používá kontextový uzel.

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  

Jedná se o částečný výsledek:

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

Identifikátor URI oboru názvů v předchozím dotazu můžete změnit na https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain. Pak obdržíte všechny podřízené prvky uzlu elementu <ProductDescription> element, jehož URI oboru názvů část rozšířeného QName je https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain.

Omezení implementace

Toto jsou omezení:

  • Funkce namespace-uri() vrátí instance typu xs:string místo xs:anyURI.

Viz také

Functions na uzlech
funkce místního názvu (XQuery)