Angeben von Metaeigenschaften in OPENXML
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Metaeigenschaftsattribute in einem XML-Dokument sind Attribute, die die Eigenschaften eines XML-Objekts (z. B. Element, Attribut oder ein beliebiger anderer DOM-Knoten) beschreiben. Diese Attribute sind im XML-Dokumenttext nicht physisch vorhanden. Vielmehr stellt OPENXML diese Metaeigenschaften für alle XML-Objekte bereit. Die Metaeigenschaften ermöglichen es Ihnen, Informationen (wie etwa die relative Position oder Namespaceinformationen) über XML-Knoten zu extrahieren. Diese Informationen bieten Ihnen mehr Details, als in der Textdarstellung zu sehen sind.
Sie können diese Metaeigenschaften Rowsetspalten in einer OPENXML-Anweisung mithilfe des ColPattern -Parameters zuordnen. Die Spalten enthalten die Werte der Metaeigenschaften, denen sie zugeordnet sind. Weitere Informationen zur Syntax von OPENXML finden Sie unter OPENXML (Transact-SQL).For more information about the syntax of OPENXML, see OPENXML (Transact-SQL).
Für den Zugriff auf die Metaeigenschaftsattribute wird ein für SQL Server spezifischer Namespace bereitgestellt. Dieser Namespace ermöglicht es dem Benutzer, urn:schemas-microsoft-com:xml-metaprop
auf die Metaeigenschaftsattribute zuzugreifen. Wenn das Ergebnis einer OPENXML-Abfrage in einem Randtabellenformat zurückgegeben wird, enthält die Randtabelle eine Spalte für jedes Metaproperty-Attribut, mit Ausnahme der xmltext
Metaeigenschaft.
Einige der Metaeigenschaftsattribute werden zu Verarbeitungszwecken eingesetzt. Beispielsweise wird das xmltext
Metaproperty-Attribut für die Überlaufbehandlung verwendet. Die Bearbeitung von Überlaufdaten bezieht sich auf nicht verbrauchte, unverarbeitete Daten im Dokument. Eine der Spalten im von OPENXML generierten Rowset kann als Überlaufspalte identifiziert werden. Dies geschieht, indem Sie sie der xmltext
Metaeigenschaft mithilfe des ColPattern-Parameters zuordnen. Die Spalte nimmt dann die Überlaufdaten auf. Der flags -Parameter bestimmt, ob die Spalte ausschließlich nicht verbrauchte Daten oder alle Daten enthalten soll.
In der folgenden Tabelle werden die Metaeigenschaftsattribute für jedes analysierte XML-Element aufgeführt. Auf diese Metaeigenschaftsattribute kann mithilfe des Namespace urn:schemas-microsoft-com:xml-metaprop
zugegriffen werden. Jeder Wert, der direkt vom Benutzer im XML-Dokument mithilfe dieser Metaeigenschaften festgelegt wird, bleibt unberücksichtigt.
Hinweis
Sie können in XPath-Navigationen nicht auf diese Metaeigenschaften verweisen.
Metaeigenschaftsattribut | Beschreibung |
---|---|
@mp:id |
Stellt einen systemgenerierten, dokumentweiten Bezeichner des DOM-Knotens bereit. Solange das Dokument nicht analysiert wird, bezieht sich diese ID auf denselben XML-Knoten. Eine XML-ID von 0 gibt an, dass das Element ein Stammelement ist. Die übergeordnete XML-ID ist NULL. |
@mp:localname |
Speichert den lokalen Teil des Knotennamens. Die Metaeigenschaft wird mit einem Präfix und einem Namespace-URI (Uniform Resource Identifier) zur Benennung von Element- oder Attributknoten verwendet. |
@mp:namespaceuri |
Gibt den Namespace-URI des aktuellen Elements an. Ist der Wert dieses Attributs NULL, ist kein Namespace vorhanden. |
@mp:prefix |
Speichert das Namespacepräfix des aktuellen Elementnamens. Wenn kein Präfix vorhanden ist (NULL) und ein URI angegeben ist, zeigt dieses Attribut an, dass der angegebene Namespace der Standardnamespace ist. Ist kein URI angegeben, wird kein Namespace angefügt. |
@mp:prev |
Speichert das vorhergehende gleichgeordnete Objekt eines Knotens. Dadurch werden Informationen über die Reihenfolge der Elemente im Dokument bereitgestellt.@mp:prev enthält die XML-ID des vorhergehenden gleichgeordneten Objekts, das über dasselbe übergeordnete Element verfügt. Wird ein Element am Anfang der Liste der gleichgeordneten Objekte aufgeführt, ist @mp:prev gleich NULL. |
@mp:xmltext |
Wird zu Verarbeitungszwecken genutzt. Legt die Textserialisierung des Elements und der zugehörigen Attribute und auch die Teilelemente fest, wie dies bei der Überlaufbearbeitung von OPENXML der Fall ist. |
In dieser Tabelle werden die zusätzlichen Eigenschaften übergeordneter Metaeigenschaftsattribute dargestellt, die Ihnen das Abrufen von Hierarchieinformationen ermöglichen.
Übergeordnetes Metaeigenschaftsattribut | Beschreibung |
---|---|
@mp:parentid |
Entspricht ../\@mp:id |
@mp:parentlocalname |
Entspricht ../\@mp:localname |
@mp:parentnamespacerui |
Entspricht ../\@mp:namespaceuri |
@mp:parentprefix |
Entspricht ../\@mp:prefix |
Beispiele
In den folgenden Beispielen wird die Verwendung von OPENXML zum Erstellen unterschiedlicher Rowsetsichten veranschaulicht.
A. Zuordnen der OPENXML-Rowsetspalten zu den Metaeigenschaften
In diesem Beispiel wird OPENXML zum Erstellen einer Rowsetsicht des XML-Beispieldokuments verwendet. Es veranschaulicht das Zuordnen verschiedener Metaeigenschaftsattribute zu Rowsetspalten in der OPENXML-Anweisung mithilfe des ColPattern -Parameters.
Die OPENXML-Anweisung verdeutlicht Folgendes:
Die
id
Spalte wird dem@mp:id
Metaproperty-Attribut zugeordnet und gibt an, dass die Spalte die vom System generierte eindeutige XML-ID des Elements enthält.Die
parent
Spalte ist zugeordnet@mp:parentid
und gibt an, dass die Spalte die XML-ID des übergeordneten Elements enthält.Die
parentLocalName
Spalte ist zugeordnet@mp:parentlocalname
und gibt an, dass die Spalte den lokalen Namen des übergeordneten Elements enthält.
Schließlich gibt die SELECT-Anweisung das von OPENXML bereitgestellte Rowset zurück.
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;
Dies ist das Ergebnis:
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. Abrufen des gesamten XML-Dokuments
In diesem Beispiel wird mithilfe von OPENXML eine einspaltige Rowsetsicht des XML-Beispieldokuments erstellt. Diese Spalte Col1
ist der xmltext
Metaeigenschaft zugeordnet und wird zu einer Überlaufspalte. Deshalb nimmt die Spalte die nicht verbrauchten Daten auf. In diesem Fall ist es das gesamte Dokument.
Schließlich gibt die SELECT-Anweisung das vollständige Rowset zurück.
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')
Um das gesamte Dokument ohne die XML-Deklaration abzurufen, kann die Abfrage wie folgt angegeben werden:
SELECT *
FROM OPENXML (@idoc, '/root')
WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc;
Die Abfrage gibt das Stammelement mit dem Namensstammverzeichnis sowie die Daten des Stammelements zurück.
C. Angeben der xmltext-Metaeigenschaft zur Abfrage der nicht verbrauchten Daten in einer Spalte
In diesem Beispiel wird OPENXML zum Erstellen einer Rowsetsicht des XML-Beispieldokuments verwendet. Das Beispiel zeigt, wie unkonsumierte XML-Daten abgerufen werden, indem das xmltext
Metaproperty-Attribut einer Rowsetspalte in OPENXML zugeordnet wird.
Die comment
Spalte wird als Überlaufspalte identifiziert, indem sie der @mp:xmltext
Metaeigenschaft zugeordnet wird. Der Flags-Parameter ist auf 9
(XML_ATTRIBUTE und XML_NOCOPY) festgelegt. Dies gibt die attribute-centric
Zuordnung an und gibt an, dass nur die nicht fortgesetzten Daten in die Überlaufspalte kopiert werden sollen.
Schließlich gibt die SELECT-Anweisung das von OPENXML bereitgestellte Rowset zurück.
In diesem Beispiel wird die @mp:parentlocalname
Metaeigenschaft für eine Spalte im ParentLocalName
von OPENXML generierten Rowset festgelegt. Folglich enthält diese Spalte den lokalen Namen des übergeordneten Elements.
Zwei zusätzliche Spalten werden im Rowset angegeben, parent
und comment
. Die parent
Spalte ist zugeordnet @mp:parentid
und gibt an, dass die Spalte die XML-ID des übergeordneten Elements des Elements enthält. Die comment-Spalte wird als Überlaufspalte durch Zuordnen zur @mp:xmltext
-Metaeigenschaft).
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;
Dies ist das Ergebnis. Da die Oidspalten und Datumsspalten bereits genutzt werden, werden sie nicht in der Überlaufspalte angezeigt.
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"/>
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für