Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Az XML-dokumentumok metaproperty attribútumai olyan attribútumok, amelyek egy XML-elem tulajdonságait írják le, például elem, attribútum vagy bármely más DOM-csomópont. Ezek az attribútumok fizikailag nem léteznek az XML-dokumentum szövegében. Az OPENXML azonban ezeket a metatulajdonságokat minden XML-elemhez biztosítja. Ezek a metatulajdonságok lehetővé teszik az XML-csomópontok olyan információinak kinyerését, mint például a helyi helymeghatározási és névtérinformációk. Ezek az információk a szöveges ábrázolásban láthatónál több részletet tartalmaznak.
Ezek a metatulajdonságok egy OPENXML utasítás soroszlopaihoz képezhetők le a ColPattern paraméter használatával. Az oszlopok azokat a metatulajdonság-értékeket fogják tartalmazni, amelyekhez hozzá vannak rendelve. További információ az OPENXML szintaxisáról: OPENXML (Transact-SQL).
A metaproperty attribútumok eléréséhez egy, az SQL Serverre jellemző névtér van megadva. Ez a névtér urn:schemas-microsoft-com:xml-metaprop lehetővé teszi a felhasználó számára a metaproperty attribútumok elérését. Ha egy OPENXML-lekérdezés eredménye éltábla formátumban van visszaadva, az éltábla minden metaproperty attribútumhoz egy oszlopot tartalmaz, kivéve a xmltext metaproperit.
A metaproperty attribútumok némelyike feldolgozásra szolgál. A xmltext metaproperty attribútum például a túlcsordulás kezelésére szolgál. A túlcsordulás kezelése a fel nem használt, nem feldolgozott adatokra utal a dokumentumban. Az OPENXML által létrehozott sorkészlet egyik oszlopa túlcsordulási oszlopként azonosítható. Ezt úgy teheti meg, hogy megfelelteti a xmltext metapropertynek a ColPattern paraméterrel. Az oszlop ezután megkapja a túlcsordulási adatokat. A zászlók paraméter határozza meg, hogy az oszlop tartalmaz-e mindent, vagy csak a fel nem használt adatokat.
Az alábbi táblázat felsorolja azokat a metaproperty attribútumokat, amelyekkel az egyes elemzett XML-elemek rendelkeznek. Ezek a metaproperty attribútumok a névtér urn:schemas-microsoft-com:xml-metaprophasználatával érhetők el. A rendszer figyelmen kívül hagyja azokat az értékeket, amelyeket a felhasználó közvetlenül az XML-dokumentumban a metaproperties használatával állít be.
Jegyzet
Ezekre a metaproperties-okra semmilyen XPath-navigációban nem hivatkozhat.
| Metaproperty attribútum | Leírás |
|---|---|
@mp:id |
A DOM-csomópont rendszer által generált, dokumentumszintű azonosítóját biztosítja. Ha a dokumentum nincs újraelemzés alatt, ez az azonosító ugyanarra az XML-csomópontra hivatkozik. A 0 XML ID azt jelzi, hogy az adott elem gyökérelem. Szülő XML-azonosítója NULL. |
@mp:localname |
A csomópont nevének helyi részét tárolja. Előtaggal és névtér URI-val használják az elem- vagy attribútumcsomópontok elnevezéséhez. |
@mp:namespaceuri |
Az aktuális elem névterének URI-ját adja meg. Ha ennek az attribútumnak az értéke NULL, nincs névtér |
@mp:prefix |
Az aktuális elemnév névtérelőtagját tárolja. Ha nincs előtag (NULL), és URI van megadva, az azt jelzi, hogy a megadott névtér az alapértelmezett névtér. Ha nincs megadva URI, nincs névtér csatolva. |
@mp:prev |
Az előző testvért egy csomóponthoz viszonyítva tárolja. Ez információt nyújt a dokumentum elemeinek sorrendjéről.@mp:prev az előző testvér XML-azonosítóját tartalmazza, amelynek ugyanaz a szülőeleme. Ha egy elem a testvérlista elején található, @mp:prev NULL értékű. |
@mp:xmltext |
Feldolgozás céljából használják. Ez az elem és attribútumai szöveges szerializálása, valamint az alelemek, amelyeket az OPENXML túlcsordulásának kezelése során használnak. |
Ez a táblázat azokat a további szülőtulajdonságokat mutatja be, amelyek lehetővé teszik a hierarchia információinak lekérését.
| Szülő metaproperty attribútum | Leírás |
|---|---|
@mp:parentid |
Megfelel a ../\@mp:id |
@mp:parentlocalname |
Megfelel a ../\@mp:localname |
@mp:parentnamespacerui |
Megfelel a ../\@mp:namespaceuri |
@mp:parentprefix |
Megfelel a ../\@mp:prefix |
Példák
Az alábbi példák azt szemléltetik, hogy az OPENXML hogyan használható különböző sorhalmaznézetek létrehozására.
Egy. Az OPENXML sorhalmaz oszlopainak hozzárendelése a metatulajdonságokhoz
Ez a példa OPENXML használatával hozza létre a minta XML-dokumentum sorhalmaznézetét. Pontosabban azt mutatja be, hogy a különböző metaproperty attribútumok hogyan képezhetők le sorhalmazoszlopokra egy OPENXML-utasításban a ColPattern paraméter használatával.
Az OPENXML utasítás a következőket szemlélteti:
A
idoszlop a@mp:idmetaproperty attribútumra van leképezve, és azt jelzi, hogy az oszlop tartalmazza az elem rendszer által létrehozott egyedi XML-azonosítóját.A
parentoszlop a@mp:parentid-ra van leképezve, és jelzi, hogy az oszlop tartalmazza az elem szülőjének XML-azonosítóját.A
parentLocalNameoszlop a@mp:parentlocalname-hez van hozzárendelve, és jelzi, hogy az oszlop a szülő helyi nevét tartalmazza.
A SELECT utasítás ezután az OPENXML által biztosított sorkészletet adja vissza:
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;
Ez az eredmény:
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. A teljes XML-dokumentum lekérése
Ebben a példában az OPENXML a minta XML-dokumentum egyoszlopos sorhalmaznézetének létrehozására szolgál. Ez az oszlop ( Col1) a xmltext metapropertyre van leképezve, és túlcsordulási oszloptá válik. Ennek eredményeképpen az oszlop megkapja a nem felhasznált adatokat. Ebben az esetben ez a teljes dokumentum.
A SELECT utasítás ezután visszaadja a teljes sorkészletet.
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')
Ha az XML-deklaráció nélkül szeretné lekérni a teljes dokumentumot, a lekérdezés az alábbi módon adható meg:
SELECT *
FROM OPENXML (@idoc, '/root')
WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc;
A lekérdezés visszaadja a 'root' nevű gyökérelemet és azokat az adatokat, amelyeket a gyökérelem tartalmaz.
C. Az xmltext metaproperty megadása az el nem fogyasztott adatok lekéréséhez egy oszlopban
Ez a példa OPENXML használatával hozza létre a minta XML-dokumentum sorhalmaznézetét. A példa bemutatja, hogyan kérhetők le a nem megadott XML-adatok a xmltext metaproperty attribútumnak az OPENXML sorhalmazoszlopára való leképezésével.
A comment oszlop túlcsordulásoszlopként van azonosítva, mivel a @mp:xmltext metatulajdonsághoz van hozzárendelve. A zászlók paramétere 9 értékre van állítva (XML_ATTRIBUTE és XML_NOCOPY). Ez attribute-centric leképezést jelez, és azt jelzi, hogy csak az el nem fogyasztott adatokat kell átmásolni a túlcsordulási oszlopba.
A SELECT utasítás ezután az OPENXML által biztosított sorkészletet adja vissza.
Ebben a példában a @mp:parentlocalname metaproperty az OPENXML által létrehozott sorhalmazban ParentLocalNameoszlophoz van beállítva. Ennek eredményeként ez az oszlop tartalmazza a szülőelem helyi nevét.
A sorkészletben két további oszlop van megadva, parent és comment. A parent oszlop a @mp:parentid-hez van hozzárendelve, és azt jelzi, hogy az oszlop tartalmazza az elem szülőelemének XML-azonosítóját. A megjegyzésoszlopot túlcsordulási oszlopként azonosítja a @mp:xmltext metapropertyhez való leképezésével.
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;
Ez az eredmény. Mivel az oidoszlopok és a dátumoszlopok már használatban vannak, nem jelennek meg a túlcsordulás oszlopban.
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"/>