Udostępnij za pośrednictwem


Określanie Metaproperties w OPENXML

Atrybuty Metaproperty w dokumencie XML są atrybuty, które opisują właściwości elementu XML, takie jak element, atrybut lub innego węzła DOM..Te atrybuty nie są fizycznie określone w tekście dokumentu XML.Jednak OPENXML zawiera te metaproperties dla wszystkich elementów XML.Te metaproperties pozwala na wyodrębnienie informacji, takich jak położenie lokalnej i informacje o obszarze nazw węzłów XML.Te informacje pozwala uzyskać bardziej szczegółowe informacje nie są widoczne w tekstowa reprezentacja.

Można mapować te metaproperties do zestawu zestaw wierszy kolumn w instrukcja SQL OPENXML przy użyciu ColPattern parametr.W kolumnach będą zawierać wartości metaproperties, do którego są mapowane.Aby uzyskać więcej informacji na temat składni OPENXML zobacz OPENXML (Transact-SQL).

Aby uzyskać dostęp do atrybutów metaproperty, obszar nazw, które są specyficzne dla programu SQL Server jest dostępna.Ten obszar nazw URN: schemas-microsoft - com:xml - metaprop zezwala użytkownikowi na dostęp do atrybutów metaproperty.Jeśli wynikiem kwerendy do OPENXML zwracany jest w formacie tabela krawędzi, krawędzi tabela zawiera jedną kolumna dla każdego atrybut metaproperty, z wyjątkiem XmlText metaproperty.

Niektóre atrybuty metaproperty są używane do przetwarzania celów.Na przykład XmlText metaproperty atrybut jest używany do obsługi przepełnienie.Obsługa przepełnienie odnosi się do nieużywanej, nieprzetworzone dane w dokumencie.Jedna z kolumn w zestawie zestaw wierszy, który jest generowany przez OPENXML może być zidentyfikowany jako kolumna przepełnienia.Aby to zrobić, należy go do mapowania XmlText metaproperty przy użyciu ColPattern parametr.kolumna odbiera następnie przepełnienie danych.The flags parameter determines whether the kolumna contains everything or only the unconsumed data.

Następująca tabela zawiera listę atrybutów metaproperty, że każdy analizy elementu XML ma.Te atrybuty metaproperty jest możliwy za pomocą obszaru nazw URN: schemas-microsoft - com:xml - metaprop.Każda wartość, które użytkownik ustawi bezpośrednio w dokumencie XML przy użyciu tych metaproperties jest ignorowana.

Uwaga

Nie można odwoływać się do tych metaproperties w dowolnym nawigacji XPath.

Atrybut Metaproperty

Description

@ CR: identyfikator

Zawiera wygenerowane przez system, dla całego dokumentu identyfikator węzła DOM..Dopóki dokument nie jest reparsed, ten identyfikator odwołuje się do tego samego węzła XML.

IDENTYFIKATOR XML z 0 wskazuje, że element jest elementem głównym.Nadrzędnego IDENTYFIKATORA XML jest NULL.

@ CR: localname

Przechowuje lokalną część nazwy węzła.Jest ono używane z prefiksu i obszaru nazw URI do nazwy elementu lub atrybut węzłów.

@ CR: namespaceuri

Zawiera obszaru nazw URI bieżącego elementu.Jeśli wartość tego atrybut ma wartość NULL, nazw nie jest obecny

@ CR: prefiks

Przechowuje prefiks obszaru nazw bieżącej nazwy elementu.

Jeśli prefiks nie jest obecnie (NULL) i znajduje się identyfikator URI, wskazuje to, że określony obszar nazw jest domyślny obszar nazw.Jeśli podano nie identyfikatora URI, nazw nie jest dołączony.

@ CR: poprzedni

Przechowuje poprzedni element równorzędny względem węzła.Dzięki temu informacje o kolejności elementów w dokumencie.

@ CR: poprzedni zawiera identyfikator XML poprzedniego tego samego poziomu, który ma ten sam element nadrzędny.Jeśli element znajduje się na początku listy tego samego poziomu @ CR: poprzedni jest NULL.

@ CR: xmltext

Używane dla celów przetwarzania.Tekstowy serializacji elementu i jego atrybuty, a także podelementy, jest używany w obsługi przepełnienie OPENXML.

W poniższej tabela pokazano nadrzędnego dodatkowe właściwości, które są dostarczane i umożliwia pobieranie informacji na temat hierarchii.

Atrybut metaproperty nadrzędny

Description

@ CR: parentid

Odpowiada ../@MP:ID

@ CR: parentlocalname

Odpowiada ../@MP:LocalName

@ CR: parentnamespacerui

Odpowiada ../@MP:namespaceURI

@ CR: parentprefix

Odpowiada ../@MP:prefix

Przykłady

Poniższe przykłady ilustrują, w jaki sposób OPENXML służy do tworzenia zestaw wierszy różnych widoków.

A.Mapowanie kolumn zestawu zestaw wierszy OPENXML the metaproperties

W tym przykładzie użyto OPENXML, aby utworzyć widok zestawu zestaw wierszy z przykładowy dokument XML.W szczególności pokazuje w jaki sposób różne atrybuty metaproperty mogą być mapowane do zestawu zestaw wierszy kolumn w instrukcja SQL OPENXML przy użyciu ColPattern parametr.

Instrukcja OPENXML ilustruje następujące czynności:

  • The id kolumna is mapped to the @mp:id metaproperty atrybut and indicates that the kolumna contains the system-generated unique XML ID of the element.

  • The parent kolumna is mapped to @mp:parentid and indicates that the kolumna contains the XML ID of the parent of the element.

  • The parentLocalName kolumna is mapped to @mp:parentlocalname and indicates that the kolumna contains the local name of the parent.

Następnie instrukcja SELECT zwraca zestaw wierszy, jaką zapewnia OPENXML:

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

Oto wynik:

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.Trwa pobieranie całego dokumentu XML

W tym przykładzie OPENXML jest używany do utworzenia zestawu zestaw wierszy z jednej kolumna widoku przykładowy dokument XML.W tej kolumnie Kol1, jest mapowany na XmlText metaproperty i stanie się kolumną przepełnienie.W rezultacie kolumna odbiera nieużywanej danych.W takim wypadku jest cały dokument.

Następnie instrukcja SELECT zwraca pełny zestaw wierszy.

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')

Aby pobrać cały dokument bez deklaracja XML, można określić kwerendę, jak to pokazano w poniższym:

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

Zwraca element główny, składająca się z głównych nazw i danych, który jest zawarty w elemencie głównym

C.Określanie metaproperty xmltext do pobierania danych nieużywanej kolumna

W tym przykładzie użyto OPENXML, aby utworzyć widok zestawu zestaw wierszy z przykładowy dokument XML.W przykładzie pokazano, jak pobrać nieużywanej danych XML, mapując XmlText metaproperty atrybut do kolumna OPENXML zestawu zestaw wierszy.

The comment kolumna is identified as the overflow kolumna by mapping it to the @mp:xmltext metaproperty.The flags parameter is zestaw to 9 (XML_ATTRIBUTE and XML_NOCOPY).Oznacza to, że zorientowany atrybut mapowania i wskazuje, że tylko dane nieużywanej powinny być skopiowane do Kolumna przepełnienia.

Następnie instrukcja SELECT zwraca dostarczonych przez OPENXML zestawu zestaw wierszy.

W tym przykładzie @ CR: parentlocalname metaproperty jest ustawiony dla kolumna, ParentLocalName, zestaw wierszy wygenerowanych przez OPENXML.W rezultacie kolumna zawiera nazwę lokalną elementu nadrzędnego.

Dwa dodatkowe kolumny są określone w zestawie zestaw wierszy, nadrzędny and komentarz.The parent kolumna is mapped to @mp:parentid and indicates that the kolumna contains the XML ID of the parent element of the element.W kolumnie komentarz jest identyfikowany jako kolumna przepełnienia mapując go do @ CR: xmltext metaproperty.

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

Jest to wynik.Ponieważ oid kolumn i kolumn data są już wykorzystane, nie zostały podane kolumna przepełnienie.

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"/>