Udostępnij za pośrednictwem


Badanie XML przy użyciu OPENXML

OPENXML, Transact-SQL słowa kluczowego, zapewnia zestaw wierszy nad dokumentami XML w pamięci, które jest podobna do tabela lub widoku.OPENXML umożliwia dostęp do danych XML, tak jakby była relacyjnej zestawu zestaw wierszy.Odbywa się to przez udostępnienie widoku zestaw wierszy reprezentacji wewnętrznej dokumentu XML.W tabelach bazy danych mogą być przechowywane rekordy w zestawie zestaw wierszy.

OPENXML mogą być używane w instrukcji SELECT i SELECT INTO, gdziekolwiek dostawców zestawu zestaw wierszy, widok lub OPENROWSET może pojawić się jako źródło.Aby uzyskać informacje na temat składni OPENXML, zobacz OPENXML (Transact-SQL).

Do pisania kwerend dokumentu XML przy użyciu OPENXML, należy najpierw wywołać sp_xml_preparedocument.Analizuje dokument XML i zwraca uchwyt zanalizowano dokumentu, który jest gotowe do spożycia.Zanalizowano dokumentu jest reprezentacją dokumentu obiektu model (DOM) drzewa różnych węzłów dokumentu XML.Uchwyt dokumentu jest przekazywana do OPENXML.OPENXML następnie udostępnia widok zestawu zestaw wierszy dokumentu, na podstawie parametrów przekazanych do niego.

Ostrzeżenie

Począwszy od SQL Server 2005, sp_xml_preparedocument używa wersja parsera MSXML Msxmlsql.dll zaktualizowane SQL.Ta wersja parsera MSXML został zaprojektowany do obsługi SQL Server i pozostają zgodne z programu MSXML w wersji 2.6.

Wewnętrzna reprezentacja dokumentu XML muszą być usunięte z pamięci, wywołując sp_xml_removedocument systemowa procedura składowana aby zwolnić pamięć.

Na następującej ilustracji pokazano proces.

Analizowanie składni XML za pomocą interfejsu OPENXML

Należy zauważyć, że do zrozumienia OPENXML, wymagana jest znajomość kwerend XPath i zrozumienia XML.Aby uzyskać więcej informacji o obsłudze XPath w programie SQL Server, zobacz Za pomocą kwerend XPath w SQLXML 4.0.

Ostrzeżenie

Wiersz umożliwia OpenXML i kolumna wzorce XPath do sparametryzowana jako zmienne.Takie Parametryzacja może prowadzić do wstrzyknięć wyrażenie XPath, jeśli programista uwidacznia parametryzacja użytkownikom zewnętrznym (na przykład, jeśli parametry są dostarczane za pośrednictwem zewnętrznie wywołana procedura składowana).Aby uniknąć takich potencjalne problemy, zalecane jest, że parametry XPath nigdy być narażone na zewnętrznych wywołań.

Parametry OPENXML

Następujące parametry OPENXML:

  • Dojście do dokumentu XML (idoc)

  • Wyrażenie XPath do identyfikowania węzłów, które mają być mapowane do wierszy (rowpattern)

  • Opis zestawu zestaw wierszy do wygenerowania

  • Mapowanie między kolumnami zestaw wierszy i węzłów XML

XML dokumentu obsługi (idoc)

Uchwyt dokumentu jest zwracany przez sp_xml_preparedocument procedura składowana.

Wyrażenie XPath do identyfikowania węzłów do przetworzenia (rowpattern)

Wyrażenie XPath, określony jako rowpattern identyfikuje zestaw węzłów dokumentu XML.Każdy węzeł, który jest identyfikowany przez rowpattern odpowiada jeden wiersz w zestawie zestaw wierszy, który jest generowany przez OPENXML.

Węzły identyfikowane przez wyrażenie XPath może być dowolny węzeł XML w dokumencie XML.Jeśli rowpattern identyfikuje zestaw elementów w dokumencie XML w zestawie zestaw wierszy dla każdego węzła element identyfikowany jest jeden wiersz.Na przykład jeśli rowpattern kończy się w atrybucie, wiersz jest tworzony dla każdego węzła atrybut wybranych przez rowpattern.

Opis zestawu wierszy do wygenerowania

Schemat zestaw wierszy jest używana przez OPENXML Generowanie wynikowego zestawu zestaw wierszy.Podczas określania schematu zestawu zestaw wierszy, można użyć następujących opcji.

W formacie tabeli krawędzi

Aby określić schemat zestawu zestaw wierszy należy używać formatu krawędzi tabela.Nie należy używać klauzula WITH.

Po wykonaniu tej OPENXML zwraca w formacie tabela krawędzi zestawu zestaw wierszy.To jest zwany krawędzi tabela, ponieważ każdej krawędzi w drzewie dokumentu XML zanalizowano mapuje do zestaw wierszy w zestawie zestaw wierszy.

Krawędź tabele przedstawiają w jednej tabela szczegółowymi strukturę dokumentu XML.Ta struktura zawiera nazwy elementów i atrybut, hierarchii dokumentu, obszarów nazw i instrukcje sterujące.Format tabela krawędzi pozwala uzyskać dodatkowe informacje, które nie jest dostępny za pośrednictwem metaproperties.Aby uzyskać więcej informacji na temat metaproperties Zobacz Określanie Metaproperties w OPENXML29bfd1c6-3f9a-43 c 4-924a-53d438e442f4.

Dodatkowe informacje dostarczone przez krawędź tabela pozwala przechowywać i kwerendy typ danych elementu i atrybut i typ węzła i również przechowywanie i kwerendami strukturę dokumentu XML.To dodatkowe informacje mogą być również można budować własne system zarządzania dokumentami XML.

Korzystając z krawędzi tabela, można napisać procedury przechowywane, które dokumenty XML jako duży obiekt binarny (BLOB) wprowadzania, produkują tabela krawędzi wyodrębnić i analizować dokument na bardziej szczegółowe poziom.Ten poziom szczegółowe mogą obejmować znajdowanie hierarchii dokumentu, nazwy elementów i atrybut, obszary nazw i instrukcje sterujące.

Krawędź tabela może również służyć jako formatu przechowywania dokumentów XML podczas mapowania na inne formaty relacyjnej nie jest logiczną i ntext pole nie dostarcza wystarczających informacji strukturalnych.

W sytuacjach, gdy do zbadania dokument XML można użyć XML parser można użyć krawędzi tabela zamiast uzyskać te same informacje.

W poniższej tabela opisano strukturę tabela krawędzi.

Nazwa kolumny

Typ danych

Opis

Identyfikator

bigint

Jest to unikatowy identyfikator węzła dokumentu.

Element główny ma identyfikator wartość 0.Ujemne wartości Identyfikatora są zastrzeżone.

parentID

bigint

Identyfikuje obiektu nadrzędnego węzła.Nadrzędny identyfikowane przez ten identyfikator nie jest koniecznie elementu nadrzędnego.To zależy jednak NodeType węzła, którego nadrzędny jest identyfikowany przez ten identyfikator.Na przykład jeśli węzeł jest węzłem tekstowym, nadrzędnego może być węzeł atrybut.

Jeśli węzeł jest u góry poziom w dokumencie XML jego ParentID ma wartość NULL.

Typ węzła

int

Identyfikuje typ węzła i jest liczbą całkowitą odpowiadającą XML object model (DOM) węzła typu numeracja.

Poniżej przedstawiono wartości, które mogą być wyświetlane w tym kolumna aby wskazać typ węzła:

1 = Węzeł elementu

2 = Węzeł atrybutu

3 = Węzeł tekstu

4 = Węzeł sekcji CDATA

5 = Węzeł odwołania encji

6 = Węzeł encji

7 = Węzeł instrukcji przetwarzania

8 = Węzeł komentarz

9 = Węzeł dokumentu

10 = Węzeł typu dokumentu

11 = Węzeł Fragment dokumentu

12 = Węzeł notacji

Aby uzyskać więcej informacji zobacz "nodeType właściwości" temat programu Microsoft XML (MSXML) SDK.

LocalName

nvarchar(max)

Nadaje nazwę lokalną elementu lub atrybut.Jest NULL, jeśli obiekt DOM nie ma nazwy.

Prefiks

nvarchar(max)

Jest prefiks obszaru nazw nazwa węzła.

namespaceURI

nvarchar(max)

Jest nazw URI węzła.Jeśli wartością jest NULL, nazw nie jest obecny.

Typ danych

nvarchar(max)

Jest rzeczywisty typ danych w wierszu element lub atrybut i inaczej NULL.Typ danych jest wywnioskować z wbudowanej DTD lub wbudowany schemat.

poprzedni

bigint

Jest to identyfikator XML poprzedniego elementu równorzędnego.Jest NULL, jeśli nie ma żadnego bezpośredniego poprzedni równorzędny.

tekst

ntext

Zawiera wartość atrybut lub zawartości elementu w postaci tekstu.Lub NULL, jeśli wpis tabela krawędzi nie wymaga wartości.

Korzystanie z klauzuli określenie istniejącej tabeli

Aby określić nazwę istniejącej tabela, można użyć klauzula WITH.W tym celu określić istniejącą nazwę tabela, którego schemat pozwala OPENXML wygenerować zestawu zestaw wierszy.

Korzystanie z klauzuli, aby określić schemat

Klauzula z służy do określania pełnej schematu.Określając schematu zestawu zestaw wierszy, określ kolumna nazwy, ich typy danych i ich mapowanie do dokumentu XML.

Deseń kolumna można określić przy użyciu parametru ColPattern w SchemaDeclaration.Deseń określona kolumna jest używany do mapowania kolumny zestawu zestaw wierszy węzeł XML, który jest identyfikowany przez rowpattern i służy również do określenia typu mapowania.

Jeżeli nie określono ColPattern kolumny, kolumna zestawu zestaw wierszy mapuje węzeł XML o tej samej nazwie, oparte na mapowaniu określonego przez flags parametru.Jednakże jeżeli ColPattern jest określony jako część specyfikacji schematu w klauzula WITH, go zastępuje mapowania, jest określona w flags parametru.

Mapowanie między kolumnami wierszy i węzłów XML

W instrukcja OPENXML można opcjonalnie określić typ mapowanie, takich jak zorientowany atrybut lub element zorientowany, między kolumnami zestaw wierszy i węzłów XML, które są identyfikowane przez rowpattern.Te informacje są używane w transformacja między węzłami XML i kolumn zestawu zestaw wierszy.

Można określić mapowanie na dwa sposoby, a także można określić zarówno:

  • Za pomocą flagi parametr

    Mapowania, jest określona przez flagi Parametr przyjmuje nazwę korespondencji, w którym węzłów XML mapowanie odpowiednich kolumn zestawu zestaw wierszy o tej samej nazwie.

  • Za pomocą ColPattern parametr

    ColPattern, wyrażenie XPath jest określony jako część SchemaDeclaration w klauzula WITH.Mapowanie, określone w ColPattern zastępuje mapowanie określonej przez flagi parametru.

    ColPattern można określić typ mapowanie, takich jak zorientowany atrybut lub element zorientowany, który zastępuje lub zwiększa domyślnego mapowania wskazanych przez flagi.

    ColPattern określone w następujących okolicznościach:

    • Nazwa kolumna w zestawie zestaw wierszy jest inna niż nazwa element lub atrybut, który jest mapowany.W takim przypadek ColPattern jest używany do identyfikowania której kolumna zestawu zestaw wierszy mapuje nazwy elementów i atrybut XML.

    • Chcesz zmapować atrybut metaproperty do kolumna.W takim przypadek ColPattern jest używany do identyfikowania metaproperty, do którego mapuje kolumna zestawu zestaw wierszy.Aby uzyskać więcej informacji na temat używania metaproperties, zobacz Określanie Metaproperties w OPENXML.

Obie flagi i ColPattern parametry są opcjonalne.Jeśli nie zostanie określony, przyjmowana jest zorientowany atrybut mapowania.Mapowanie zorientowany atrybut jest wartość domyślna, flagi parametru.

Mapowanie zorientowany atrybutu

Ustawienie flagi określa parametr OPENXML 1 (XML_ATTRIBUTES) zorientowany atrybut mapowania.Jeśli flagi zawiera ATRYBUTY XML_ narażonych zestaw wierszy zawiera lub zużywa wiersze, gdzie każdy element XML jest przedstawiany jako wiersz.Atrybuty XML są mapowane do atrybutów, które są zdefiniowane w SchemaDeclaration lub są dostarczane przez Nazwa_tabeli klauzula WITH oparte na nazwę korespondencji.Korespondencja nazwa oznacza, że atrybuty XML konkretnej nazwy są przechowywane kolumna zestawu zestaw wierszy o tej samej nazwie.

Jeśli nazwa kolumna różni się od nazwy atrybut mapowania, ColPattern musi być określony.

Atrybut XML ma kwalifikator obszaru nazw, nazwa kolumna w zestawie zestaw wierszy musi także mieć kwalifikator.

Zorientowany na element Mapowanie

Ustawienie flagi określa parametr OPENXML 2 (XML_ELEMENTS) zorientowany na element mapowania.Jest podobny do zorientowany atrybut mapowanie, z wyjątkiem następujące różnice:

  • Zgodność nazwy przykład mapowania mapowanie kolumn na element XML o tej samej nazwie wybiera podelementy noncomplex, chyba że kolumna -poziom określonego wzorca.W trakcie pobierania, czy podelement jest złożone, ponieważ zawiera on dodatkowe podelementy kolumna jest zestaw wartości null.Wartości atrybutów podelementy następnie są ignorowane.

  • Wiele podelementy, które mają taką samą nazwę zwracana jest pierwszy węzeł.