Aracılığıyla paylaş


OPENXML'de meta özellikleri belirtme

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

XML belgesindeki meta özellik öznitelikleri, xml öğesinin özelliklerini açıklayan öğe, öznitelik veya başka bir DOM düğümü gibi özniteliklerdir. Bu öznitelikler XML belge metninde fiziksel olarak bulunmaz. Ancak, OPENXML tüm XML öğeleri için bu meta özellikleri sağlar. Bu meta özellikler, XML düğümlerinin yerel konumlandırması ve ad alanı bilgileri gibi bilgileri ayıklamanıza olanak sağlar. Bu bilgiler, metin gösteriminde görünenden daha fazla ayrıntı sağlar.

ColPattern parametresini kullanarak bu meta özellikleri openXML deyimindeki satır kümesi sütunlarına eşleyebilirsiniz. Sütunlar, eşlendikleri meta özelliklerin değerlerini içerir. OPENXML söz dizimi hakkında daha fazla bilgi için bkz. OPENXML (Transact-SQL) .

Meta özellik özniteliklerine erişmek için SQL Server'a özgü bir ad alanı sağlanır. Bu ad alanı, urn:schemas-microsoft-com:xml-metaprop kullanıcının meta özellik özniteliklerine erişmesine izin verir. BIR OPENXML sorgusunun sonucu bir kenar tablosu biçiminde döndürülürse, kenar tablosu metaözelliği xmltext dışında her metaproperty özniteliği için bir sütun içerir.

Meta özellik özniteliklerinden bazıları işleme amacıyla kullanılır. Örneğin, taşma işleme için xmltext meta özellik özniteliği kullanılır. Taşma işlemi, belgedeki tüketilmemiş, işlenmemiş verileri ifade eder. OPENXML tarafından oluşturulan satır kümesindeki sütunlardan biri taşma sütunu olarak tanımlanabilir. Bunu, xmltext parametresini kullanarak meta özelliğine eşleyerek yaparsınız. Ardından sütun taşma verilerini alır. bayrakları parametresi, sütunun her şeyi mi yoksa yalnızca tüketilmemiş verileri mi içerdiğini belirler.

Aşağıdaki tabloda ayrıştırılan her XML öğesinin sahip olduğu metaproperty öznitelikleri listelenmiştir. Bu metaözellik özniteliklerine urn:schemas-microsoft-com:xml-metapropad alanı kullanılarak erişilebilir. Kullanıcının bu meta özellikleri kullanarak doğrudan XML belgesinde ayarladığı tüm değerler yoksayılır.

Not

Bu meta özelliklere hiçbir XPath gezintisinde başvuramazsınız.

Metaproperty özniteliği Açıklama
@mp:id DOM düğümünün sistem tarafından oluşturulan, belge genelinde tanımlayıcısını sağlar. Belge yeniden işlenmiyorsa, bu kimlik aynı XML düğümüne bağlanır.

0 XML kimliği, öğenin bir kök öğesi olduğunu gösterir. Üst XML kimliği NULL'tır.
@mp:localname Düğüm adının yerel bölümünü depolar. Öğe veya öznitelik düğümlerini adlandırmak için bir ön ek ve ad alanı URI'siyle kullanılır.
@mp:namespaceuri Geçerli öğenin ad alanı URI'sini sağlar. Bu özniteliğin değeri NULL ise, ad alanı yoktur
@mp:prefix Geçerli öğe adının ad alanı ön ekini depolar.

Ön ek yoksa (NULL) ve URI verilirse, belirtilen ad alanının varsayılan ad alanı olduğunu gösterir. URI verilmezse, ad alanı eklenmez.
@mp:prev Bir düğümle ilgili olarak önceki kardeşi depolar. Bu, belgedeki öğelerin sıralaması hakkında bilgi sağlar.

@mp:prev, aynı üst öğeye sahip önceki eşdüzeyin XML kimliğini içerir. Öğe eşdüzeyler listesinin önündeyse @mp:prev NULL'dür.
@mp:xmltext İşleme amacıyla kullanılır. OPENXML'nin taşma işlemesinde kullanıldığı şekilde, öğenin, özniteliklerinin ve alt öğelerinin metinsel serileştirilmesidir.

Bu tablo, sağlanan ek ebeveyn özelliklerini ve bunların hiyerarşi hakkında bilgi almanızı nasıl sağladığını gösterir.

Üst meta özellik özniteliği Açıklama
@mp:parentid ../\@mp:id karşılık gelir
@mp:parentlocalname ../\@mp:localname karşılık gelir
@mp:parentnamespacerui ../\@mp:namespaceuri karşılık gelir
@mp:parentprefix ../\@mp:prefix karşılık gelir

Örnekler

Aşağıdaki örneklerde, OPENXML'nin farklı satır kümesi görünümleri oluşturmak için nasıl kullanıldığı gösterilmektedir.

A. OPENXML satır kümesi sütunlarını meta özelliklerle eşleme

Bu örnekte, örnek XML belgesinin satır kümesi görünümünü oluşturmak için OPENXML kullanılmaktadır. Özellikle, ColPattern parametresi kullanılarak çeşitli metaözellik özniteliklerinin bir OPENXML deyimindeki satır kümesi sütunlarına nasıl eşlenebileceğini gösterir.

OPENXML deyimi aşağıdakileri gösterir:

  • id sütunu @mp:id metaözelliği özniteliğine eşlenir ve sütunun öğenin sistem tarafından oluşturulan benzersiz XML kimliğini içerdiğini gösterir.

  • parent sütunu @mp:parentid eşlenir ve sütunun öğenin üst öğesinin XML kimliğini içerdiğini gösterir.

  • parentLocalName sütunu, sütunun üst öğesinin yerel adını içerdiğini gösterir ve @mp:parentlocalname'e eşlenmiştir.

SELECT deyimi daha sonra OPENXML tarafından sağlanan satır kümesini döndürür:

DECLARE @idoc int;
DECLARE @doc nvarchar(1000);
-- Sample XML document
SET @doc = N'<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order oid="O1" date="1/20/1996" amount="3.5" />
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>
   </Customer>
   <Customer cid="C2" name="Ursula" city="Oelde" >
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
          <Urgency>Important</Urgency>
      </Order>
      <Order oid="O4" date="1/20/1996" amount="10000"/>
   </Customer>
</root>';
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 9)
      WITH (id int '@mp:id',
            oid char(5),
            date datetime,
            amount real,
            parentIDNo int '@mp:parentid',
            parentLocalName varchar(40) '@mp:parentlocalname');
EXEC sp_xml_removedocument @idoc;

Sonuç şu şekildedir:

id   oid         date                amount    parentIDNo  parentLocalName
--- ------- ---------------------- ---------- ------------ ---------------
6    O1    1996-01-20 00:00:00.000     3.5         2        Customer
10   O2    1997-04-30 00:00:00.000     13.4        2        Customer
19   O3    1999-07-14 00:00:00.000     100.0       15       Customer
25   O4    1996-01-20 00:00:00.000     10000.0     15       Customer

B. XML belgesinin tamamını alma

Bu örnekte OPENXML, örnek XML belgesinin tek sütunlu satır kümesi görünümünü oluşturmak için kullanılır. Col1sütunu, xmltext meta özelliğine eşlenir ve taşma alanı sütunu olur. Sonuç olarak sütun, tüketilmemiş verileri alır. Bu durumda, bu, belgenin tamamı.

SELECT deyimi daha sonra tam satır kümesini döndürür.

DECLARE @idoc int;
DECLARE @doc nvarchar(1000);
SET @doc = N'<?xml version="1.0"?>
<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order oid="O1" date="1/20/1996" amount="3.5" />
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very
             satisfied</Order>
   </Customer>
   <Customer cid="C2" name="Ursula" city="Oelde" >
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
             white red">
     <MyTag>Testing to see if all the subelements are returned</MyTag>
          <Urgency>Important</Urgency>
      </Order>
      <Order oid="O4" date="1/20/1996" amount="10000"/>
   </Customer>
</root>';
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/')
   WITH (Col1 ntext '@mp:xmltext')

XML bildirimi olmadan belgenin tamamını almak için sorgu aşağıdaki gibi belirtilebilir:

SELECT *
FROM OPENXML (@idoc, '/root')
   WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc;

Sorgu, kök adlı kök öğeyi ve kök öğesinin içerdiği verileri döndürür

C. Tüketilmemiş verileri bir sütunda almak için xmltext metaproperty'sini belirtme

Bu örnekte, örnek XML belgesinin satır kümesi görünümünü oluşturmak için OPENXML kullanılmaktadır. Örnekte, xmltext metaproperty özniteliğini OPENXML'deki bir satır kümesi sütununa eşleyerek, işlenmemiş XML verilerinin nasıl alındığı gösterilmektedir.

comment sütunu, @mp:xmltext meta özelliğine eşlenerek taşma sütunu olarak tanımlanır. bayrakları parametresi 9 (XML_ATTRIBUTE ve XML_NOCOPY) olarak ayarlanır. Bu, attribute-centric eşlemeyi gösterir ve yalnızca tüketilmemiş verilerin taşma sütununa kopyalanması gerektiğini belirtir.

SELECT deyimi daha sonra OPENXML tarafından sağlanan satır kümesini döndürür.

Bu örnekte, @mp:parentlocalname meta özelliği, OPENXML tarafından oluşturulan satır kümesinde ParentLocalNamebir sütun için ayarlanır. Sonuç olarak, bu sütun üst öğenin yerel adını içerir.

Satır kümesinde parent ve commentiki ek sütun belirtilir. parent sütunu @mp:parentid eşlenir ve sütunun öğenin üst öğesinin XML kimliğini içerdiğini gösterir. Açıklama sütunu, @mp:xmltext meta özelliğine eşlenerek taşma sütunu olarak tanımlanır.

DECLARE @idoc int;
DECLARE @doc nvarchar(1000);
-- sample XML document
SET @doc = N'<root>
  <Customer cid= "C1" name="Janine" city="Issaquah">
      <Order oid="O1" date="1/20/1996" amount="3.5" />
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>
   </Customer>
   <Customer cid="C2" name="Ursula" city="Oelde" >
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
          <Urgency>Important</Urgency>
      </Order>
      <Order oid="O4" date="1/20/1996" amount="10000"/>
   </Customer>
</root>
';
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 9)
      WITH (oid char(5),
            date datetime,
            comment ntext '@mp:xmltext');
EXEC sp_xml_removedocument @idoc;

Sonuç budur. OID sütunlar ve tarih sütunları zaten tüketildiğinden aşma sütununda görünmezler.

oid   date                        comment
----- --------------------------- ----------------------------------------
O1    1996-01-20 00:00:00.000     <Order amount="3.5"/>
O2    1997-04-30 00:00:00.000     <Order amount="13.4">Customer was very
                                   satisfied</Order>
O3    1999-07-14 00:00:00.000     <Order amount="100" note="Wrap it blue
                                   white red"><Urgency>
                                   Important</Urgency></Order>
O4    1996-01-20 00:00:00.000     <Order amount="10000"/>

Ayrıca bkz.