Descrierea datelor folosind XML. Descrierea structurii documentelor XML. Limbajul XML Schema Definition (XSD).

Știați, Care este falsitatea conceptului de „vid fizic”?

Vacuum fizic - conceptul de fizică cuantică relativistă, prin care înseamnă cea mai mică stare de energie (de bază) a unui câmp cuantizat, care are moment zero, moment unghiular și alte numere cuantice. Teoreticienii relativiști numesc un vid fizic un spațiu complet lipsit de materie, plin cu un câmp nemăsurabil și, prin urmare, doar imaginar. O astfel de stare, potrivit relativiștilor, nu este un vid absolut, ci un spațiu plin cu niște particule fantomă (virtuale). Teoria relativistă a câmpului cuantic afirmă că, în conformitate cu principiul incertitudinii Heisenberg, virtuale, adică aparente (aparent pentru cine?), particulele se nasc și dispar în mod constant în vidul fizic: apar așa-numitele oscilații de câmp în punctul zero. Particulele virtuale ale vidului fizic și, prin urmare, ele însele, prin definiție, nu au un sistem de referință, deoarece, altfel, principiul relativității lui Einstein, pe care se bazează teoria relativității, ar fi încălcat (adică un sistem de măsurare absolut cu referință). la particulele vidului fizic ar deveni posibil, ceea ce, la rândul său, ar respinge clar principiul relativității pe care se bazează SRT). Astfel, vidul fizic și particulele sale nu sunt elemente ale lumii fizice, ci doar elemente ale teoriei relativității, care nu există în lumea reală, ci doar în formule relativiste, încălcând în același timp principiul cauzalității (apar și dispar fără cauză), principiul obiectivității (particulele virtuale pot fi considerate, în funcție de dorința teoreticianului, fie existente, fie inexistente), principiul măsurabilității faptice (neobservabile, nu au ISO propriu).

Când unul sau altul fizician folosește conceptul de „vid fizic”, fie nu înțelege absurditatea acestui termen, fie este necinstit, fiind un adept ascuns sau fățiș al ideologiei relativiste.

Cel mai simplu mod de a înțelege absurditatea acestui concept este să ne întoarcem la originile apariției sale. S-a născut de Paul Dirac în anii 1930, când a devenit clar că negarea eterului în forma sa pură, așa cum a făcut un mare matematician, dar un fizician mediocru, nu mai era posibilă. Sunt prea multe fapte care contrazic acest lucru.

Pentru a apăra relativismul, Paul Dirac a introdus conceptul afizic și ilogic al energiei negative și apoi existența unei „mări” a două energii care se compensează reciproc în vid - pozitiv și negativ, precum și o „mare” de particule care compensează fiecare. altele - electroni virtuali (adică aparenti) și pozitroni în vid.

XML (eXtensible Markup Language) este un dialect simplificat al SGML conceput pentru a descrie structurile ierarhice de date de pe World Wide Web. A fost dezvoltat de un grup de lucru W3C din 1996; Recomandarea acceptată în prezent este cea de-a doua ediție a limbajului XML 1.0 (octombrie 2000), care stă la baza prezentării ulterioare.

XML este, fără îndoială, una dintre cele mai promițătoare tehnologii WWW, ceea ce explică interesul pe care îl primește atât din partea corporațiilor de dezvoltatori, cât și din partea publicului larg. Înainte de a trece la descrierea sa, pare oportun să discutăm motivele apariției sale și a dezvoltării rapide ulterioare. Pentru a face acest lucru, să încercăm să ne uităm la problemele WWW care trebuie rezolvate prin intermediul noii generații de tehnologii Web.

HTML nu exprimă sensul documentelor. HTML a fost creat pentru a descrie structurilor documente (titlu, titluri, liste, paragrafe etc.) și, într-o oarecare măsură, regulile acestora afişa(bold, italic etc.). Nu este în niciun caz destinat să descrie sens documentele scrise pe el și, în multe cazuri, datele sunt cele care constituie esența documentului, fie că este vorba de un raport bursier sau de o publicație științifică. Prin urmare, a fost nevoie de un limbaj pentru descrierea datelor și de date organizate în structuri ierarhice. HTML este greoi și inflexibil.În ultimii ani, HTML s-a transformat într-un amestec de etichete care adesea se dublează și nu aduc claritate textului documentului. Dacă adăugăm aici extensii HTML non-standard, de care toți dezvoltatorii de browsere sunt vinovați, atunci crearea de documente HTML mai mult sau mai puțin complexe devine o sarcină serioasă. Pe de altă parte, un set fix de etichete o dată pentru totdeauna nu este adesea suficient de flexibil pentru a exprima conținutul de care avem nevoie. Conceptul de browser web este prea limitat. Odată cu apariția applet-urilor Java, a limbajelor de scripting și a controalelor ActiveX, browserele web nu mai sunt simple „renderere” de documente HTML; astăzi seamănă mai mult cu programe care rulează aplicații specifice. Totuși, însuși conceptul de browser impune utilizatorului restricții inutile; în multe cazuri avem nevoie Aplicații bazate pe web, adică programe care pot citi informații specializate de pe site-uri Web și ni le oferă într-o formă familiară, de exemplu, sub formă de foi de calcul. Căutarea documentelor returnează prea multe link-uri. Cu toții folosim motoarele de căutare tot timpul și le dăm vina constant pentru neplăcerile lor. Să spunem că am nevoie de toate textele cărților lui Serghei Dovlatov disponibile pe internet. Încercarea de a căuta după numele autorului va avea ca rezultat o listă cu toate legăturile cu acel nume, inclusiv amintirile lui Dovlatov, recenzii ale cărților sale etc. Ar fi mult mai convenabil să folosesc o etichetă specială. pentru a indica exact ce caut. Nu se găsesc resurse aferente. Să presupunem acum că am găsit mai multe povestiri ale lui Dovlatov, care constituie clar o singură colecție. Este bine dacă includ un link către cuprinsul, dar de multe ori nu. Prin urmare, este necesară o modalitate de a indica faptul că un anumit grup de pagini constituie o singură resursă și ar trebui tratat ca atare. Acest lucru necesită un sistem standardizat și dezvoltat metadescriptori Pagini web.

XML este o încercare de a rezolva aceste probleme prin crearea unui limbaj de marcare simplu care descrie date structurate arbitrare. Mai precis, este un metalimbaj în care sunt scrise limbi specializate care descriu date ale unei anumite structuri. Se numesc astfel de limbi Dicționare XML. Spre deosebire de HTML, XML nu conține instrucțiuni despre cum ar trebui să fie afișate datele descrise în documentul XML. Modul în care sunt afișate datele pentru diferite dispozitive este specificat de foaia de stil XSL, care joacă aproximativ același rol pentru XML ca și CSS pentru HTML. O altă diferență fundamentală față de HTML este că XML poate conține orice etichetă pe care creatorii dicționarului XML le consideră necesare. Iată o listă cu doar câteva limbaje specializate bazate pe XML, care se află în prezent în diferite stadii de dezvoltare de către grupurile de lucru W3C:

  • Limbajul MathML al formulelor matematice;
  • Limbajul de integrare și sincronizare multimedia SMIL;
  • limbaj de grafică vectorială bidimensională SVG;
  • Limbajul meta descriere a resurselor RDF;
  • Reformularea XHTML a HTML în termeni XML.

Procesul de procesare a unui document XML este următorul. Textul acestuia este analizat printr-un program special numit procesor XML. Procesorul XML nu știe nimic despre semantica datelor din document; doar analizează textul documentului și verifică corectitudinea acestuia în ceea ce privește regulile XML. Dacă documentul formatat corect(bine formate), apoi rezultatele parsării textului sunt transferate de procesorul XML către programul de aplicație, care efectuează procesarea lor semnificativă; dacă documentul este formatat incorect, adică conține erori de sintaxă, atunci procesorul XML trebuie să le raporteze utilizatorului.

8.1.2. Aplicații ale XML

Se pune întrebarea: ce rost are folosirea „limbajului gol”, lipsit de propriul conținut? Cert este că, în ciuda aparentei sale simplități, XML are mecanisme destul de sofisticate de monitorizare a corectitudinii datelor, permite verificarea relațiilor ierarhice din cadrul unui document și, cel mai important, stabilește un standard unic pentru documentele care stochează date, indiferent de natura acestor date. . Să aruncăm o privire mai atentă asupra unor domenii de aplicare a limbajului XML.

Prelucrarea tradițională a datelor Capacitățile enumerate mai sus ne permit să considerăm XML ca un standard independent de platformă pentru stocarea și prezentarea informațiilor, care, în combinație cu alte tehnologii moderne (în special, tehnologiile Java), poate deveni baza pentru crearea oricăror aplicații independente de mașină, inclusiv schimb de date între server și client. În plus, limbajele de interogare bazate pe XML care sunt dezvoltate în mod activ astăzi pot concura serios cu limbajul SQL. Programare bazată pe documente Documentele XML pot servi drept containere pentru construirea de aplicații din interfețe și componente existente. În acest caz, documentul constă din referințe la componentele interfeței cu utilizatorul și modulele de procesare a datelor care sunt legate pe măsură ce pagina este afișată pe ecran. Arhivarea componentelor Programarea modernă se bazează pe utilizarea componentelor, care, în mod ideal, ar trebui să fie asamblate cu ușurință într-un singur întreg folosind o codare suplimentară simplă. Baza pentru aceasta este arhivarea componentelor, care, la rândul său, necesită o abordare uniformă a stocării și utilizării ulterioare a acestora. Există toate motivele să credem că, în viitorul apropiat, documentele XML vor oferi o alternativă la stocarea componentelor ca module binare, ceea ce este comun astăzi. Încorporarea datelor Odată ce am definit structura datelor XML, este fundamental ușor să scriem un generator de cod care prelucrează aceste date. Pe măsură ce se dezvoltă un astfel de software, toate procesarea de rutină a datelor (inclusiv verificarea corectitudinii, prezentarea în formatul necesar etc.) poate fi automatizată, permițând dezvoltatorilor să se concentreze asupra părților non-standard ale produsului creat.

8.1.3. Structura documentului XML

Un document XML constă din declarații, elemente, comentarii, caractere speciale și directive. Toate aceste componente ale documentului sunt descrise în acest capitol.

8.1.3.1. Elemente și atribute

XML asta limba etichetat marcarea documentelor. Cu alte cuvinte, orice document XML este o colecție elemente, iar începutul și sfârșitul fiecărui element sunt indicate prin semne speciale numite Etichete.

Un element este format din trei părți: o etichetă de început, conținut și o etichetă de final. Eticheta este textul cuprins între paranteze unghiulare "<" и ">„. Eticheta de sfârșit are același nume ca eticheta de început, dar începe cu o bară oblică „/”. Exemplu de element XML:

Serghei Dovlatov

Numele elementelor sunt sensibile la majuscule și minuscule, de ex. , Și acestea sunt denumirile diferitelor elemente. Eticheta de închidere este întotdeauna necesară. Dacă eticheta este gol, adică nu are conținut și o etichetă de închidere, atunci are o formă specială:

<элемент/>

Orice element poate avea atribute, care conține informații suplimentare despre element. Atributele sunt întotdeauna incluse în eticheta de început a elementului și arată astfel:

Attribute_name="valoare_atribut"

Atributul trebuie să aibă o valoare, care trebuie să fie întotdeauna cuprinsă între ghilimele simple sau duble. Numele atributelor sunt, de asemenea, sensibile la majuscule. Un exemplu de element care are un atribut:

Serghei Dovlatov

Elementele trebuie fie să se succedă, fie să fie imbricate unele în altele:

Parte de vorbire Brodsky, Iosif Marșul Singuraticului Dovlatov, Serghei

Aici elementul books conține două elemente de carte imbricate, care la rândul lor au un atribut isbn și conțin trei elemente consecutive: titlu, autor și prezent, acesta din urmă fiind gol, deoarece în acest caz îi corespunde un steag logic.

Din descrierea de mai sus este clar că sintaxa XML seamănă cu sintaxa HTML (ceea ce este firesc, deoarece ambele sunt dialecte ale aceluiași limbaj SGML), dar cerințele pentru proiectarea documentelor XML corecte sunt mai mari. O altă diferență foarte importantă între XML și HTML este că conținutul elementelor, adică tot ceea ce este conținut între etichetele de început și de sfârșit, este considerat date. Aceasta înseamnă că XML nu ignoră spațiul și rupturile de linie la fel ca HTML.

8.1.3.2. Prolog și directive

Orice document XML este format din prologȘi element rădăcină, De exemplu:

Marșul Singuraticului Dovlatov, Serghei

În acest exemplu, prologul este redus la un singur directivă (prima linie a documentului) indicând versiunea XML. Este urmat de un element XML cu un nume unic, care conține toate celelalte elemente și se numește rădăcină. Directiva (instrucțiunea de procesare) este o expresie inclusă în etichete speciale "", care conține instrucțiuni pentru programul care procesează documentul XML.

Standardul XML rezervă o singură directivă , indicând versiunea limbajului XML căreia îi corespunde acest document (nu există încă o a doua versiune a XML). De fapt, această directivă este oarecum mai bogată și în forma sa cea mai generală arată astfel:

Aici atributul de codificare specifică codificarea caracterelor documentului. În mod implicit, documentele XML trebuie create în format UTF-8 sau UTF-16. Dacă se folosește orice altă codificare a caracterelor, atunci numele acestuia conform tabelului A7.1 ar trebui să fie indicat în acest atribut, așa cum se arată în exemplu. Atributul independent indică dacă documentul conține. Valoarea da înseamnă că nu există astfel de secțiuni, valoarea nu înseamnă că există.

8.1.3.3. Comentarii

Documentele XML pot conține comentarii, care sunt ignorate de aplicația care procesează documentul. Comentariile urmează aceleași reguli ca și în HTML:

  • incepeti comentariul cu "",
  • Nu utilizați caractere „--” în comentarii.

Exemple de comentarii:

8.1.3.4. Nume și detalii

Toate nume elementele, atributele și secțiunile trebuie să înceapă cu o literă Unicode și să fie compuse din litere, cifre, puncte (.), liniuțe de subliniere (_) și cratime (-). Singura restricție este că nu trebuie să înceapă cu o combinație de litere xml în niciun caz; astfel de nume sunt rezervate pentru viitoarele extensii de limbă. Este important ca standardul să permită utilizarea nu numai a literelor engleze în nume, ci și a oricăror altele, deși procesoarele XML existente sunt adesea limitate de sistemele de codificare pe care le au în vedere creatorii lor. De aceea scriem nume în engleză în exemplele noastre.

Date, adică conținutul elementelor și valorile atributelor, pot consta din orice caractere, cu excepția celor enumerate în secțiunea următoare.

8.1.3.5. Simboluri speciale

Un număr de caractere în XML sunt rezervate și trebuie reprezentate într-un mod special:

Dacă doriți, puteți utiliza codificarea caracterelor numerice în standardul Unicode. În acest caz, simbolul poate fi specificat prin codul său zecimal ( cod; ) sau cod hexazecimal ( cod; ). De exemplu © reprezintă simbolul dreptului de autor © , A A– scrisoare rusă A. După cum vom vedea mai târziu, XML este mult mai bogat decât HTML în utilizarea unor astfel de construcții, deoarece permite înlocuirea oricăror expresii simbolice în textul documentelor.

8.1.3.6. Secţiuni CDATA

O altă modalitate de a include caractere invalide în conținutul elementelor XML este utilizarea așa-numitelor. secțiuni CDATA(abreviat de la Character DATA, adică date de caractere). Să presupunem că dorim să facem din conținutul elementului de aspect un fragment de text HTML, de exemplu:

Titlu

Această construcție este incorectă, deoarece eticheta HTML H1 va fi percepută ca o etichetă XML în acest caz. Pentru ca întregul conținut al elementului de layout să fie tratat ca date, trebuie să îl închidem într-o secțiune CDATA:

După cum putem vedea din acest exemplu, secțiunea CDATA este închisă în delimitatori. Totul din această secțiune este considerat date de caractere; în special, secțiunile CDATA nu pot fi imbricate.

8.1.4. Secțiunile și declarațiile acestora

8.1.4.1. Secțiuni de document XML

Din punct de vedere fizic, un document XML poate consta din mai multe secțiuni(entitati). În acest caz, elementul rădăcină al documentului este, de asemenea, o secțiune, care este numită secțiunea documentului, deși nu este special conceput în niciun fel. Toate secțiunile au conținut; Toate acestea, cu excepția secțiunii de documente și a DTD-ului extern, au un nume.

Din punctul de vedere al analizei documentelor, secțiunile sunt împărțite în analizate și neparsate. Secțiune neanalizată(entitate neparsată) este o resursă al cărei conținut este tratat de procesorul XML ca date externe fără a le analiza (de exemplu, text care nu este un document XML). Secțiunile neparsate au întotdeauna notaţie, indicând formatul acestora. Secțiunile analizate(entitățile analizate) sunt concepute pentru înlocuirea textului: ori de câte ori procesorul XML întâlnește numele unei astfel de secțiuni într-un document, îl înlocuiește cu conținutul acelei secțiuni.

8.1.4.2. Secțiuni interne

Declarațiile de secțiuni sunt împărțite în interne și externe. Declarația Secției Interne arata asa:

Include conținutul obiectului (parametrul valoare) și este folosit pentru a înlocui această valoare în locul numelui secțiunii. Putem, de exemplu, să introducem atributul în exemplul cu cărți genși folosiți secțiuni interne pentru a seta genul:

]> Parte de vorbire Brodsky, Iosif Marșul Singuraticului Dovlatov, Serghei

Din acest exemplu este clar că link către secțiune (referință la entitate) arată exact la fel ca o referință de caracter special, adică are forma &name; . De fapt, caracterele speciale sunt exact aceleași cu referințele, dar secțiunile corespunzătoare sunt specificate implicit în declarația internă a limbajului XML. Astfel de substituții de text sunt utile pentru specificarea abrevierilor pentru a reduce dimensiunea unui document și pentru introducerea de notații pentru câmpurile de document modificate frecvent. Deci, de exemplu, putem pune data următoarei revizuiri a unei publicații într-o secțiune internă și apoi modificam doar valoarea acestei secțiuni.

8.1.4.3. Paravane exterioare

Există două opțiuni declarații de secțiune exterioară:

Prima opțiune este numită partiția sistemului, al doilea sectiunea publica. Ambele asociază numele secțiunii cu o resursă externă specificată de URI-ul acesteia, care trebuie să fie în formă codificată și să nu conțină. Este apelat URI-ul resursei externe ID-ul de sistem al partiției. Utilizarea unei resurse externe depinde de mai mulți factori:

  • Dacă declarația conține un parametru NDATA care specifică notația secțiunii, atunci secțiunea este neanalizată.
  • Dacă parametrul NDATA nu este specificat, atunci secțiunea este analizată și resursa corespunzătoare trebuie să fie un document XML. Aceasta înseamnă că în loc de un link către o secțiune, textul documentului va include textul resursei corespunzătoare.
  • Secțiunea publică poate conține o linie care specifică ID secție publică. Un procesor XML poate folosi acest identificator pentru a genera un URI alternativ pentru această secțiune. Dacă eșuează, atunci trebuie să folosească ID-ul de sistem pentru a încărca conținutul partiției.

Exemple de declarații de resurse externe:

Secțiunea exterioară care este analizată trebuie să înceapă cu o directivă, care poate să nu conțină un număr de versiune, dar trebuie să conțină o codificare a caracterelor. Această directivă nu face parte din textul inline.

8.1.5. Declarație tip document

Declarație tip document XML(declarația tip document) conține definirea tipului de document(definiția tipului de document, DTD) sau indică unul. DTD este o gramatică specială care descrie sintaxa unei anumite clase de documente; Regulile pentru crearea DTD-urilor sunt discutate în capitolul. 8.2. Aici descriem doar declarațiile care oferă acces la DTD. O declarație de tip de document, ca o declarație de secțiune, poate fi internă sau externă. Declarația internă arată astfel:

și extern aceleași două opțiuni ca și partițiile externe:

Astfel, diferența dintre o declarație de tip de document și o declarație de secțiune este doar aceea:

  • începe cu cuvântul cheie!DOCTYPE, nu!ENTITY;
  • poate avea un corp cuprins între paranteze drepte.

Numele unei astfel de declarații trebuie să se potrivească cu numele elementului rădăcină pe care îl descrie, iar corpul trebuie să respecte regulile de construcție a DTD și va fi descris în Capitol. 8.2. Deocamdată, rețineți că poate conține declarații de secțiune. A fost dat un exemplu de declarație internă. Exemple de declarații externe:

Rețineți că o declarație de tip de document extern poate conține și o referință la un DTD, care este apelat subset extern DTD și un corp care descrie completări la DTD extern (se numește subset intern DTD).

8.1.6. Exemplu de document XML

Pentru a pune toate conceptele descrise mai sus într-un singur întreg, iată un exemplu de document XML complet care conține o listă de prețuri de librărie.

]> Marșul celor condamnați Serghei Dovlatov 60.00 Parte de vorbire Iosif Brodsky 55.00 Antigona Sofocle 103.50

Continuăm studiul XML din nou și în acest articol ne vom familiariza cu astfel de construcții XML precum instrucțiuni de procesare, comentarii, atribute și alte elemente XML. Aceste elemente sunt de bază și vă permit să marcați în mod flexibil, în strictă conformitate cu standardul, documente de absolut orice complexitate.

Am discutat deja parțial câteva puncte, cum ar fi etichetele XML, în articolul anterior „”. Acum vom atinge din nou acest subiect și îl vom examina mai detaliat. Acest lucru se face special pentru a vă facilita înțelegerea întregii imagini a constructelor XML.

elemente XML. Elemente XML goale și nevide

După cum sa menționat în articolul anterior, etichetele în XML nu marchează pur și simplu textul, așa cum este cazul în HTML, ci evidențiază elemente individuale (obiecte). La rândul lor, elementele organizează ierarhic informațiile într-un document, ceea ce a făcut din ele principalele unități structurale ale limbajului XML.

În XML, elementele pot fi de două tipuri - goale și nevide. Elementele goale nu conțin date, cum ar fi text sau alte constructe. Spre deosebire de elementele goale, elementele nevide pot conține orice date, cum ar fi text sau alte elemente și constructe XML. Pentru a înțelege ideea celor de mai sus, să ne uităm la exemple de elemente XML goale și nevide.

Element XML gol

Element XML nevid

Conținutul elementului...

După cum putem vedea din exemplul de mai sus, principala diferență dintre elementele goale și cele negoale este că acestea constau dintr-o singură etichetă. În plus, este de remarcat faptul că în XML toate numele sunt sensibile la majuscule. Aceasta înseamnă că numele myElement, MyElement, MYELEMENT etc. diferă unul de celălalt, așa că acest moment trebuie amintit imediat pentru a evita greșelile în viitor.
Deci, ne-am dat seama de elemente. Acum să trecem la următorul punct, care este organizarea logică a documentelor XML.

Organizarea logică a documentelor XML. Structura arborescentă a datelor XML

După cum vă amintiți, construcția principală a limbajului XML este elementele, care pot conține alte constructe imbricate și, prin urmare, pot forma o structură ierarhică sub forma unui arbore. În acest caz, elementul părinte va fi rădăcina și toate celelalte elemente copil vor fi ramurile și frunzele arborelui XML.

Pentru a înțelege mai ușor esența celor de mai sus, să ne uităm la următoarea imagine cu un exemplu.

După cum putem vedea, organizarea unui document XML ca arbore este o structură destul de simplă de procesat. În același timp, complexitatea expresivă a copacului în sine este destul de mare. Reprezentarea arborelui este cea mai optimă modalitate de a descrie obiecte în XML.

Atributele XML. Reguli pentru scrierea atributelor în XML

În XML, elementele pot conține și atribute cu valori atribuite acestora, care sunt plasate între ghilimele simple sau duble. Atributul pentru un element este setat după cum urmează:

În acest caz, a fost folosit un atribut cu numele „atribut” și valoarea „valoare”. Merită remarcat imediat că atributul XML trebuie să conțină o anumită valoare și nu poate fi gol. În caz contrar, codul va fi incorect din punct de vedere XML.

De asemenea, merită să acordați atenție utilizării ghilimelelor. Valorile atributelor pot fi incluse fie între ghilimele simple, fie duble. În plus, este posibil să folosiți unele ghilimele în interiorul altora. Pentru a demonstra, luați în considerare următoarele exemple.

Înainte de a ne uita la alte constructe XML, este de remarcat, de asemenea, că atunci când se creează atribute, caracterele speciale precum și „&” sau parantezele unghiulare „ nu pot fi folosite ca valori.<>" Aceste caractere sunt rezervate ca caractere de control („&” este o entitate, iar „<» и «>» deschideți și închideți eticheta elementului) și nu poate fi folosit în „forma sa pură”. Pentru a le folosi, trebuie să recurgeți la înlocuirea caracterelor speciale.

Instrucțiuni de procesare XML (instrucțiuni de procesare). Declarație XML

XML are capacitatea de a include instrucțiuni într-un document care conțin informații specifice pentru aplicațiile care vor procesa un anumit document. Instrucțiunile de procesare în XML sunt create după cum urmează.

După cum puteți vedea din exemplul de mai sus, în XML, instrucțiunile de procesare sunt incluse în ghilimele de colț cu un semn de întrebare. Acesta este un pic ca cel obișnuit la care ne-am uitat în primele lecții de PHP. Prima parte a instrucțiunii de procesare specifică aplicația sau sistemul căruia îi este destinată a doua parte a acestei instrucțiuni sau conținutul acesteia. Cu toate acestea, instrucțiunile de prelucrare sunt valabile numai pentru acele aplicații cărora le sunt adresate. Un exemplu de instrucțiune de procesare ar putea fi următoarea instrucțiune.

Este demn de remarcat faptul că XML are o construcție specială care este foarte asemănătoare cu o instrucțiune de procesare, dar în sine nu este una. Vorbim despre o declarație XML care transmite software-ului de procesare câteva informații despre proprietățile documentului XML, precum codificarea, versiunea limbii în care este scris documentul etc.

După cum puteți vedea din exemplul de mai sus, declarația XML conține așa-numitele pseudo-atribute, care sunt foarte asemănătoare cu atributele obișnuite despre care am vorbit mai sus. Cert este că, prin definiție, o declarație XML și instrucțiuni de procesare nu pot conține atribute, așa că aceste declarații sunt numite pseudo-atribute. Acest lucru merită amintit pentru viitor pentru a evita diverse greșeli.

Deoarece ne-am ocupat de pseudo-atribute, să vedem ce înseamnă ele.

  • Codificare – este responsabil pentru codificarea documentului XML. De obicei este folosită codificarea UTF8.
  • Versiune – versiunea limbajului XML în care este scris acest document. De obicei, aceasta este versiunea XML 1.0.

Ei bine, acum să trecem la partea finală a articolului și să luăm în considerare astfel de constructe XML ca comentarii și secțiuni CDATA.

Sintaxa de marcare.

Pentru a limita etichetele în marcajul XML, la fel ca în HTML, sunt folosite paranteze unghiulare: eticheta începe cu un semn mai puțin decât (<) и завершается знаком "больше" (>). Dar este important să rețineți că, spre deosebire de HTML, toate markupurile XML țin cont de majuscule și minuscule, incluzând atât numele etichetelor, cât și valorile atributelor.

Simboluri.

Deoarece XML este destinat a fi utilizat pe scară largă, caracterele nu sunt limitate la setul de caractere ASCII pe 7 biți. Caracterele permise în XML includ cele trei caractere de control ASCII, toate caracterele ASCII obișnuite și aproape toate celelalte caractere Unicode.

Nume.

În XML, toate numele trebuie să înceapă cu o literă, liniuță de subliniere (_) sau două puncte (:) și să continue numai cu caractere de nume valide, care pot conține doar litere incluse în secțiunea de caractere Unicode, cifre arabe, cratime, semne liniuțe, puncte și colon. Cu toate acestea, numele nu pot începe cu un șir xml în niciun caz. Numele care încep cu aceste caractere sunt rezervate pentru utilizare de către W3C. Trebuie reținut că, deoarece literele nu sunt limitate doar la caractere ASCII, cuvintele din limba maternă pot fi folosite în nume.

Structura documentului XML.

Orice document XML constă din următoarele părți:

    Prolog opțional.

    Corpul documentului.

    Un epilog opțional care urmează arborele de elemente.

Să ne uităm la fiecare dintre părți mai detaliat.

Prologul documentului XML.

Documentul XML începe cu un prolog. Prologul conține câteva instrucțiuni pentru analizatorul XML și aplicații.

Prologul constă din mai multe părți:

    o Declarație XML opțională care este inclusă între caractere. Anunțul conține:

    marca xml și numărul versiunii specificației XML;

    o indicație a codificării caracterelor (codificarea) în care este scris documentul (în mod implicit codificare = "UTF-8");

    parametrul de sine stătător care poate lua valorile „da” sau „nu” (în mod implicit, independent „da”). O valoare de „da” indică faptul că documentul conține toate declarațiile de elemente necesare, iar „nu” indică faptul că sunt necesare DTD-uri externe.

Toate acestea împreună ar putea arăta astfel:

.

Este important de reținut că într-o declarație XML este necesar doar atributul versiune, toate celelalte atribute pot fi omise și, prin urmare, iau valori implicite. De asemenea, trebuie să rețineți că toate aceste atribute trebuie specificate numai în ordinea dată mai sus.

    comentarii.

    procesarea comenzilor.

    simboluri spații goale.

    o declarație opțională de tip de document, DTD (Document Type Declaration), care este inclusă între caractereși poate cuprinde mai multe linii. Această parte declară etichetele utilizate în document sau oferă un link către fișierul în care sunt înregistrate astfel de declarații.

Declarația tipului de document poate fi, de asemenea, urmată de comentarii, comenzi de procesare și caractere de spațiu alb.

Deoarece toate aceste părți sunt opționale, prologul poate fi omis.

Corpul documentului XML.

Corpul documentului este format din unul sau mai multe elemente. Într-un document XML formatat corespunzător, elementele formează un arbore ierarhic simplu, care conține în mod necesar un element rădăcină în care sunt imbricate toate celelalte elemente ale documentului. XML pune o constrângere extrem de importantă asupra elementelor: acestea trebuie să fie imbricate corect. Acest lucru face destul de ușor să imbricați un document XML într-un altul fără a perturba structura documentului, iar elementul rădăcină al documentului imbricat va deveni pur și simplu unul dintre elementele documentului în care este imbricat. În acest sens, ne confruntăm cu o altă limitare și anume aceea că denumirile elementelor trebuie să fie unice în cadrul documentului, întrucât în ​​documentul inclus aceleași denumiri ca și în documentul anexat pot avea o cu totul altă semnificație. Pentru a rezolva problema coincidenței numelor, a fost introdus conceptul de spațiu de nume.

Numele elementului rădăcină este considerat numele întregului document și este indicat în a doua parte a prologului după cuvântul Doctype. Dacă DTD-ul se află în interiorul unui document XML, acesta este plasat între paranteze drepte după numele elementului rădăcină:

Dar, de obicei, DTD-ul este definit pentru mai multe documente XML simultan. În acest caz, este convenabil să îl scrieți separat de document și apoi în loc de paranteze drepte se scrie unul dintre cuvintele System sau Public urmat de adresa sub forma unui URI (Uniform Resource Identifier) ​​al fișierului cu definiția DTD. Pentru toate scopurile practice, un URI este considerat echivalent cu un URL, deși în principiu poate fi orice nume unic. Definiția DTD, de exemplu, ar putea arăta astfel:

Spații de nume XML

Deoarece diferite documente XML pot conține aceleași nume de etichete și atribute ale acestora, care au semnificații complet diferite, este necesar să se poată distinge cumva între ele. Pentru a face acest lucru, numele etichetelor și atributelor primesc un prefix scurt, care este separat de nume prin două puncte. Prefixul numelui este asociat cu un identificator care definește spațiul de nume. Toate numele de etichete și atribute ale căror prefixe sunt asociate cu același identificator formează un singur spațiu de nume, în care numele trebuie să fie unice. Prefixul și identificatorul spațiului de nume sunt definite de atributul xmlns după cum urmează:

În cele ce urmează, numele etichetelor și atributelor pe care dorim să le atribuim spațiului de nume „http://URI_namespace” sunt prefixate cu ns, de exemplu:

Novosibirsk.

Atributul xmlns poate apărea pe orice element XML, nu doar pe elementul rădăcină. Prefixul pe care îl definește poate fi folosit în elementul în care este scris atributul xmlns și în toate elementele imbricate în el. Mai mult, mai multe spații de nume pot fi definite într-un singur element. În elementele imbricate, spațiul de nume poate fi suprascris prin asocierea prefixului cu un alt identificator. Apariția unui nume de etichetă fără prefix într-un document care utilizează un spațiu de nume înseamnă că numele aparține spațiului de nume implicit. În orice caz, prefixele care încep cu caractere xml sunt rezervate limbajului XML însuși.

Numele împreună cu prefixul se numește nume extins sau calificat. Partea numelui scrisă după două puncte se numește partea locală a numelui.

Identificatorul de spațiu de nume trebuie să fie sub forma unui URI. URI-ul nu are semnificație și poate să nu corespundă cu nicio adresă de internet reală. În acest caz, un URI poate fi considerat ca un șir de caractere unic care identifică un spațiu de nume.

Conform regulilor SGML și XML, două puncte pot fi folosite în nume ca caracter obișnuit, deci oricare program, care „nu cunoaște” spațiul de nume, analizează documentul și tratează numele calificat ca pe un nume unic obișnuit. Rezultă, în special, că prefixele de nume nu pot fi omise dintr-o declarație de tip de document.

Elemente.

Un document XML este format din elemente. Elementul începe cu o etichetă de deschidere, apoi conținutul opțional al elementului, urmat de o etichetă de închidere (spre deosebire de HTML, eticheta de închidere este necesară, cu excepția elementelor fără conținut, așa-numitele elemente goale, care pot fi scrise într-o formă prescurtată) . Conținutul unui element poate fi alte elemente, simbolice date, referințe de simbol, referințe de entități, comentarii, secțiuni CDATA, instrucțiuni de procesare.

Deschiderea etichetelor.

Eticheta de deschidere începe cu un semn mai puțin decât (<) и завершается знаком "больше" (>), în interiorul căruia este plasat numele elementului:

<имя_элемента>.

Etichete de închidere.

Eticheta de închidere începe cu un semn mai puțin decât (<) за которым следует "косая черта" (/) после которой повторяется имя элемента из соответствующего открывающего тега и завершается знаком "больше" (>):

.

Este necesar să rețineți că fiecare etichetă de închidere trebuie să corespundă etichetei sale de deschidere și, de asemenea, că imbricarea etichetelor în XML este strict controlată, deci este necesar să se monitorizeze ordinea etichetelor de deschidere și de închidere.

Astfel, elementul complet arată astfel:

<имя_элемента>continutul elementului

Elemente goale.

Dacă conținutul elementului nu conține un singur caracter, nici măcar un spațiu, atunci eticheta de închidere nu trebuie să fie scrisă. În acest caz, eticheta de deschidere trebuie să se încheie cu caractere „/>”.

Astfel, o etichetă de element goală începe cu un semn mai puțin decât (<) за которым следует имя элемента и завершается знаками "косая черта" (/) после которой идет знак "больше" (>):

<имя_элемента/>.

Date de caractere.

Caracter date este orice text care este conținutul unui element sau valoarea unui atribut. Dacă trebuie să inserați unele simboluri în conținutul unui element care sunt utilizate în scopuri de serviciu, de exemplu, semnele „mai mare decât” sau „mai puțin decât”, care sunt delimitatori de marcaj și pot fi înțelese ca începutul sau sfârșitul unui imbricat. eticheta, atunci aceste caractere trebuie înlocuite cu link-uri sau codurile lor numerice.

Pentru a insera un anumit simbol în textul unui document, care, de exemplu, nu este prezent în aspectul tastaturii sau poate fi interpretat incorect de către analizor, se folosesc referințe de simbol. O referință de simbol trebuie să înceapă cu un ampersand și să se termine cu un punct și virgulă.

cod_caracter_în_Unicode;.

Codul caracterelor poate fi scris și în formă hexazecimală. În acest caz, este precedat de simbolul „x”:

Cod_caracter_hexazecimal;.

În plus, există substituții denumite, definite în specificația XML și implementate în toate analizatoarele compatibile cu XML, care fac textul documentului mai ușor de citit de către om. Folosind aceste înlocuiri denumite, puteți insera caractere precum:

Simboluri

Substituții denumite

Referințele la entități vă permit să includeți orice constante de șir în conținutul elementelor sau în valoarea atributelor. Referințele la entități, precum și referințele la caractere, încep cu un ampersand, urmat de numele entității și se termină cu punct și virgulă:

Comentarii.

Dacă trebuie să inserați un comentariu în textul unui document sau să faceți un fragment „invizibil” pentru programul de analiză, atunci acesta este formatat după cum urmează:

XML este destinat a fi utilizat pe scară largă, caracterele nu sunt limitate la setul de caractere ASCII pe 7 biți. Caracterele permise în XML includ cele trei caractere de control ASCII, toate caracterele ASCII obișnuite și aproape toate celelalte caractere Unicode.

Nume.

În XML, toate numele trebuie să înceapă cu o literă, liniuță de subliniere (_) sau două puncte (:) și să continue numai cu caractere de nume valide, care pot conține doar litere incluse în secțiunea de caractere Unicode, cifre arabe, cratime, semne liniuțe, puncte și colon. Cu toate acestea, numele nu pot începe cu un șir xml în niciun caz. Numele care încep cu aceste caractere sunt rezervate pentru utilizare de către W3C. Trebuie reținut că, deoarece literele nu se limitează exclusiv la caractere ASCII, cuvintele din limba maternă pot fi folosite în nume.

Structura documentului XML.

Orice document XML constă din următoarele părți:

  • Prolog opțional.
  • Corpul documentului.
  • Un epilog opțional care urmează arborele de elemente.

Să ne uităm la fiecare dintre părți mai detaliat.

Prologul documentului XML.

Documentul XML începe cu un prolog. Prologul conține câteva instrucțiuni pentru analizatorul XML și aplicații.

Prologul constă din mai multe părți:

  1. o Declarație XML opțională care este inclusă între caractere. Anunțul conține:
    • marca xml și numărul versiunii specificației XML;
    • o indicație a codificării caracterelor (codificarea) în care este scris documentul (în mod implicit codificare = "UTF-8");
    • parametrul de sine stătător care poate lua valorile „da” sau „nu” (în mod implicit standalone="yes" ). O valoare de „da” indică faptul că documentul conține toate declarațiile de elemente necesare, iar „nu” indică faptul că sunt necesare DTD-uri externe.

    Toate acestea împreună ar putea arăta astfel:

    .

    Este important de reținut că într-o declarație XML este necesar doar atributul versiune, toate celelalte atribute pot fi omise și, prin urmare, iau valori implicite. De asemenea, trebuie să rețineți că toate aceste atribute trebuie specificate numai în ordinea dată mai sus.

  2. comentarii.
  3. procesarea comenzilor.
  4. simboluri spații goale.
  5. opțional declarație tip document, DTD (Declarație de tip de document) care este inclusă între caractereși poate cuprinde mai multe linii. Această parte declară etichetele utilizate în document sau oferă un link către fișierul în care sunt înregistrate astfel de declarații.

După declarație tip document pot urma, de asemenea, comentarii, comenzi de procesare și spații albe.

Deoarece toate aceste părți sunt opționale, prologul poate fi omis.

Corpul documentului XML.

Corpul documentului este format din unul sau mai multe elemente. Într-un document XML formatat corespunzător, elementele formează un arbore ierarhic simplu, care conține în mod necesar element rădăcină( element rădăcină ) în care sunt imbricate toate celelalte elemente ale documentului. XML pune o constrângere extrem de importantă asupra elementelor: acestea trebuie să fie imbricate corect. Acest lucru face destul de ușor să încorporați un document XML într-un altul fără a încălca structura documentului, în timp ce element rădăcină a unui document imbricat va deveni pur și simplu unul dintre elementele documentului în care este imbricat. În acest sens, ne confruntăm cu o altă limitare, și anume aceea că denumirile elementelor trebuie să fie unice în cadrul documentului, întrucât în ​​documentul inclus aceleași nume ca și în documentul anexat pot avea o cu totul altă semnificație. Pentru a rezolva problema coincidenței numelor, a fost introdus conceptul de spațiu de nume.

Numele elementului rădăcină este considerat numele întregului document și este indicat în a doua parte a prologului după cuvântul Doctype. Dacă definiția DTD este în interiorul unui document XML, atunci este plasată între paranteze drepte după numele elementului rădăcină:

Dar, de obicei, DTD-ul este definit pentru mai multe documente XML simultan. În acest caz, este convenabil să îl scrieți separat de document și apoi în loc de paranteze drepte se scrie unul dintre cuvintele System sau Public urmat de adresa sub forma unui URI (Uniform Resource Identifier) ​​al fișierului cu definiția DTD. Pentru toate scopurile practice, un URI este considerat echivalent cu o adresă URL, deși în principiu poate fi orice nume unic. Definiția DTD, de exemplu, ar putea arăta astfel:

Spații de nume XML

Deoarece diferite documente XML pot conține aceleași nume de etichete și atributele acestora, care au semnificații complet diferite, este necesar să le putem distinge cumva. Pentru a face acest lucru, numele etichetelor și atributelor primesc un prefix scurt, care este separat de nume prin două puncte. Prefixul numelui este asociat cu un identificator care definește spatiu de nume(spațiul de nume). Toate numele etichetelor și atributelor ale căror prefixe sunt asociate cu același identificator formează unul singur spatiu de nume, în care numele trebuie să fie unice. Prefixul și identificatorul spațiului de nume sunt definite de atributul xmlns după cum urmează:

În viitor, numele etichetelor și atributelor pe care dorim să le atribuim spațiului de nume „http://URI_namespace” sunt prefixate cu ns, de exemplu:

Novosibirsk.

Atributul xmlns poate apărea pe orice element XML, nu doar pe elementul rădăcină. Prefixul pe care îl definește poate fi folosit în elementul în care este scris atributul xmlns și în toate elementele imbricate în el. Mai mult, mai multe spații de nume pot fi definite într-un singur element. În elemente imbricate spatiu de nume poate fi suprascris prin asocierea prefixului cu un alt identificator. Apariția unui nume de etichetă fără prefix într-un document care utilizează spatiu de nume, înseamnă că numele aparține spațiului de nume implicit. În orice caz, prefixele care încep cu caractere xml sunt rezervate limbajului XML însuși.

Numele împreună cu prefixul se numește nume extins sau calificat. Partea numelui scrisă după două puncte se numește partea locală a numelui.