Crearea schemelor încorporate xsd

În clauza FOR XML, puteți solicita ca interogarea să returneze o schemă încorporată împreună cu rezultatele interogării. Dacă doriți să obțineți o schemă XDR, ar trebui să utilizați cuvântul cheie XMLDATA în clauza FOR XML. Dacă trebuie să obțineți o schemă XSD, atunci ar trebui să utilizați cuvântul cheie XMLSCHEMA.

Această secțiune descrie cuvântul cheie XMLSCHEMA și explică structura schemei XSD încorporate. Următoarele sunt limitările care apar atunci când solicitați scheme încorporate.

Parametrul XMLSCHEMA poate fi setat numai în modurile RAW și AUTO, acest lucru nu se poate face în modul EXPLICIT.

Dacă este definită o directivă TYPE în subdotarea FOR XML, rezultatul interogării va avea tipul de date xml și va fi trecut pentru o instanță de date XML netumite. Pentru mai multe informații, consultați datele XML (SQL Server).

În schema rezultată, pot exista o serie de documente de schemă care descriu diferite spații de nume. Cel puțin următoarele două scheme trebuie returnate.

Un document de schemă pentru spațiul de nume Sqltypes. pentru care sunt returnate tipurile de bază SQL.

Un alt document de schemă care descrie forma rezultatului interogării FOR XML.

În plus, dacă rezultatul interogării include orice tip de date xml. atunci schemele asociate cu aceste tipuri de date xml sunt returnate.

Spațiul de nume al documentului țintă al documentului schemei care descrie formularul de rezultat FOR FORM conține o parte fixă ​​și o parte numerică care este incrementată automat. Formatul acestui spațiu de nume este prezentat mai jos, unde n este un număr întreg pozitiv. De exemplu, în interogarea anterioară, spațiul de nume țintă a fost urn: schemas-microsoft-com: sql: SqlRowSet1.

Modificările din spațiile de nume țintă ca urmare a celor întâmplate între cele două runde pot fi nedorite. De exemplu, dacă se solicită XML-ul rezultat, atunci când schimbați zonele de destinații țintă, trebuie să actualizați interogarea. Dacă este necesar, puteți specifica un spațiu de nume destinație atunci când parametrul XMLSCHEMA este adăugat la clauza FOR XML. XML-ul rezultat va conține spațiul de nume specificat și va rămâne neschimbat indiferent de câte ori interogarea a fost executată.

Deoarece directiva ELEMENTS este adăugată la interogare, rezultatul XML este generat folosind elemente. De asemenea, această solicitare specifică o directivă XMLSCHEMA, astfel încât schema încorporată XSD este returnată. Setul de rezultate:

Rețineți următoarele date din interogarea anterioară.

, și Ele nu sunt elemente ale entității, deoarece sunt cartografiate în coloane. Din cauza directivei ELEMENTS, datele din coloană sunt returnate ca elemente în XML. Acestea sunt mapate la elementele locale ale unui tip de entitate complexă. Rețineți că dacă directiva ELEMENTS nu este specificată, atunci valorile SalesOrderID. ProductID și OrderQty sunt mapate la atributele locale ale tipului de entitate complexă corespunzător.

Următoarele raționamente utilizează tabelele CustOrder și CustOrderDetail. Pentru a testa următoarele mostre, creați aceleași tabele și adăugați propriile date de probă:

Acesta este XML-ul rezultat. Numai o parte din XSD built-in este afișată:

Rețineți următoarele în schema încorporată XSD.

Ambele valori, ListPrice și DealerPrice, au același tip de date, bani. și ambele pot avea valoarea NULL în tabel. Astfel, deoarece ele nu se pot întoarce în XML rezultant, în declararea unui tip de element complex poate exista doar un copil cu parametrii minOccurs = 0 și maxOccurs = 2.

Ca rezultat, deoarece valoarea DealerPrice din tabel este NULL, ca element numai valoarea ListPrice este returnată. Când adăugați parametrul XSINIL la directiva ELEMENTS, vor fi primite ambele elemente cu valoarea xsi: nil. egal cu TRUE, pentru element , DealerPrice corespunzătoare. De asemenea, doi copii vor fi primiți în definirea unui tip complex în schema încorporată XSD. Pentru ambele, atributul "nillable" va fi setat la TRUE. Acesta este un rezultat intermediar:

Cazul 2. O coloană cheie și o coloană non-cheie de același tip

Următoarea interogare conține o coloană cheie și o coloană non-cheie de același tip.

Rezultatul. Numai o parte din schema încorporată XSD este afișată:

Rețineți că în schema încorporată XSD elementul corespunde coloanei Col2 cu parametrul minOccurs egal cu 0.

Cazul 3. Ambele elemente de diferite tipuri și coloanele corespunzătoare pot fi NULL

Pentru cazul 2, următoarea interogare este dată în raport cu tabelul de eșantionare:

În această interogare, Col2 și Col3 au aceleași pseudonime. Aceasta duce la apariția a două elemente cu același nume, care sunt elementele copilului elementului ca rezultat. Ambele coloane aparțin unor tipuri diferite și pot fi NULL. Rezultatul. Este afișată doar o parte din schema XSD încorporată.

IgnoreKanaType IgnoreWidth "sqltypes: sqlSortId =" 52 ">

Rețineți următoarele în schema încorporată XSD.

Ca rezultat, fiecare instanță a unui element se referă la tipul de instanță utilizând atributul xsi: type.

Articole similare