Exemple de fișiere xml cu 440 de articole Exemplu de schemă XML. XML Schema este un standard industrial pentru descrierea documentelor XML

Uneori înțelegerea fișierului XML trimis la camera cadastrală este pur și simplu necesară atunci când simți că ceva trebuie corectat undeva, iar mulți oameni au o curiozitate firească dezvoltată. Dar... Important. Rețineți că după semnarea fișierului de semnătură digitală, nu puteți edita fișierul XML! Ca exemplu din practică, atunci când împarte o parcelă în 300 de unități de memorie, o fată a șters accidental doar o linie din adresa uneia dintre parcele. Și asta e tot... Fișierul XML nu a trecut verificarea. Căutarea prin toate intrările din program mi s-a părut plictisitoare, mai ales că știam ce să caut. După ce am deschis fișierul XLM în editorul de testare prin căutare, am găsit linia necesară și am făcut modificări. Dar din nou, repet - dacă ați editat fișierul, atunci trebuie să-l resemnați cu semnătura digitală. Asadar, haideti sa începem. Voi prezenta desene și voi scrie descrieri pentru ele.

Și încă o retragere, pentru editarea și vizualizarea comodă a fișierelor XML Recomand folosirea programului. Vă va permite să vedeți structura fișierului și să îl colorați convenabil după valori. De exemplu, voi lua un suport electric pentru prosoape încălzit pentru baie, bine, bineînțeles, nu al lui -), ci un fișier XML pentru formarea a 2 unități de memorie prin alocarea unei cote din dreptul de proprietate comună unei memorie. dispozitiv cu număr cadastral...
Ca exemplu, voi arăta mai întâi o imagine a unui fișier XML restrâns cu un bloc restrâns.

Deci, judecând după contorul de linii situat în stânga, avem un fișier de 336 de rânduri. După cum se vede din figură, blocul Restrâns, pictograma plus din dreapta. Prin urmare, voi descrie mai întâi rând cu linie ceea ce este vizibil din această figură, apoi vom analiza blocurile incluse în bloc Pentru că este cel mai voluminos.

Nu vom lua în considerare întregul fișier linie cu linie, ci vom lua în considerare doar acele linii în care sunt introduse datele noastre.

3 rând : CodeType="014″ – tip de muncă, sunt doar două, ca în cazul nostru – educație și „015” – clarificare. Versiune=”03″ – versiunea fișierului XML. GUID (Globally Unique Identifier) ​​este un identificator unic statistic de 128 de biți; în cazul nostru, numele fișierului trebuie să se potrivească cu acest indicator.
4 linii : Date de la organizația în care lucrează inginerul cadastral sau date de la inginerul cadastral însuși.
5 rând : Codul organizației destinatare, în acest caz Oficiul Serviciului Federal pentru Înregistrarea de Stat, Cadastru și Cartografie pentru Republica Tatarstan.

Acum să mergem imediat la sfârșitul fișierului, pe baza figurii prezentate, și să ne uităm la bloc . In acest bloc se trec informatii despre inginerul cadastral care a efectuat lucrarea. Urmează blocul în care se încadrează sistemul de coordonate. Apropo "în valorile text ale unui fișier, acestea sunt indicate prin ghilimele.

În principiu, deschizând un fișier în Notepad++, întreaga structură a fișierului XML devine clară. – Locație – conține adresa. Valoare în scris atunci când o parte din adresa lipsește din KLADR.

Un exemplu de fișier XML de hartă de plan generat în produsul software de plan Polygon Map

Pentru a vizualiza acest fragment mai clar, copiați-l și vizualizați-l în editorul de testare Notepad++, pe care îl puteți descărca din secțiunea

Confundând mijloacele cu scopul, oamenii devin dezamăgiți de ei înșiși și de ceilalți, în urma căruia nu iese nimic din toate activitățile lor sau iese opusul pentru care s-au străduit.I. Goethe

Acest capitol vă va arăta cum să scrieți scheme XML. Veți învăța, de asemenea, că diagramele pot fi scrise în diferite moduri.

document XML

Să ne uităm la următorul document XML numit „shiporder.xml”:

John Smith Ola Nordmann

Langgt 23
4000 Stavanger Norvegia Empire Burlesque Ediție specială 1 10.90 Ascunde-ți inima 1 9.90

Documentul XML de mai sus constă dintr-un element rădăcină comandă navală cu atributul cerut Comanda ID . Element comandă navală conține trei elemente copil: ordonator, îmbarca spreȘi articol. Element articol este folosit de două ori și conține elementul titlu, element optional Notă, precum și elemente cantitateȘi Preț.

Linia xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" spune parserului XML că acest document ar trebui verificat cu schema. Linia xsi:noNamespaceSchemaLocation="shiporder.xsd" indică unde exact se află schema (în acest caz se află în același folder cu fișierul „shiporder.xml”).

Crearea unei scheme XML

Acum să creăm o schemă XML pentru documentul XML de mai sus.

Să creăm un fișier nou, pe care îl vom numi „shiporder.xsd”. Pentru a crea o schemă XML, vom urmări pur și simplu structura documentului XML și vom defini fiecare element pe care îl întâlnim. Să începem cu o declarație standard XML, urmată de o descriere a elementului xs:schema , care definește schema în sine:

...

Aici folosim spațiul de nume standard ( xs ) și URI-ul asociat cu acel spațiu de nume, care are semnificația standard http://www.w3.org/2001/XMLSchema .

Acum trebuie să definim elementul comandă navală. Acest element are un atribut și conține alte elemente, așa că îl tratăm ca pe un element de tip compozit. Definițiile elementului element copil comandă navală o vom pune în declarație xs:secvență , care specifică o succesiune rigidă de subelemente:

...

Acum să definim elementul ordonator, care va fi de tip simplu (de vreme ce nu conține atribute sau alte elemente). Tipul său ( xs:șir ) este prefixat cu spațiul de nume asociat cu schema XML, care indică utilizarea unui tip de date predefinit:

Acum trebuie să definim: îmbarca spreȘi articol. Să începem cu definiția elementului îmbarca spre:

Cu ajutorul diagramelor putem identifica orice element. Atributele ne vor ajuta în acest sens maxApare Și minApare . Atribut maxApare specifică numărul maxim de apariții ale unui element și atributul minApare specifică numărul minim de apariții. Valoarea implicită pentru ambele atribute este 1.

Acum să definim elementul articol. Acest element poate fi folosit de un număr nelimitat de ori în cadrul unui element comandă navală. Determinați o astfel de caracteristică a unui element articol permite atribuirea unui atribut maxApare valorile "nelegat" . Aceasta înseamnă că elementul articol poate fi folosit de câte ori are nevoie autorul documentului. Vă rugăm să rețineți că elementul Notă opțional. Să definim acest lucru setând atributul minApare la valoarea zero:

Acum putem declara atributul elementului comandă navală. Deoarece acesta este un atribut obligatoriu, folosim definiția foloseste="necesar" .

Notă: Atributele trebuie întotdeauna declarate ultimele:

Iată codul complet pentru fișierul de schemă „shiporder.xsd”:

Diviziune schema

Metoda anterioară de aranjare a unei diagrame este foarte simplă, totuși, atunci când documentul este destul de complex, cu această metodă diagrama corespunzătoare se poate dovedi a fi destul de greoaie, ceea ce va afecta foarte mult ușurința citirii și întreținerii acestuia.

Următorul mod de a pune o diagramă este să definiți mai întâi toate elementele și atributele, apoi să faceți legătura la aceste definiții folosind atributul ref .

Mai jos este noul aspect al fișierului schematic ("shiporder.xsd"):

Utilizarea tipurilor denumite

Un al treilea mod de a dispune o diagramă implică definirea de clase sau tipuri care permit reutilizarea definițiilor de elemente. Acest lucru devine posibil dând nume elementelor simpleTypes Și complexTypes , apoi indicați-le folosind atributul tip .

A treia modalitate de a dispune fișierul schematic ("shiporder.xsd"):

Element restricţie indică faptul că tipul de date este derivat din tipurile de date din spațiul de nume W3C XML Schema. Prin urmare, următorul fragment de cod înseamnă că valoarea elementului sau a atributului trebuie să fie un șir:

Cu toate acestea, mult mai des elementul restricţie folosit pentru a pune restricții asupra elementelor. Priviți următoarele rânduri din diagrama de mai sus:

Acest fragment de cod specifică faptul că valoarea unui element sau a unui atribut trebuie să fie un șir, cu exact șase caractere lungime, iar acele caractere trebuie să fie numerele de la 0 la 9.

1. Introducere

Dacă vreunul dintre voi a încercat vreodată să învețe XML pe cont propriu, este posibil să fi întâlnit multe dintre aceleași concepte confuze pe care le-am întâlnit și eu în trecut. DTD, XML Schema, namespaces, XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP, renunț. Voi adăuga doar că majoritatea acestor materiale se bazează pe implementări, al căror cod poate conține erori. Probabil că există milioane de moduri de implementare și utilizare XML, dar toate pot fi destul de complexe. Și știi, XML poate fi foarte simplu. Dacă uităm de DTD, Schemele XML, spațiile de nume etc.
În efortul de a vă învăța rapid cum să lucrați cu XML, voi ignora, dacă este posibil, o cantitate decentă de informații pe care le puteți citi deja în literatura relevantă. Și primul lucru pe care îl voi ignora sunt spațiile de nume și schemele. Acest lucru ți se poate părea ciudat, deoarece majoritatea cărților încep prin a explica aceste concepte, dar încearcă să te gândești la XML ca la un mijloc de a rezolva o problemă specifică, cum ar fi un ciocan. Chiar trebuie să știi cum să construiești o casă pentru a folosi un ciocan? Și dacă tot ce am nevoie este să dau un cui pentru a agăța o poză? La fel este și cu XML, poate fi foarte complex, suficient de generic pentru a fi folosit în sute dacă nu mii de aplicații și foarte simplu dacă nu ești atent la câteva lucruri. În acest articol, mă voi concentra pe rezolvarea unor probleme specifice folosind XML.
Deci, care este mai exact problema? Să presupunem că vreau să descriu un obiect simplu, cum ar fi un pahar, folosind XML. De ce voi folosi XML pentru asta? Ei bine, în primul rând, pentru asta este conceput XML. XML descrie datele. În exemplul meu, sticla sunt datele. În viața reală, datele pot fi documente Word, foi de calcul, imagini, o carte, o înregistrare de bază de date sau chiar clase C++ sau Visual Basic. În al doilea rând, XML este extensibil. XML-ul îmi permite să creez cât mai multe caracteristici necesare pentru a descrie datele, iar aceste caracteristici vor fi orice vreau. Și în sfârșit, pentru că XML devine rapid un standard. Dacă există viață pe Marte, atunci poți fi sigur că ei vor putea înțelege fișierul meu XML de acolo.

Ce proprietăți de bază ne permit să descriem un pahar?

Cum ar arăta același lucru în format XML?

sticlă 6 16 cub de gheata paie apă da

Observați că prima linie a fișierului () are un aspect special pentru moment, amintiți-vă doar că ar trebui să fie aici. Frumusețea formatului XML constă în faptul că oricine poate înțelege ce spune doar privind îndeaproape. De asemenea, este clar că aceasta nu este singura descriere XML posibilă a sticlei. Dacă cer 10 persoane să dezvolte o descriere XML a unui pahar cu aceleași proprietăți, probabil că toți vor crea descrieri diferite, dar corecte. Aici se află problema. Poate că nu pentru noi, oamenii, dar atunci când un computer citește un fișier XML, ar fi o idee grozavă să-i spunem despre ce este fișierul. Aici intervin spațiile de nume și schemele. Mai simplu spus, schemele sunt folosite pentru a defini o structură adecvată pentru un fișier XML.
Acum este timpul să vorbim despre câteva reguli XML simple pe care trebuie să le urmați:

Regula XML #1: Un fișier XML valid trebuie să se potrivească exact cu schema sa. Dar pentru a înțelege mai ușor materialul, niciunul dintre exemplele mele nu va folosi diagrame. Deci, strict vorbind, niciunul dintre exemplele mele nu este „adecvat”. Dar sincer, nu-mi pasă. Nu voi construi o casă, trebuie doar să atârn o poză. Voi vorbi mai multe despre asta mai târziu, când vom discuta despre Modelul obiect al documentului XML.

Regula XML #2 Notă: Dacă programați în VB, rețineți: XML este sensibil la majuscule și minuscule. XML este sensibil la majuscule. XML este sensibil la majuscule. XML este sensibil la majuscule. Scrie această propoziție de 1000 de ori și nu vei uita niciodată.

Regula XML #3: Etichetele sunt de obicei numite elemente și fiecare etichetă de deschidere trebuie să aibă o etichetă de închidere corespunzătoare. Urmând această regulă, veți obține un fișier XML corect. Acest lucru este foarte important deoarece până când fișierul XML nu este formatat corect, acesta nu va fi analizat și încărcat în Modelul obiect document. Rețineți că, dacă elementul nu conține valori și nu conține alte elemente (imbricate), eticheta de închidere poate arăta ca în loc de un design mai voluminos . Puteți vedea această abordare în exemplul anterior ( ).

Regula XML #4: Elementele pot conține atribute, iar valorile atributelor trebuie să fie cuprinse între ghilimele (single sau duble).

Regula XML #5: Puteți utiliza numele atributelor de mai multe ori, dar numele elementelor trebuie să fie unice în întregul fișier. În exemplul anterior, atributul qty avea un sens diferit în funcție de elementul în care a fost folosit ,, sau . Semnificația unui atribut depinde de contextul utilizării acestuia. În timp ce valoarea unui element înseamnă întotdeauna același lucru, indiferent de locul în care se află atributul din fișier. În exemplul anterior, elementul Și are întotdeauna aceeași semnificație în documentul nostru. de exemplu, întotdeauna folosit pentru a descrie înălțimea unui pahar.

Regula XML #6: Există mai multe caractere speciale în XML care nu pot fi folosite direct deoarece sunt rezervate în sintaxa XML. Prin urmare, pentru a folosi astfel de caractere, va trebui să utilizați o construcție rezervată care începe cu caracterul & și un cod special, (caracterul & trebuie scris ca &) (caracterul „trebuie scris ca”) (caracterul< должен писаться как <) (символ >trebuie scris ca >) și (simbolul " trebuie scris ca "). În schimb, puteți folosi și instrucțiunile, unde „....” poate fi orice succesiune de caractere, cu excepția „]]>”. Această construcție poate apărea oriunde, dar nu poate fi imbricată.

2. XML Document Object Model

Modelul obiect de document XML permite programatorilor să încarce conținutul unui fișier XML în memorie. Odată ce un fișier XML este încărcat în acest mod, acesta poate fi manipulat utilizând proprietățile, metodele și evenimentele modelului obiect document. Aici este locul în care XML este util. Modelul obiect document facilitează foarte mult regăsirea și procesarea informațiilor fișierului XML. Nu voi vorbi aici despre toate capacitățile modelului obiect document; voi vorbi doar despre câteva dintre caracteristicile principale care vor ajuta la atingerea scopului acestui articol. Voi lua fișierul XML pe care tocmai l-am creat pentru a descrie sticla, îl voi încărca în Document Object Model și voi face câteva lucruri cu el. Voi salva caracteristicile și capabilitățile rămase ale modelului obiect document pentru următorul articol, care vorbește despre client XML. Rețineți că, deși modelul obiect document este foarte bun și convenabil pentru dezvoltatori, necesită o cantitate destul de semnificativă de resurse de sistem. Prin urmare, există o altă metodă de analizare a fișierelor XML, cunoscută sub numele de SAX. Articolul meu nu pretinde a fi o sursă exhaustivă de informații despre această problemă, așa că ar fi util să folosiți și SDK-ul XML.

Să ne uităm la un exemplu de utilizare a parserului XML Microsoft versiunea 3.0 (msxml3.dll) pentru a înțelege cum funcționează totul. Dacă nu aveți un analizor, cea mai recentă versiune poate fi descărcată de pe site-ul Microsoft.
Să presupunem că am salvat un exemplu de descriere a unei cupe în format XML în fișierul „http://web_server/xml/cup.xml” (cale locală C:\inetpub\wwwroot\xml\cup.xml) și acum vreau să încărcați-l în modelul obiect al documentului. Următorul cod presupune că analizorul este deja încărcat și rulează.

Cod Visual Basic 6.0:(stabiliți conexiunea cu Microsoft XML, v3.0) Dim xmlDoc ca MSXML2.DOMDocument30 Set xmlDoc = New DOMDocument30 xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.load ("c:\inetpub\wwwroot\xml\cup.xml" ) msgBox xmlDoc.xml Codul ASP pe partea de server în Visual Basic: Dim xmlDoc Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0") xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.load "/xml/cup.xml" Codul ASP pe partea de server în Script Java: var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = false; xmlDoc.validateOnParse = fals; xmlDoc.load("/xml/cup.xml");

Explicația codului de mai sus - să trecem prin codul VB6

Linia 1: Dim xmlDoc ca MSXML2.DOMDocument30

În această primă linie definim o referință la „Microsoft XML, v3.0”. În această linie am definit variabila xmlDoc ca referință la documentul XML. MSXML2 este o bibliotecă (folosește acel nume, nu încercați să scrieți MSXML3, nu va funcționa). DOMDocument30 definește un obiect de document XML corespunzător versiunii 3.0. Este posibil să vedeți și acest cod: dim xmlDoc ca MSXML2.DOMDocument. Această construcție este de obicei folosită atunci când nu doriți să specificați o anumită versiune a documentului XML. În acest caz, va fi utilizat analizorul implicit înregistrat în sistem. Singura problemă poate fi că versiunea analizorului înregistrată implicit poate diferi pe diferite computere. Dacă doriți să fiți sigur că codul pe care îl scrieți va funcționa cu orice versiune a analizorului, atunci nu utilizați constructe care sunt specifice versiunilor specifice ale analizorului. Pentru că nu există nicio garanție că utilizatorul care va folosi codul dvs. va avea instalată aceeași versiune a analizorului pentru care ați scris codul. Un alt avantaj al dezvoltării codului care este independent de versiunea analizorului este că atunci când este lansată o versiune mai nouă a analizorului, aceasta va fi compatibilă cu versiunile anterioare și nu va trebui să recompilați codul.

Randul 2: Setați xmlDoc = nou DOMDocument30

Această linie inițializează variabila xmlDoc ca o nouă instanță a obiectului document XML versiunea 3.0.

Linia 3: xmlDoc.async = Fals

Fișierele XML pot fi încărcate fie sincron, fie asincron. Dacă xmlDoc.async = False, înseamnă că conținutul fișierului XML va fi încărcat și numai după acel control va fi transferat în procesul de apelare. Dacă xmlDoc.async = True, înseamnă că controlul va fi transferat imediat procesului de apelare, fără a aștepta până când conținutul fișierului XML este complet încărcat.

Linia 4: xmlDoc.validateOnParse = Fals

Acest cod indică faptul că analizatorul nu ar trebui să valideze fișierul XML încărcat în funcție de schema sa (validateOnParse = False). Pentru a activa verificarea conformității schemei, trebuie să scrieți validateOnParse = True.

Linia 5: xmlDoc.load("C:\inetpub\wwwroot\xml\cup.xml")

Această linie apelează o metodă pentru a încărca fișierul XML specificat. Există două tipuri de metode de încărcare. Primul, care este scris pe linia 5, încarcă fișierul în modelul obiect document și este necesar să treceți calea completă la fișierul XML. A doua opțiune de încărcare implică trecerea unui șir xml ca parametru. Acest tip de încărcare ar putea fi numit, de exemplu, astfel: xmlDoc.loadXML(„șir xml valid”). Vă voi arăta cum să utilizați această metodă mai târziu.

Linia 6: MsgBox xmlDoc.xml

Această linie afișează conținutul fișierului XML descărcat. Ca rezultat, ar trebui să primim fișierul XML original pe care l-am creat mai devreme.

2.2. Explorarea modelului obiect de document XML

Creați un nou proiect în Visual Basic și numiți-l standard.exe. Lipiți codul de mai sus în metoda de încărcare a ferestrei principale a proiectului. Asigurați-vă că declarați referința la „Microsoft XML v3.0”. Pentru a face acest lucru, faceți clic pe Proiect-->Referințe, apoi derulați în jos lista care apare și găsiți linkul dorit în ea. Vă rugăm să rețineți că versiunea 3.0 a analizorului trebuie instalată pe computer, altfel nu va fi listată. Setați puncte de întrerupere pe ultima linie de cod (msgbox xmlDoc.xml). Rulați aplicația în modul de depanare. Când procesul de execuție ajunge la un punct de oprire, apelați fereastra „Locale” și priviți modelul obiectului documentului. Puteți învăța multe vizând ceea ce este afișat în această fereastră. Fereastra „Locale” ar trebui să arate similar cu imaginea de mai jos. Iată câteva proprietăți interesante ale modelului obiect document.

Modelul obiect de document XML conține întotdeauna două noduri de nivel superior:

  • Item1 este rădăcina ramurii elementelor documentului (ignorați-o)
  • Item2 este de fapt primul element al documentului (rețineți acest lucru)

nodeName sau baseName - poate fi folosit la căutarea numelui unui element sau al unui atribut.
nodeType - folosit pentru a obține tipul nodului curent.
nodeValue - folosit pentru a afla valoarea datelor nodului.
childNodes este o colecție de noduri copil. Ele pot fi noduri de elemente, noduri de text și noduri CDATA. Pot exista și alte tipuri de noduri, despre care nu voi vorbi acum, dar puteți afla totul despre ele în XML SDK.
attributes este o colecție de noduri de atribute pentru elementul curent.
lungime - folosit pentru determinarea numărului de noduri din arborele aparținând direct celui curent.
xml - această proprietate este prezentă în toate nodurile și poate fi folosită pentru a reprezenta poziția curentă în document. Șirul XML începe de la nodul curent și coboară până la sfârșitul arborelui. Aceasta este o caracteristică foarte utilă. Experimentează cu el și vezi ce se întâmplă.

2.2.2. Nodurile de elemente

Un nod de element poate conține noduri copil de elemente, atribute, text sau CDATA. Din figura de mai jos puteți vedea următoarele informații despre nodul „SOLID”:

nodeType - Tipul de nod curent = NODE_ELEMENT - i.e. nodul curent este un element.
nodeName sau baseName sau tagName - Numele nodului curent (element) = SOLID.
Elementul său părinte CONȚINUT are 4 copii.
Acest lucru poate fi văzut în figura următoare, dar SOLID are un copil care este un tip de date text.
text - „ice cube” este o metodă de comandă rapidă care vă permite să obțineți valoarea nodului curent fără a vă muta la un nod text copil.

2.2.3. Noduri de atribute

Nodurile de atribut pot consta doar din noduri copii text sau CDATA. Următoarea figură arată ce informații pot fi obținute despre nodul „qty”:

nodeType - Tipul nodului curent = NODE_ATTRIBUTE - nodul curent este un atribut.
nodeName sau baseName - Numele nodului curent (Atribute) = qty

Din figura următoare este, de asemenea, clar că qty are un copil, care are un tip de date text.
text sau valoare - „2” este o metodă de comandă rapidă care vă permite să obțineți valoarea nodului curent fără a vă muta la un nod text copil.

2.2.4. Noduri de text și CDATA

Nodurile text sau CDATA nu au copii. Nodurile text conțin datele text procesate ale nodului lor părinte. CDATA conține datele brute de text ale nodului său părinte. Nodurile CDATA sunt create atunci când datele dintr-un fișier XML sunt încadrate într-un mod special. Eticheta CDATA îi spune analizorului să nu analizeze datele și să accepte caracterele din interiorul etichetei ca date. Secțiunea CDATA este utilă în special atunci când trebuie să inserați cod într-un fișier XML. Următoarea figură arată ce informații pot fi obținute din nodul text curent:

nodeType - Tipul nodului curent = NODE_TEXT - nodul curent conține date text.
nodeName - Numele nodului curent (text) = #text - toate nodurile text sunt numite #text
date sau text sau valoare - „2” este datele curente ale nodului.

2.2.5. Erori la încărcarea unui document

Secțiunea parseError a modelului obiect document poate fi utilă în identificarea problemelor care apar la încărcarea unui document XML. Dacă elimin eticheta de închidere din OTHER din fișierul nostru exemplu și încerc să rulez din nou programul, voi obține următorul rezultat. Prima informație utilă este că următorul nostru frate conține acum valoarea Nimic. Acum, dacă te uiți la childNodes, poți vedea că câmpul de lungime este acum 0. Ambele semne indică faptul că documentul nostru XML nu a fost încărcat. Pentru a înțelege de ce, deschid nodul parseError și obțin toate informațiile despre eroare.

Așa că v-am arătat cum să încărcați un fișier XML în Document Object Model, dar ce faceți cu el acolo? Una dintre caracteristicile principale pe care le puteți utiliza este să efectuați diverse interogări pe un document XML. Pentru a face acest lucru, puteți, desigur, să vă uitați prin întregul document până când găsiți informațiile pe care le căutați. Dar cea mai preferată modalitate este de a folosi una dintre cele două metode ale clasei DOMDocument. Cele două metode folosite pentru a găsi nodurile din exemplul nostru anterior ar putea arăta ca xmlDoc.SelectSingleNode(patternString) pentru a obține nodul pe care îl căutăm, sau xmlDoc.SelectNodes(patternString) pentru a obține o listă de noduri pe care le căutăm. Parametrul patternString este tocmai cererea. Poate fi format într-unul din două moduri. Fie ca cerere XSL, fie ca cerere XPath. O modalitate mai nouă și preferată de a interoga un document XML este XPath. Formatul patternString trebuie setat în prealabil, înainte de primul apel la oricare dintre cele două metode de solicitare a datelor, altfel metoda XSL de formare a cererilor va fi folosită implicit. Pentru a seta tipul de formare pentru patternString, utilizați setProperty("SelectionLanguage", "format"). Pentru a schimba interogările din exemplul nostru pentru a utiliza modul XPath, voi adăuga următoarea comandă: setProperty("SelectionLanguage","XPath"). În opinia mea, XPath este cea mai importantă tehnologie XML de învățat. Vă voi oferi câteva interogări simple XPath. Un loc bun pentru a începe să înveți această tehnologie este Microsoft XML SDK. O altă modalitate de a explica acest lucru ar fi să scrieți o aplicație Visual Basic simplă care vă permite să introduceți interogări și să scoateți rezultatul. Este posibil să găsiți unele aplicații gratuite care fac același lucru, dar XPath este destul de nou și este posibil să nu fie pe deplin acceptat de acele aplicații.

2.3.1. Utilizarea XPATH pentru a interoga modelul obiect document

Să adăugăm un cod la sfârșitul exemplului nostru anterior pentru a returna conținutul registrului de comenzi:

GROZAV! Să adăugăm acum o altă interogare care ne va permite să stabilim dacă paharul are capac sau nu. Adăugați următorul cod la sfârșitul celui precedent:

Setați objNode = xmlDoc.selectSingleNode("/CUP/LID") dacă objNode.text="yes" atunci MsgBox "Avem un capac" altfel MsgBox "Fără capac pe această ceașcă" se încheie dacă

Să trecem prin codul linie cu linie:

Linia 1: Dim objNode Ca IXMLDOMNode

Această linie definește variabila objNode de tip nod document XML. Este important să înțelegeți că un nod de document XML este, de asemenea, un obiect. Nu contează. Se compune din sine, precum și din atributele și copiii (childNodes). Astfel, puteți tăia ramurile de copac inutile, selectând doar pe cele de care aveți nevoie.

Randul 2: Dim objListOfNodes As IXMLDOMNodeList

Această linie definește variabila objListOfNodes, care are tipul de listă de noduri de document XML (grup de noduri).

Linia 3: xmlDoc.setProperty „SelectionLanguage”, „XPath”

Această linie stabilește modul în care patternString este format ca un XPath.

Linia 4: MsgBox „Paharul tău conține următoarele articole:”

Linia 5: Setați objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]")

Această linie realizează o interogare XPath care va returna un grup de noduri și le va stoca în variabila objListOfNodes. Cererea este împărțită în următoarele părți:

  • //CONTENTS - preia toate elementele CONTENTS din documentul XML. Notă: // este o prescurtare pentru întregul conținut al documentului XML.
  • /* - din lista de elemente CONȚINUT, ia toate (* - folosit pentru a indica toate) elementele descendente. Acest lucru reduce rezultatul la patru noduri de elemente ( ). Aceste patru noduri se încadrează direct sub nodul CONȚINUT.
  • [@qty>0] - verificați fiecare element copil pentru a vă asigura că atributul lui qty (@ - înseamnă atribut) este mai mare decât 0. Dacă această condiție nu este îndeplinită, nodul este eliminat. Totul din interiorul unei cereri XPath poate lua valorile True sau False. Dacă rezultatul este True, atunci nodul este salvat. Dacă rezultatul este Fals, atunci nodul este eliminat. După aceasta, rezultatul nostru este redus la trei noduri (

Linia 6-8: Pentru fiecare objNode din objListOfNodes / MsgBox objNode.Text / Next

Aceste rânduri afișează valorile fiecărui nod de element care se potrivesc cu interogarea. ("cub de gheață", "paie", "apă").

Linia 9: Setați objNode = xmlDoc.selectSingleNode("/CUP/LID")

Această linie returnează toate elementele LID care aparțin elementului CUP, care, la rândul său, este derivat din rădăcina arborelui (când interogarea începe cu /, aceasta înseamnă că trebuie să începeți de la rădăcină). Aceasta este foarte asemănătoare cu calea către un fișier sau folder. În exemplul nostru, această interogare va returna un element LID care conține valoarea „da”. Lucrul important aici este că am spus cererii să înceapă de la elementul rădăcină al documentului XML. Interogările nu încep întotdeauna de la elementele rădăcină; de obicei încep de la nodul curent. În exemplul nostru, acest lucru nu contează, deoarece nodul curent (xmlDoc) este elementul rădăcină al documentului XML (dar acest lucru nu este adevărat în toate cazurile).

Linia 10-15: if objNode.text="yes" then / MsgBox "Avem un capac" /
else / MsgBox „Fără capac pe această ceașcă” /end if

Această linie afișează mesajul „Avem un capac” deoarece proprietatea textului LID a elementului este „da”.

3. Convertiți ADO în XML

Acum că înțelegeți elementele de bază ale XML, să creăm un control ActiveX care va converti un set de date ADO în format XML. Scopul este de a obține titlurile cărților din tabelul Titles din baza de date Pubs și de a le returna în format XML. Voi folosi rezultatul în următorul meu articol. Puteți spune că ADO are propriile metode pentru a salva rezultatul în format XML, nu? Da, dar dacă am încredere în ADO pentru a face acest lucru, voi ajunge cu un fișier XML într-un format atât de groaznic, încât va fi imposibil de lucrat. ADO va crea fișierul XML folosind spațiul de nume și nu am nevoie de asta acum. În al doilea rând, ADO va crea un fișier XML, care va fi reprezentat sub formă de atribute. Cu alte cuvinte, fiecare înregistrare va deveni un element și fiecare câmp un atribut:

Dar aș dori să primesc un fișier XML sub formă de elemente, în care fiecare intrare să fie conținută într-o etichetă , iar fiecare câmp ar fi un element din interiorul etichetei . Sintaxa mea de șir XML ar fi:

date din tabel date din tabel date din tabel date din tabel date din tabel date din tabel datafromtable

Apropo, ceea ce tocmai am făcut a fost să creez o schemă pentru șirul meu XML. Acum, dacă trebuie să verific structura unui document XML cu o schemă, tot ce trebuie să fac este să convertesc schema în formatul corect. Adică în sintaxa DTD sau XDR. Observați că am adăugat câteva atribute fiecărui element . Un motiv pentru aceasta este că aceste informații pot fi utilizate de către client. Prettyname poate fi folosit ca etichete de date. Atributul datatype ar putea fi utilizat pentru validarea datelor de partea clientului. Dar, pentru a fi corect, adevăratul motiv pentru care există aceste atribute este că au un scop special în șablonul de fișier XSL pe care îl folosesc adesea pentru a construi clauza where a interogărilor SQL. Poate voi publica în curând un articol care să demonstreze această abordare. Șablonul este de fapt foarte util. Când structura XML este aplicată datelor din tabelul Titles, rezultatul va arăta astfel:

Ghidul bazei de date a executivului ocupat BU1032 Ghidul bazei de date a executivului ocupat Afaceri 19.99 4095 O prezentare generală a sistemelor de baze de date disponibile, cu accent pe aplicațiile de afaceri comune. Ilustrat. 6/12/1991 Gătitul cu computerele: Bilanțuri secrete BU1111 Gătitul cu computerele: Bilanțuri secrete Afaceri 11.95 3876 Sfaturi utile despre cum să vă folosiți resursele electronice la cel mai bun avantaj. 6/9/1991

Acum am cu ce să lucrez!

Lista 1 - CUP.XML

sticlă 6 16 cub de gheata paie apă da

Dim xmlDoc As MSXML2.DOMDocument30 Set xmlDoc = New DOMDocument30 xmlDoc.async = False xmlDoc.validateOnParse = False xmlDoc.Load ("c:\inetpub\wwwroot\xml\cup.xml") MsgBox xmlDoc.NojDoc.xml obj. Ca IXMLDOMNodeList xmlDoc.setProperty „SelectionLanguage”, „XPath” MsgBox „Căpa dumneavoastră conține următoarele elemente” Set objListOfNodes = xmlDoc.selectNodes("//CONTENTS/*[@qty>0]") Pentru fiecare objNode în objListOfNodes Ms. Text Next Set objNode = xmlDoc.selectSingleNode("/CUP/LID") If objNode.Text = "yes" Then MsgBox "Avem un capac" Else MsgBox "Fără capac pe această ceașcă" End If

Lista 3 - Control ActiveX: ADO în XML (WebClass.dll)(xmlControl.cls)

Option Explicit "Declare Database variables Private m_dbConnection As New ADODB.Connection Private m_dbCommand As ADODB.Command Private m_adoRs As ADODB.Recordset Private m_adoErrors As ADODB.Errors Private m_adoErr As Error Public nCommandTimeOut As Variant Public nConnectionTimeOut As Variant Public strConnect As Variant Public strAppName As String Public strLogPath As String Public strDatabase As String Public strUser As String Public strParola Ca String Public strServer Ca String Public strVersion As String Public lMSADO As Boolean "Private Global Variables Private gnErrNum As Variant Private gstrErrDesc As Variant Private gstrErrDesc As Variant Private gstrErr Private As StErr gstrADOError As String Private Const adLeonNoRecordset As Integer = 129 Private gtableName(6) As String Private gcolumnName(6) As String Private gprettyName(6) As String Private gdatatype(6) As String Private gfilter(6) As String Private Function OpenDatabase() Dacă Len(strConnect) = 0 Atunci „setează valorile implicite Dacă Len(strDatabase) = 0 Atunci strDatabase = „pubs” End If If nConnectionTimeOut = 0 Then nConnectionTimeOut = 600 End If If nCommandTimeOut = 0 Then nCommandTimeOut = 600End If Len (strAppName) = 0 Apoi strAppName = "xmlControl" End If If Len(strUser) = 0 Then strUser = "sa" End If If Len(strPassword) = 0 Then strPassword = "" End If strConnect = "Provider=SQLOLEDB. 1; " & _ "Application Name=" & strAppName & _ "; Sursa de date=" & strServer & "; Catalog inițial="&strDatabase&"; " & _ " User ID=" & strUser & "; Password=" & strPassword & ";" End If "conectați-vă la SQL Server și deschideți baza de date La eroare GoTo SQLErr "Activați gestionarea erorilor cu m_dbConnection .ConnectionTimeout = nConnectionTimeOut .CommandTimeout = nCommandTimeOut .Open string strConnect "deschideți baza de date folosind șirul de conexiune End With On Error GoTo 0 "turn off the error handler OpenDatabase = True "baza de date deschisă cu succes Exit Function SQLErr: Call logerror("OPEN") OpenDatabase = False End Function Private Function BuildSQLwhere(tmpWhere) As String "Acesta este pentru viitorul End Funcție Funcție publică GetTitlesXML (Opțional xmlWhere ca variantă) As String Dim whereClause As String Dim strSQL As String Apelați OpenDatabase "deschide baza de date pubs If IsMissing(xmlWhere) Then "când interogarea eșuează whereClause = "" Else whereClause = BuildereSQLwhere(xml) convertiți interogarea într-unul corect sql End If „inițializați o expresie sql care va interoga titlurile cărților strSQL = „selectați title_id,title,type,price,ytd_sales,notes,pubdate din titluri” și whereClause Call NewRecordSet „creați un set de date” setați locația cursorului m_adoRs. CursorLocation = adUseClient „deschideți setul de înregistrări m_adoRs.Open strSQL, m_dbConnection, adOpenForwardOnly, adLockReadOnly, adCmdText „deconectați-vă de la setul de date m_adoRs.ActiveConnection = Nothing On Error GoTo 0 „închideți conexiunea de gestionare a bazei de date” CloseDatabase Dacă m_adoRs. EOF Then GetTitlesXML = "" "interogarea nu a returnat nicio valoare Else If lMSADO Then GetTitlesXML = msado(m_adoRs) "convertiți setul de înregistrări ado în xml personalizat End If End If "închideți setul de date Apelați CloseRecordset Exit Funcția SQLErr: Apel logerror(strSQL) Funcție de sfârșit Funcție privată ADOtoXML(tmprs As ADODB.Recordset, tmpMP As Boolean) As String Dim adoFields As ADODB.Fields „declară o colecție pentru stocarea câmpurilor Dim adoField As ADODB.Field” este folosit pentru a obține fiecare câmp din colecție Dim xmlDoc As msxml2.DOMDocument30 Dim tmpLine As String "stochează o reprezentare xml a fiecărei cărți Dim tmpXML As String "este folosit pentru a concatena șiruri xml Dim i As Integer If tmprs.EOF Then "interogarea nu a returnat nicio înregistrare ADOtoXML = "" Funcția de ieșire Altfel Setați adoFields = tmprs.Fields "creați o colecție de câmpuri End If tmpXML = " " "toate cărţile vor fi incluse într-o etichetă Efectuați până la tmprs.EOF "buclă prin fiecare rând din setul de date i = 0 " I este indexul câmpului ado, care începe la 0 - primul câmp va fi field(0) tmpLine = " " & tmprs("titlu") & vbCrLf Pentru fiecare adoField În adoFields "curge prin toate câmpurile" construiți eticheta xml și atributele sale pentru câmpul curent tmpLine = tmpLine & " " & adoField.Value tmpLine = tmpLine & "" & vbCrLf i = i + 1 "trece la câmpul următor Următorul tmpXML = tmpXML & tmpLine & "„ & vbCrLf „etichetă de închidere după ultimul câmp tmprs.MoveNext „antet următor Loop Set adoField = Nimic „distruge obiectul câmpului Set adoFields = Nimic „distruge obiectul colecție de câmpuri tmpXML= tmpXML & „ Eticheta de închidere „&vbCrLf”. Set xmlDoc = New msxml2.DOMDocument30 „create xmlDOM xmlDoc.async = False „așteptați ca documentul să se încarce xmlDoc.validateOnParse = False „nu verificați schema xmlDoc.loadXML(tmpXML) „încărcați șirul în modelul obiect document La eroare Reluați următoarea „dacă fișierul nu există, atunci procesăm această eroare Kill(”c:\temp\custom.xml”) „ștergeți fișierul dacă există On Error GoTo 0” spuneți operatorului de eroare să întrerupă atunci când apare o eroare detectat xmlDoc.save ("c:\temp\custom. xml") "salvare xml în fișier ADOtoXML=xmlDoc.xml "returns xml string Set xmlDoc=Nimic "distruge documentul obiect model End Funcție Funcție privată msado(tmprs As ADODB.Recordset ) As String Dim xmlDoc As msxml2.DOMDocument30 On Error Resume Next "dacă fișierul nu există, primim o eroare Kill ("c:\temp\msado.xml") "Ștergem fișierul dacă există On Error GoTo 0 „Îi spunem operatorului de eroare să renunțe atunci când este detectată o eroare tmprs.save „c:\temp\msado .xml”, adPersistXML „salvați xml într-un fișier Set xmlDoc = New msxml2.DOMDocument30 „creați xml document object model xmlDoc .async = False „așteptați ca documentul xml să se încarce xmlDoc.validateOnParse = Fals „nu verificați schema xmlDoc.Load („C: \temp\msado.xml”) „încărcați fișierul în modelul obiect document msado = xmlDoc .xml "return the xml string Set xmlDoc = Nimic "distruge modelul obiectului documentului End Function Private SubCloseRecordset() "închide setul de date m_adoRs.Close Set m_adoRs =Nothing End Sub Private Sub NewRecordSet() Set m_adoRs= Nimic Set m_adoRs=New ADODB.Recordset End Sub Private Sub CloseDatabase() m_dbConnection.Close Set m_dbConnection =Nimic End Sub Private Sub logerror(errSQL As String) Dim hFile As Integer Dim expFile As String La eroare GoTo 0 gnErrNum = Err.Number gstrErrErrDesc = gstrErrErrDesc = Err.Source Set m_adoErrors = m_dbConnection.Errors For Each m_adoErr In m_adoErrors gstrADOError = m_adoErr.Description & "," & CStr(m_adoErr.NativeError) _ & ", " & CStr(m_adoErr."," & m_NumberadoErr."," & m_) Sursă _ & "," & CStr(m_adoErr.SQLState) Următorul hFile =FreeFile Dacă Len(strLogPath) = 0 Apoi strLogPath = "C:\temp\" End If expFile = strLogPath & strAppName & ".err" Deschideți expFile pentru adăugare Ca #hFile Imprimați #hFile,"**************************************** ***** **" Print #hFile, Now() Print#hFile, "*********************************** *** ****" Print #hFile,"Subroutine: " & tmpPro Print #hFile, "Error Number:" & gnErrNum Print#hFile, "Error Description: " & gstrErrDesc Print #hFile, "Error Source:" & gstrErrSrc Print # hFile, "Ado error String: " & gstrADOError Print #hFile, "Bad SQL: " & errSQL Close #hFile End Sub Private Sub Class_Initialize() strVersion = "xmlControl Versiunea 1. 1" "title_id,title,type,price,ytd_sales,notes,pubdate gtableName(0) = "titles" gcolumnName(0) = "title_id" gprettyName(0) = "Număr de identificare a titlului" gdatatype(0) = "număr" gfilter(0) = "" gtableName(1) = "titluri" gcolumnName(1) = "titlu" gprettyName(1) = "Titlul cărții" gdatatype(1) = "text" gfilter(1) = "" gtableName (2) = "titluri" gcolumnName(2) = "tip" gprettyName(2) = "Tip de carte" gdatatype(2) = "text" gfilter(2) = "" gtableName(3) = "titluri" gcolumnName( 3) = „preț” gprettyName(3) = „Prețul cărții” gdatatype(3) = „număr” gfilter(3) = „” gtableName(4) = „titluri” gcolumnName(4) = „ytd_sales” gprettyName( 4) = „Vânzări anuale” gdatatype(4) = „număr” gfilter(4) = „” gtableName(5) = „titluri” gcolumnName(5) = „note” gprettyName(5) = „Note despre carte " gdatatype(5) = "memo" gfilter(5) = "" gtableName(6) = "titluri" gcolumnName(6) = "pubdate" gprettyName(6) = "Data publicării" gdatatype(6) = "data" gfilter (6) = "" End Sub

Lista 4 - Aplicație de testare VB pentru a testa WebClass

Private Sub Command1_Click() Dim objWC As xmlControl Dim xml As String Set objWC = New xmlControl objWC.strDatabase = "pubs" objWC.strServer = "ltweb" objWC.strUser = "sa" objWC.strPassword = "" objWC = Option. .Value objWC.strAppName = „Articol1” Text1.Text = objWC.getTitlesXML End Sub

Lista 5 - ASP pentru testarea WebClass

Formatul XML este conceput pentru a stoca date care pot fi utile în funcționarea anumitor programe, site-uri web și suport pentru anumite limbaje de marcare. Nu este dificil să creați și să deschideți un fișier cu acest format. Acest lucru se poate face chiar dacă nu aveți niciun software specializat instalat pe computer.

XML în sine este un limbaj de marcare, oarecum similar cu HTML, care este folosit pe paginile web. Dar dacă acesta din urmă este folosit doar pentru afișarea informațiilor și marcarea corectă a acesteia, atunci XML permite ca acesta să fie structurat într-un anumit fel, ceea ce face ca acest limbaj să fie oarecum similar cu un analog al unei baze de date care nu necesită un SGBD.

Puteți crea fișiere XML utilizând programe specializate sau editorul de text încorporat în Windows. Ușurința de scriere a codului și nivelul funcționalității acestuia depind de tipul de software utilizat.

Metoda 1: Visual Studio

În locul acestui editor de cod Microsoft, puteți utiliza oricare dintre analogii acestuia de la alți dezvoltatori. De fapt, Visual Studio este o versiune mai avansată decât cea obișnuită „Notepad”. Codul are acum o evidențiere specială, erorile sunt evidențiate sau corectate automat și șabloane speciale sunt deja încărcate în program care facilitează crearea de fișiere XML mari.

Pentru a începe, trebuie să creați un fișier. Faceți clic pe un articol "Fişier"în panoul de sus și din meniul derulant selectați "Crea…". Se va deschide o listă care indică articolul "Fişier".

  • Veți fi redirecționat către o fereastră cu extensia de fișier la alegere, selectați elementul corespunzător „Fișier XML”.
  • Fișierul nou creat va avea deja prima linie cu codificarea și versiunea. În mod implicit, sunt specificate prima versiune și codificare UTF-8, pe care o puteți schimba oricând. Apoi, pentru a crea un fișier XML cu drepturi depline, trebuie să notați tot ce era în instrucțiunile anterioare.

    Când ați terminat, selectați din nou în panoul de sus "Fişier"și există un element din meniul derulant „Salvează totul”.

    Metoda 2: Microsoft Excel

    Puteți crea un fișier XML fără a scrie cod, de exemplu, folosind versiuni moderne de Microsoft Excel, care vă permite să salvați tabele cu această extensie. Cu toate acestea, trebuie să înțelegeți că în acest caz nu va fi posibil să creați ceva mai funcțional decât un tabel obișnuit.

    Această metodă este mai potrivită pentru cei care nu doresc sau nu știu să lucreze cu cod. Cu toate acestea, în acest caz, utilizatorul poate întâmpina anumite probleme atunci când rescrie fișierul în format XML. Din păcate, operația de conversie a unui tabel obișnuit în XML este posibilă doar pe cele mai noi versiuni de MS Excel. Pentru a face acest lucru, utilizați următoarele instrucțiuni pas cu pas:


    Metoda 3: Notepad

    Chiar și unul obișnuit este destul de potrivit pentru lucrul cu XML "Caiet", cu toate acestea, va fi dificil pentru un utilizator care nu este familiarizat cu sintaxa limbii, deoarece în ea trebuie scrise diverse comenzi și etichete. Procesul va fi ceva mai simplu și mult mai productiv în programele specializate pentru editarea codului, de exemplu, în Microsoft Visual Studio. Au evidențiere specială a etichetelor și sfaturi cu instrumente, ceea ce simplifică foarte mult munca unei persoane care nu cunoaște sintaxa acestui limbaj.

    Această metodă nu necesită descărcarea nimic, deoarece este deja încorporată în sistemul de operare. "Caiet". Să încercăm să facem un tabel XML simplu în el utilizând aceste instrucțiuni:


    Rezultatul final ar trebui să arate cam așa:




    25
    Adevărat


    Compilatorii XML trebuie să proceseze acest cod ca un tabel cu o coloană care conține date despre un anume Ivan Ivanov.

    ÎN „Notepad” este foarte posibil să se facă tabele simple ca acesta, dar atunci când se creează seturi de date mai mari, pot apărea dificultăți, deoarece în mod obișnuit „Notepad” Nu există funcții pentru corectarea erorilor din cod sau evidențierea acestora.

    După cum puteți vedea, nu este nimic complicat în crearea unui fișier XML. Dacă se dorește, poate fi creat de orice utilizator care știe mai mult sau mai puțin să lucreze pe un computer. Cu toate acestea, pentru a crea un fișier XML cu drepturi depline, este recomandat să studiați acest limbaj de marcare, cel puțin la un nivel primitiv.

    În articolul anterior despre XML, ne-am uitat la o astfel de metodă învechită de validare a documentelor XML precum XML DTD. Această metodă este încă folosită pentru validarea datelor XML, dar în fiecare zi este înlocuită din ce în ce mai mult de o nouă tehnologie numită XML Schema. Multe deficiențe care erau în DTD XML au fost corectate în schemele XML, așa că în prezent toți dezvoltatorii de top folosesc doar scheme XML pentru validarea documentelor.

    Pentru a aprecia avantajele Schemelor XML față de DTD-uri, să aruncăm o privire mai atentă la principalele dezavantaje ale DTD-urilor care au fost corectate cu succes în Schemele XML. Le-am menționat deja în articolul „”, dar pentru o mai bună înțelegere, să repetăm.

    Dezavantajele XML DTD față de XML Schema

    1. Sintaxa limbajului diferită de XML. Adică, DTD nu este XML. În acest sens, pot apărea diverse probleme cu codificarea și verificarea documentelor XML.
    2. Nu se verifică tipul de date. Există un singur tip de date într-un DTD XML — șir. În acest sens, de exemplu, dacă există text într-un câmp numeric, documentul va trece totuși verificarea, deoarece DTD-ul XML nu poate verifica tipul de date.
    3. Nu puteți atribui mai mult de o descriere DTD unui document XML. Adică, un document poate fi verificat cu o singură descriere DTD. Dacă există mai multe dintre ele, va trebui să refaceți descrierile și să combinați totul într-un singur fișier, ceea ce este foarte incomod.

    Acestea au fost principalele deficiențe ale XML DTD, care au fost corectate cu succes în standardul industrial pentru descrierea documentelor XML, XML Schema.

    XML Schema este un standard industrial pentru descrierea documentelor XML

    Pe scurt, XML Schema face următoarele:

    1. Descrie numele elementelor și atributelor (dicționar).
    2. Descrie relația dintre elemente și atribute, precum și structura acestora (modelul de conținut).
    3. Descrie tipuri de date.

    De asemenea, vreau să remarc că în acest moment aproape totul poate fi descris folosind diagrame. Adică, o schemă este o modalitate universală de descriere a gramaticii datelor, care poate fi folosită nu numai pentru verificarea documentelor XML, ci și pentru descrierea bazelor de date etc. Astfel, domeniul de aplicare al schemelor este în prezent foarte larg.

    Exemplu de schemă XML pentru validarea unui document XML

    După cum arată practica, materialul este absorbit mult mai bine dacă începeți imediat să studiați cu exemple. Vă spun imediat că nu vom intra în toate detaliile, deoarece materialul este foarte complex, mai ales dacă îl studiați sub formă de text.

    Exemplu de schemă XML simplă

    Folosind această schemă, puteți valida următorul document XML.

    <книга xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "book.xsd"> <название>Bazele XML <цена>300

    Deci, să revenim la schema noastră XML. După cum ați observat deja, XML, deja cunoscut de noi, este folosit pentru a crea scheme XML. Singura diferență aici este că XML Schema are elemente deja definite, spre deosebire de XML obișnuit. În acest sens, sunt folosite spațiile de nume. În acest caz, spațiul de nume necesar va fi „http://www.w3.org/2001/XMLSchema”, care va fi specificat folosind prefixele „xs”.

    Aș dori să notez imediat că puteți utiliza ambele prefixe de spațiu de nume și puteți seta un spațiu de nume pentru elementul rădăcină. Nu există nicio diferență ca atare. Fiecare decide singur ce să facă într-o anumită situație. Permiteți-mi să spun doar că prefixele „xs” sau „xsd” sunt de obicei folosite.

    Ei bine, acum să ne dăm seama cum să descifrăm diagrama de mai sus. După cum am menționat mai sus, XML Schema este o descriere a unui vocabular și a unor tipuri de date. Pe baza acestui lucru, vom descifra fiecare element.

    • — declara elementul „carte” cu tipul „Carte”.
    • — declarați un tip complex cu numele „Carte” (xs: complexType - poate conține elemente imbricate).
    • — declarație de cuibărit. Adică, tipul va conține elemente imbricate.
    • — declara un element cu numele „title” (tipul standard „string” - xs:string).
    • — declarați un element cu numele „preț” (tipul standard „număr” - xs:zecimal).

    După cum puteți vedea, nu este nimic super complicat aici. Dacă te gândești bine, totul este foarte simplu.

    Elemente de bază ale schemei XML

    Pe scurt, schema XML poate fi descrisă după cum urmează.

    Schema ta

    După cum puteți vedea din exemplu, fiecare schemă XML constă dintr-un element rădăcină „schema” și un spațiu de nume necesar „http://www.w3.org/2001/XMLSchema”. Urmează o descriere a circuitului și a circuitului în sine. În același timp, foarte adesea în schemele de foarte înaltă calitate descrierea este mult mai mare decât schema XML în sine.

    Descrierea elementelor din Schema XML

    La începutul articolului, ne-am uitat deja la un exemplu de schemă XML simplă. În el am descris separat elemente și tipuri. În același timp, aș dori să observ imediat că secvența nu joacă un rol aici. Schema va funcționa în orice caz.

    Acum să ne uităm la a doua modalitate de a scrie XML Schema, care se bazează pe descrierea tipului imediat în interiorul elementului. Această metodă este potrivită dacă nu intenționați să utilizați aceeași descriere pentru elemente diferite. Pentru claritate, să ne uităm la un exemplu.

    După cum se poate vedea din exemplu, un element este declarat folosind un „element” de construcție special, folosind prefixul corespunzător. În acest caz, definim un element numit „rădăcină” fără a specifica un tip, deoarece acesta va fi descris în interiorul elementului. Adică, există două moduri de a descrie elementele.

    1 cale

    Descriere tip

    Metoda 2

    Descrierea tipului de element

    Puteți folosi atât prima metodă, cât și a doua. Toate lucrează la fel. Singura întrebare este confortul în acest caz particular.

    În plus, după declararea elementului, indicăm că este de tip complex ( ) și lista ( ) elemente imbricate. În acest caz, acestea sunt elementele de nume și vârstă cu tipurile „xs:string” și „xs:integer”. Prefixul xs înseamnă că este un tip de bază care este deja definit în standardul XML Schema.

    După cum puteți vedea, totul este destul de simplu până acum. Din nou, nu vom intra în toate detaliile, deoarece acest articol are scopul de a vă familiariza cu XML Schema și nu de a o studia în detaliu.

    Cum se potrivesc Schema XML și documentul

    Particularitatea XML Schema este că nu descrie documentul în sine, ci spațiul de nume. În acest sens, cel mai adesea nu se menționează în document. Managerul însuși mapează schema de care aveți nevoie fără a utiliza instrucțiuni din documentul XML.

    În cazul în care handlerul nu știe unde este schema, putem indica unde să o căutăm. Acest lucru se face folosind atributul special „schemaLocation”. Deoarece acest atribut aparține unui spațiu de nume diferit, spațiul de nume trebuie de asemenea specificat înainte de a utiliza atributul. Pentru claritate, să ne uităm la un exemplu.

    Schema XML

    document XML

    Acum să ne uităm la fiecare linie în detaliu.

    • targetNamespace="http://www.site.com" – indicați pentru ce spațiu de nume este această schemă XML.
    • xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” – conectăm spațiul de nume în care este descris atributul „schemaLocation”.
    • xsi:schemaLocation="http://www.site.com/product.xsd” – indicăm unde poate fi găsită schema în cazul în care analizatorul nu știe unde se află. Dacă documentul XML nu aparține niciunui spațiu de nume și, prin urmare, nu există nicio referință la acesta în schemă, atunci atributul „schemaLocation” este înlocuit cu „noNamespaceSchemaLocation” (o referire la schemă fără a defini spații de nume).

    Asta e tot. Mult succes și succes în învățarea XML!