Genişletilmiş-QName (XQuery)
URI öğesinde belirtilen ad alanıyla xs:QName türünde bir değer döndürür $paramURI ve belirtilen yerel ad $paramLocal.If $paramURI is the empty string or the empty sequence, it represents no namespace.
Sözdizimi
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ğıdakiler için geçerlidir expanded-QName() işlev:
If the $paramLocal value specified is not in the correct lexical form for xs:NCName type, the empty sequence is returned and represents a dynamic error.
Xs:QName türünden başka bir türe dönüştürme desteklenen değil SQL Server.Bu yüzden expanded-QName() işlev xml yapım içinde kullanılamaz.Örneğin, ne zaman size oluşturarak bir düğüm gibi <e> expanded-QName(…) </e>, türlenmemiş olarak değerini alır.Bu tarafından döndürülen xs:QName türü değeri dönüştürmek gerekir expanded-QName() xdt:untypedAtomic. içinAncak, bu desteklenmiyor.Bu konuda daha sonra açıklanan örnek bir çözüm sağlanmaktadır.
Değiştirmek 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şlev.
Örnekler
Bu konuda çeşitli içinde depolanan xml örnekleri karşı XQuery örnekler sağlar xml sütunları yazın AdventureWorks2008R2 veritabanı.Bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.
A.QName türü düğüm değeri değiştirme
Bu örnek, bir öğe düğümü QName türü değerinin nasıl değiştirebileceğiniz gösterir.Örneğin aşağıdakileri gerçekleştirir:
Bir xml şeması oluşturur koleksiyon , QName türü öğesi tanımlar.
Bir tablo ile bir xml türü sütun xml şemasını kullanarak koleksiyon.
xml örnekni kaydeder tablo.
Kullandığı modify() içinde QName türü öğesinin değerini değiştirmek için xml veri türü yöntem örnek.The expanded-QName() function is used to generate the new QName type value.
-- 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> öğe değeri kullanarak yerine modify() yöntem xml veri türü ve xml dml gösterildiği gibi replace değeri.
-- 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.Dikkat edin öğe <ElemQN> QName türü şimdi yeni bir değere sahip:
<Root xmlns="QNameXSD" xmlns:ns="urn">
<ElemQN xmlns:p1="http://myURI">p1:myLocalName</ElemQN>
</Root>
Aþaðýdaki örnekte kullanılan nesneleri kaldırın.
-- Cleanup
DROP TABLE T
go
drop xml schema collection SC
go
B.Postalarla expanded-QName() işlev kullanılırken sınırlamaları
The expanded-QName function cannot be used in XML construction.Aşağıdaki örnek bunu göstermektedir.Bu sınırlamaya geçici bir çözüm için örnek ilk düğüm ekler ve daha sonra 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
Aşağıdaki girişimi başka ekler <root> öğesi ancak başarısız, çünkü expanded-QName() işlev desteklenmez xml yapım.
update T SET xmlCol.modify('
insert <root>{expanded-QName("http://ns","someLocalName")}</root> as last into / ')
go
İlk örnek için bir değer eklemek için bu bir çözüm olan <root> öğesini ve sonra it.Bu örnekte, oynayan bir ilk değer kullanılır, <root> öğesine eklenir.xml şema koleksiyon Bu örnekte için oynayan bir değer veren <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>
<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>
Aşağıdaki sorgu gösterildiği gibi QName değeri karşılaştırabilirsiniz.Yalnızca sorgunun döndürdüğü <root> değerleri QName eşleşen öğeleri tarafından döndürülen değeri yazın expanded-QName() işlev.
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ı
Bir sınırlama vardır: Expanded-QName() işlev ikinci bağımsız değişken olarak boş sırası kabul eder ve çalışma - yükseltme yerine boş dönmeksaat ikinci bağımsız değişken yanlış olduğunda hata.