Megosztás a következőn keresztül:


EXPLICIT mód használata az XML-lel

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A cikkben leírtaknak megfelelően XML létrehozása XML-, RAW és AUTO módban nem biztosít nagy vezérlést a lekérdezési eredményből létrehozott XML alakjára. Az EXPLICIT mód azonban a legrugalmasabban hozza létre a lekérdezési eredményből a kívánt XML-t.

Az EXPLICIT módú lekérdezést meghatározott módon kell megírni, hogy a lekérdezés részeként explicit módon meg legyen adva a szükséges XML-ről szóló további információ, például a várt beágyazás az XML-ben. A kért XML-fájltól függően az EXPLICIT módú lekérdezések írása nehézkes lehet. Előfordulhat, hogy A PATH módú beágyazással való használata egyszerűbb alternatíva az EXPLICIT módú lekérdezések írásához.

Mivel explicit módban írja le a lekérdezés részeként használni kívánt XML-t, gondoskodnia kell arról, hogy a létrehozott XML megfelelően formázott és érvényes legyen.

Sorhalmaz feldolgozása EXPLICIT módban

Az EXPLICIT mód xml-dokumentummá alakítja a lekérdezés végrehajtásából származó sorhalmazt. Ahhoz, hogy az EXPLICIT mód létrehozhassa az XML-dokumentumot, a sorhalmaznak egy adott formátummal kell rendelkeznie. Ehhez meg kell írnia a SELECT lekérdezést, hogy létrehozhassa a sorkészletet, az univerzális táblaegy adott formátummal, hogy a feldolgozási logika ezután létrehozhassa a kívánt XML-t.

Először a lekérdezésnek a következő két metaadatoszlopot kell létrehoznia:

  • Az első oszlopnak meg kell adnia az aktuális elem címkeszámát, amely egész szám típusú, és az oszlop nevének Címke-nek kell lennie. A lekérdezésnek egyedi címkeszámot kell megadnia minden olyan elemhez, amely a sorkészletből lesz létrehozva.

  • A második oszlopnak meg kell adnia a szülőelem címkeszámát, és ennek az oszlopnak a neve Szülőkell lennie. Ily módon a Címke és a Szülő oszlop hierarchiainformációkat ad meg.

Ezek a metaadat-oszlopértékek és az oszlopnevekben szereplő információk a kívánt XML előállítására szolgálnak. A lekérdezésnek adott módon kell megadnia az oszlopneveket. Azt is vegye figyelembe, hogy a Szülő oszlopban lévő 0 vagy NULL érték azt jelzi, hogy a megfelelő elemnek nincs szülője. Az elem legfelső szintű elemként lesz hozzáadva az XML-hez.

Annak megértéséhez, hogy a lekérdezés által létrehozott univerzális tábla hogyan lesz feldolgozva XML-eredmény előállítására, tegyük fel, hogy egy olyan lekérdezést írt, amely létrehozza ezt az univerzális táblát:

univerzális táblaminta.

Jegyezze fel a következőket az univerzális tábláról:

  • Az első két oszlop a Címke és a Szülő, ezek metaoszlopok. Ezek az értékek határozzák meg a hierarchiát.

  • Az oszlopnevek bizonyos módon vannak megadva, a cikk későbbi részében leírtak szerint.

  • Az XML ezen univerzális táblából való létrehozása során a tábla adatai függőlegesen oszlopcsoportokra particionálva lesznek. A csoportosítás a Címke érték és az oszlopnevek alapján van meghatározva. Az XML létrehozásakor a feldolgozási logika minden sorhoz kiválaszt egy oszlopcsoportot, és létrehoz egy elemet. Ebben a példában a következők érvényesek:

    • Ha Címke oszlop értéke 1 az első sorban, azok az oszlopok, amelyeknek a neve ugyanazzal a címkeszámmal rendelkezik, Customer!1!cid és Customer!1!name, csoportot alkotnak. Ezek az oszlopok használhatók a sor feldolgozásához, és előfordulhat, hogy észrevette, hogy a létrehozott elem alakja <Customer id=... name=...>. Az oszlopnév formátumát a cikk későbbi részében ismertetjük.

    • Az Címkével 2 oszlopértékkel rendelkező sorok esetében az oszlopok Order!2!id és Order!2!date egy csoportot alkotnak, amelyet aztán az elemek létrehozásához használnak, <Order id=... date=... />.

    • A Címkével 3 oszlopértékkel rendelkező sorok esetében az oszlopok OrderDetail!3!id!id és OrderDetail!3!pid!idref alkotnak csoportot. Ezek a sorok létrehoznak egy elemet, <OrderDetail id=... pid=...>ezekből az oszlopokból.

  • Az XML-hierarchia létrehozásakor a sorok feldolgozása sorrendben történik. Az XML-hierarchia az alábbiak szerint van meghatározva:

    • Az első sor megadja a címke 1 értéket és a szülő null értéket. Ezért a megfelelő elem, <Customer> elem az XML legfelső szintű elemeként lesz hozzáadva.

      <Customer cid="C1" name="Janine">
      
    • A második sor azonosítja a címke értékét, ami 2, és a szülő értékét, ami 1. Ezért az <Order> elemet a <Customer> elem gyermekelemeként hozzáadják.

      <Customer cid="C1" name="Janine">
         <Order id="O1" date="1/20/1996">
      
    • A következő két sor a címke értékét azonosítja, ami 3, és a szülő értékét, ami 2. Ezért a két elem, <OrderDetail> elem a <Order> elem gyermekeiként lesz hozzáadva.

      <Customer cid="C1" name="Janine">
         <Order id="O1" date="1/20/1996">
            <OrderDetail id="OD1" pid="P1"/>
            <OrderDetail id="OD2" pid="P2"/>
      
    • Az utolsó sor a 2-t a címke számként, az 1-et pedig a Szülő címkeszámként azonosítja. Ezért a rendszer hozzáad egy másik <Order> elemet a <Customer> szülőelemhez.

      <Customer cid="C1" name="Janine">
         <Order id="O1" date="1/20/1996">
            <OrderDetail id="OD1" pid="P1"/>
            <OrderDetail id="OD2" pid="P2"/>
         </Order>
         <Order id="O2" date="3/29/1997">
      </Customer>
      

Összefoglalva, a Címke és Szülő metaoszlopok értékei, az oszlopnevekben megadott információk és a sorok helyes sorrendje adja meg a explicit mód használatakor használni kívánt XML-értéket.

Univerzális táblázatsorsorrend

Az XML létrehozásakor az univerzális tábla sorait a rendszer sorrendben dolgozza fel. Ezért a szülőhöz társított helyes gyermekpéldányok lekéréséhez a sorhalmaz sorait úgy kell rendezni, hogy minden szülőcsomópontot azonnal kövessék a gyermekei.

Oszlopnevek megadása univerzális táblában

EXPLICIT módú lekérdezések írásakor az eredményül kapott sorhalmaz oszlopnevét ezzel a formátummal kell megadni. Ezek átalakítási információkat nyújtanak, beleértve az elemek és attribútumok nevét, valamint az irányelvek által meghatározott egyéb információkat.

Ez az általános formátum:

ElementName!TagNumber!AttributeName!Directive

Az alábbiakban a formátum részeinek leírása látható.

  • ElementName

    Az elem eredményként kapott általános azonosítója. Ha például ÜgyfelekElementNameként van megadva, a <Customers> elem generálódik.

  • TagNumber

    Egy elemhez rendelt egyedi címkeérték. Ez az érték a két metaadatoszlop, Címke és Szülősegítségével határozza meg az elemek beágyazását az eredményként kapott XML-fájlban.

  • AttributeName

    Az attribútum nevét adja meg, amelyet a megadott ElementName-ben fog felépíteni. Ez a viselkedés, ha nincs megadva irányelv.

    Ha irányelv van megadva, és xml, cdatavagy elem, akkor ez az érték ElementNameelem gyermekelemének létrehozására szolgál, és hozzáadja az oszlop értékét.

    Ha megadja a irányelv, a AttributeName üres lehet. Például: ElementName! TagNumber!! Irányelv. Ebben az esetben az oszlop értékét közvetlenül az ElementNametartalmazza.

  • irányelv

    irányelv nem kötelező, és az XML felépítésére vonatkozó további információk megadására használható. irányelvnek két célja van.

    • Az egyik cél az értékek kódolása ID, IDREF és IDREFS néven. Megadhatja azonosító, IDREFés IDREFS kulcsszavakat irányelvek. Ezek az irányelvek felülírják az attribútumtípusokat. Így dokumentumon belüli hivatkozásokat hozhat létre.

    • Emellett a irányelv használatával jelezheti, hogyan leképezheti a szöveges adatokat XML-re. A elrejthető, elem, elementxsinil, xml, xmltext, és cdata kulcsszavak használhatók irányelvként. A elrejti irányelv elrejti a csomópontot. Ez akkor hasznos, ha csak rendezési célból kér le értékeket, de nem szeretné, hogy az eredményként kapott XML-fájlban jelenjenek meg.

    Az elem irányelv attribútum helyett tartalmazott elemet hoz létre. A tárolt adatok entitásként lesznek kódolva. A < karakter például <lesz. NULL oszlopértékek esetén a rendszer nem hoz létre elemet. Ha null oszlopértékekhez szeretne létrehozni egy elemet, megadhatja az elementxsinil direktívát. Ez létrehoz egy elemet, amely xsi:nil=TRUE attribútummal rendelkezik.

    Az xml irányelv megegyezik egy elem irányelvével, azzal a kivételsel, hogy nem történik entitáskódolás. A elem irányelv kombinálható azonosítóval, IDREF, vagy IDREFS, míg az xml irányelv más irányelvvel nem engedélyezett, kivéve elrejt.

    A cdata irányelv egy CDATA-szakaszba csomagolva tartalmazza az adatokat. A tartalom nem entitáskódolt. Az eredeti adattípusnak olyan szövegtípusnak kell lennie, mint például varchar, nvarchar, szövegesvagy ntext. Ez az irányelv csak elrejtéséhez használható. Ezen irányelv használata esetén AttributeName nem adható meg.

    A két csoport közötti irányelvek egyesítése a legtöbb esetben engedélyezett, de az egyesítésük nem engedélyezett.

Ha nincs megadva a irányelv és a AttributeName, például a Customer!1esetében, akkor egy elem irányelv lesz érvényben, mint például a Ügyfél!1!!elem, és az oszlopadatok a ElementName-ben kerülnek tárolásra.

Ha az xmltext irányelv van megadva, az oszlop tartalma egyetlen címkébe van csomagolva, amely a dokumentum többi részével van integrálva. Ez az irányelv hasznos lehet az OPENXML által egy oszlopban tárolt túlcsordulási, nem konzumált, XML-adatok lekérésében. További információ: OPENXML (SQL Server).

Ha AttributeName van megadva, a címke nevét a megadott név váltja fel. Ellenkező esetben az attribútum hozzá lesz fűzve a beágyazó elemek attribútumainak aktuális listájához úgy, hogy a tartalmat az elszigetelés elejére helyezi entitáskódolás nélkül. Az ezen irányelvvel rendelkező oszlopnak szövegtípusnak kell lennie, például varchar, nvarchar, karakter, nchar, szövegesvagy ntext. Ez az irányelv csak elrejtéséhez használható. Ez az irányelv hasznos lehet egy oszlopban tárolt túlcsordulási adatok lekérésében. Ha a tartalom nem megfelelően formázott XML, a viselkedés nincs meghatározva.

Következő lépések

Az alábbi példák az EXPLICIT mód használatát szemléltetik.

Lásd még: