Aracılığıyla paylaş


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.

Ayrıca bkz.

Kavramlar

QNames (XQuery) ilgili işlevler