Genişletilmiş-QName (XQuery)
Belirtilen URI ad alanıyla QNamesendikaya türünde bir değer döndürür $paramURI ve belirtilen yerel ad $paramLocal. Eğer $paramURI boş veya boş sırası ise hiçbir ad alanını temsil eder.
Sözdizimi
fn:expanded-QName($paramURI as xs:string?, $paramLocal as xs:string?) as xs:QName?
fn:expanded-QName($paramURI as xs:string?, $paramLocal as xs:string?) as xs:QName?
Bağımsız değişkenler
$paramURI
Ad alanı URI QName için.$paramLocal
QName yerel ad parçasıdır.
Açıklamalar
Aşağıdaki uygulandığı expanded-QName() fonksiyonu:
Eğer $paramLocal belirtilen değeri XS türü için doğru sözlü biçimde, boş sırası döndürülür ve dinamik bir hata gösterir.
Başka bir türü QNamesendikaya türü dönüştürme desteklenen değil SQL Server. Bu expanded-QName() işlevi xml yapım kullanılamaz. Örneğin, ne zaman size inşa bir düğüm gibi <e> expanded-QName(…) </e>, yazılmamış olması değeri vardır. Bu tarafından döndürülen QNamesendikaya türü değeri dönüştürmek gerekir expanded-QName()için xdt: untypedAtomic. Ancak, bu desteklenmiyor. Bu konuda daha sonra açıklanan örnek bir çözüm sağlanır.
Değiştirebilir veya varolan QName türü değerleri karşılaştırın. Örneğin, /root[1]/e[1] eq expanded-QName("http://nsURI" "myNS")öğesinin değerini karşılaştırır <e>, tarafından döndürülen QName ile expanded-QName() işlevi.
Örnekler
Bu konu çeşitli depolanan xml örnekleri karşı XQuery örnekler sağlar xml yazın sütunlarında AdventureWorks2012 veritabanı. Bu sütunlar genel bakış için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.
A.QName türü düğüm değeri değiştirme
Bu örnek, bir eleman düğümü QName türü değeri nasıl değiştirebileceğiniz gösterilmiştir. Örneğin aşağıdakileri gerçekleştirir:
QName türü bir öğe tanımlayan xml şema koleksiyonu oluşturur.
Bir tablo ile bir xml xml şema koleksiyonu kullanarak sütun türü.
Bir xml örneği tabloda kaydeder.
Kullandığı modify() örneği QName türü öğesinin değerini değiştirmek için xml veri türü yöntemi. Expanded-QName() işlevi yeni QName türü değeri oluşturmak için kullanılır.
-- 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>
-- 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>
Aşağıdaki sorgu, <ElemQN> kullanarak öğe değeri yerine modify() xml dml, görüldüğü gibi değiştirme değeri ve xml veri türü yöntemi.
-- 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
-- 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
Sonuç budur. Not öğe <ElemQN> QName türü şimdi yeni bir değer vardır:
<Root xmlns="QNameXSD" xmlns:ns="urn">
<ElemQN xmlns:p1="http://myURI">p1:myLocalName</ElemQN>
</Root>
<Root xmlns="QNameXSD" xmlns:ns="urn">
<ElemQN xmlns:p1="http://myURI">p1:myLocalName</ElemQN>
</Root>
Aşağıdaki deyimleri örnekte kullanılan nesneleri kaldırın.
-- Cleanup
DROP TABLE T
go
drop xml schema collection SC
go
-- Cleanup
DROP TABLE T
go
drop xml schema collection SC
go
B.Expanded-QName() işlevi kullanılırken sınırlamaları ile ilgili
Genişletilmiş-QName işlevi xml yapım kullanılamaz. Aşağıdaki örnekte, bu gösterilmektedir. Bu sınırlamaya geçici bir çözüm bulmak için örneğin ilk düğüm ekler ve düğüm değiştirir.
-- 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
-- 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
Aşağıdaki girişimi başka ekler <root> öğesi ama başarısız, expanded-QName() işlevi xml yapım desteklenmediğinden.
update T SET xmlCol.modify('
insert <root>{expanded-QName("http://ns","someLocalName")}</root> as last into / ')
go
update T SET xmlCol.modify('
insert <root>{expanded-QName("http://ns","someLocalName")}</root> as last into / ')
go
İlk örneği için bir değer eklemek için bunun bir çözümü olan <root> öğesini ve sonra değiştirebilirsiniz. Bu örnekte, nil başlangıç değeri kullanılır olduğunda <root> öğesi eklenir. Bu örnek xml şema koleksiyonu için hiç bir değer verir <root> öğesi.
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>
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>
QName değerine, aşağıdaki sorgu gösterildiği gibi karşılaştırabilirsiniz. Yalnızca sorgu döndürür <root> değerlerini eşleştirmek QName elemanları tarafından döndürülen değeri yazın expanded-QName() işlevi.
SELECT xmlCol.query('
for $i in /root
return
if ($i eq expanded-QName("http://ns","someLocalName") ) then
$i
else
()')
FROM T
SELECT xmlCol.query('
for $i in /root
return
if ($i eq expanded-QName("http://ns","someLocalName") ) then
$i
else
()')
FROM T
Uygulama kısıtlamaları
Orada bir sınırlama: expanded-QName() işlev ikinci bağımsız değişken olarak boş sırası kabul eder ve bir çalışma zamanı hatası ikinci bağımsız değişken yanlış olduğunda yükseltme yerine boş dönecektir.