Genişletilmiş-QName (XQuery)
Belirtilen URI ad alanıyla xs:QName türde bir değer döndürür $ paramURI ve belirtilen yerel adı*$ paramLocal*.If $ paramURI boş dize veya boş sırası, onu temsil edecek hiçbir ad alanı.
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 iş.$paramLocal
Bir yerel ad QName parçasıdır.
Açıklamalar
Aşağıdaki geçerli 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.
Içinde başka bir türe dönüştürme xs:QName türü desteklenmiyor SQL Server. Bu, expanded-QName() işlev XML yapı içinde kullanılamaz.Örneğin, zaman, bir düğüm gibi oluşturarak <e> expanded-QName(…) </e>, değeri türlenmemiş gerekir. Bu xs:QName türü tarafından döndürülen değeri dönüştürmeniz gerekir expanded-QName() XDT:untypedAtomic için. Ancak, bu desteklenmiyor.Bu konuda bir örnek BIR çözüm sağlanmaktadı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") öğenin değeri karşılaştırır. <e>, döndürülen QName ile expanded-QName() işlev.
Örnekler
Bu konu, çeşitli içinde depolanan XML örnekleri karşı XQuery örnekler sağlar. XML türü sütunAdventureWorks Veritabanı. Konusuna genel bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks veritabanındaki.
C.QName düğüm türü değeri değiştirme
Bu örnek, değeri QName türünde bir öğe düğümü değiştirme gösterir.Örneğin, aşağıdakileri gerçekleştirir:
QName türünde bir öğe tanımlayan XML şema koleksiyon oluşturur.
Bir tablo ile bir XML türü sütun kullanarak XML şema koleksiyon.
Bir XML örnek tabloya kaydeder.
Kullanan MODIFY() yöntem örnek QName türü öğesinin değerini değiştirmek için xml veri türü.The expanded-QName() işlev 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 sorguda <ElemQN> Öğe değerini 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
Bu kaynaklanır.Dikkat öğe <ElemQN> QName şimdi yeni bir değer türünde:
<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.Ilgili expanded-QName() işlevini kullanırken sınırlamalar
The expanded-QName işlev cannot be used in XML construction.Aşağıdaki örnek bunu göstermektedir.Bu kısıtlamaya bir geçici çözüm bulmak için , örnek ilk düğüm ekler ve 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> expanded-QName() işlev XML inşaat desteklenmediği için öğe ancak, başarısız.
update T SET xmlCol.modify('
insert <root>{expanded-QName("http://ns","someLocalName")}</root> as last into / ')
go
Bu çözüm için bir değer örneğiyle ilk eklemektir <root> öğe ve daha sonra değiştirebilirsiniz. Bu örnekte, nil bir başlangıç değeri olarak kullanılır, <root> öðe eklenir. Bu örnek XML şeması koleksiyonda nil bir değer verir <root> öğe.
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 sorguda gösterilen karşılaştırabilirsiniz.Sorguyu yalnızca sayı <root> QName değerleri 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 kısıtlama yoktur: The expanded-QName() işlev ikinci bağımsız değişkeni boş sırasını kabul eder ve bir çalışma zamanı hatası ikinci bağımsız değişken yanlış olduğunda yükseltme yerine boş olarak döndürür.