rozwinięta QName (XQuery)
Zwraca wartość typu xs:QName z obszaru nazw URI określony w $paramURI i lokalna nazwa określona w $paramLocal.Jeśli $paramURI jest puste ciąg lub puste sekwencji reprezentuje ona brak obszaru nazw.
Składnia
fn:expanded-QName($paramURI as xs:string?, $paramLocal as xs:string?) as xs:QName?
Argumenty
$paramURI
Jest nazw URI dla QName.$paramLocal
Jest częścią lokalna nazwa QName.
Uwagi
Poniższe uwagi dotyczą expanded-QName() funkcja:
Jeśli $paramLocal określona wartość nie jest prawidłowy formularz leksykalne typu xs:NCName, jest zwracana i przedstawia dynamiczną Błąd sekwencji puste.
Konwersja z typu xs:QName na inny typ nie jest obsługiwany w SQL Server.Z tego powodu expanded-QName() w konstrukcji XML nie można użyć funkcja.Na przykład, kiedy można są konstruowania węzła, takich jak <e> expanded-QName(…) </e>, wartość musi być bez typu.Wymagałoby to konwersji wartości typu xs:QName, zwrócony przez expanded-QName() do xdt:untypedAtomic.Jednak to nie jest obsługiwane.Roztwór jest dostarczane w przykład w dalszej części tego tematu.
Można zmodyfikować lub porównać istniejące wartości typu QName.Na przykład /root[1]/e[1] eq expanded-QName("http://nsURI" "myNS") porównuje wartość elementu, <e>, z QName zwrócony przez expanded-QName() funkcja.
Przykłady
W tym temacie przedstawiono przykłady XQuery przeciwko wystąpień XML, które są przechowywane w różnych xml wpisz kolumn w AdventureWorks2008R2 bazy danych.Przegląd tych kolumn, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
A.Zamiana wartości węzła typu QName
Ten przykład ilustruje, jak można zmodyfikować wartość węzeł elementu typu QName.Przykład wykonuje następujące czynności:
Tworzy kolekcja schematu XML, który definiuje element typu QName.
Tworzy tabela z xml kolumna typu przy użyciu kolekcja schematu XML.
Zapisuje XML wystąpienie w tabela.
Używa modify() metoda typu danych xml, aby zmodyfikować wartość elementu typu QName w wystąpienie.Expanded-QName() funkcja jest używana do generowania nowej wartości typu QName.
-- If XML schema collection (if exists)
-- drop xml schema collection SC
-- go
-- Create XML schema collection
CREATE XML SCHEMA COLLECTION SC AS N'
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="QNameXSD"
xmlns:xqo="QNameXSD" elementFormDefault="qualified">
<element name="Root" type="xqo:rootType" />
<complexType name="rootType">
<sequence minOccurs="1" maxOccurs="1">
<element name="ElemQN" type="xs:QName" />
</sequence>
</complexType>
</schema>'
go
-- Create table.
CREATE TABLE T( XmlCol xml(SC) )
-- Insert sample XML instnace
INSERT INTO T VALUES ('
<Root xmlns="QNameXSD" xmlns:ns="http://myURI">
<ElemQN>ns:someName</ElemQN>
</Root>')
go
-- Verify the insertion
SELECT * from T
go
-- Result
<Root xmlns="QNameXSD" xmlns:ns="http://myURI">
<ElemQN>ns:someName</ElemQN>
</Root>
W następującej kwerendzie <ElemQN> zastępuje się przy użyciu wartości elementu modify() metoda typu danych xml i zastąp wartość XML DML, jak pokazano.
-- the value.
UPDATE T
SET XmlCol.modify('
declare default element namespace "QNameXSD";
replace value of /Root[1]/ElemQN
with expanded-QName("http://myURI", "myLocalName") ')
go
-- Verify the result
SELECT * from T
go
Jest to wynikiem.Należy zauważyć, że element <ElemQN> z QName typu ma teraz nową wartość:
<Root xmlns="QNameXSD" xmlns:ns="urn">
<ElemQN xmlns:p1="http://myURI">p1:myLocalName</ElemQN>
</Root>
Następujące instrukcje usuwania obiektów używanych w przykładzie.
-- Cleanup
DROP TABLE T
go
drop xml schema collection SC
go
B.Zajmowanie się ograniczenia przy użyciu funkcja expanded-QName()
Rozwinięta nazwa QName w konstrukcji XML nie można użyć funkcja.Poniższy przykład ilustruje to.Aby obejść to ograniczenie, w przykładzie najpierw wstawia węzła i następnie modyfikuje węzła.
-- if exists drop the table T
--drop table T
-- go
-- Create XML schema collection
-- DROP XML SCHEMA COLLECTION SC
-- go
CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root" type="QName" nillable="true"/>
</schema>'
go
-- Create table T with a typed xml column (using the XML schema collection)
CREATE TABLE T (xmlCol XML(SC))
go
-- Insert an XML instance.
insert into T values ('<root xmlns:a="http://someURI">a:b</root>')
go
-- Verify
SELECT *
FROM T
Próba następujące dodaje inną <root> element, ale zawiedzie, ponieważ funkcja expanded-QName() nie jest obsługiwana w konstrukcji XML.
update T SET xmlCol.modify('
insert <root>{expanded-QName("http://ns","someLocalName")}</root> as last into / ')
go
Rozwiązanie to jest najpierw wstawić wystąpienie o wartość dla <root> element, a następnie zmodyfikować goW tym przykładzie pas wartość początkowa jest używany podczas <root> element jest wstawiany.kolekcja schematu XML, w tym przykładzie umożliwia lew dla <root> elementu.
update T SET xmlCol.modify('
insert <root xsi:nil="true"/> as last into / ')
go
-- now replace the nil value with another QName.
update T SET xmlCol.modify('
replace value of /root[last()] with expanded-QName("http://ns","someLocalName") ')
go
-- verify
SELECT * FROM T
go
-- result
<root>b</root>
<root xmlns:a="http://someURI">a:b</root>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p1="http://ns">p1:someLocalName</root>
Jak pokazano w następującej kwerendzie można porównać wartość QName.Kwerenda zwraca tylko <root> elementów, których wartości spełniają QName wpisz wartość zwracana przez expanded-QName() funkcja.
SELECT xmlCol.query('
for $i in /root
return
if ($i eq expanded-QName("http://ns","someLocalName") ) then
$i
else
()')
FROM T
Ograniczenia wdrażania
Istnieje jeden ograniczenia: Expanded-QName() funkcja akceptuje puste sekwencji jako drugi argument i zwraca pusty zamiast podnoszenie Uruchom -czas błąd podczas drugiego argumentu jest niepoprawna.