CUPRINS> De la DTD la XML Schema INTRO
INAPOI INAINTE


În această conversație:

XML - Scheme XML
XML - Tipuri de date predefinite utilizate în schemele XML
XML - Construiți o schemă XML
XML - Software XML Schema. Aplicații
XML - Temă


 
  XML - Scheme XML    
     

Pe parcursul conversațiilor precedente am învățat să utilizăm DTD XML pentru a defini vocabularul și structura documentelor XML. Am învățat de asemenea cum să validăm un document în raport cu un DTD, verificând structura documentului cu cea descrisă prin DTD.

Autorii XML-ului doreau la început să conserve o compatibilitate maximă cu SGML (Standard Generalized Markup Language) predecesorul său, mult mai complex. Din acest motiv, versiunea 1.0 a recomandării XML specifică o formă simplificată a DTD-ului pentru crearea de vocabulare și validarea documentelor XML.
O dată cu dezvoltarea și răspândirea XML-ului, limitele DTD-ului apăreau din ce în ce mai jenante.

Remarcă

Limitele DTD-ului sunt următoarele:
Un DTD nu este un document XML;
Regulile de instanțiere sunt limitate;
Controlul tipului de conținut al unui element este limitat.

Pentru a elimina aceste limite ale DTD-ului consorțiul W3C a decis să creeze un nou standard (mai 2001) – XML Schema, capabil să răspundă nevoilor utilizatorilor.
Așadar, va trebui să alegeți când creați documente XML, între schemele XML și DTD XML. Analizați și decideți!

Scheme XML sau DTD XML?

Schemele XML prezintă, în raport cu DTD XML următoarele avantaje:
permit definirea tipurilor de date într-un mod mult mai precis;
sunt compatibile cu spațiile de nume ceea ce permite combinarea mai multor vocabulare în cadrul aceluiași document;
sunt ele însele documente XML.

DTD XML prezintă următoarele avantaje:
utilizează o sintaxă mai simplă;
sunt mult mai concise;
sunt compatibile cu un număr mai mare de aplicații (cel puțin pentru moment!)

Remarcă

Probabil schemele XML și DTD XML vor continua să coabiteze pentru o bună perioadă de timp!
Pentru a lua corect o decizie în privința utilizării schemelor XML sau DTD XML trebuie să țineți cont și de compatibilitatea celor două tehnici cu instrumentele pe care le aveți la dispoziție.
Cu excepția spațiilor de nume, alegerea între scheme XML și DTD XML nu afectează structura documentelor pe care le creați. Puteți crea și valida aceleași documente cu ajutorul unei scheme XML sau a unui DTD. O schemă XML oferă în plus posibilitatea validării conținutului elementelor.

top
 
  XML - Tipuri de date predefinite utilizate în schemele XML    
     

Înainte de a construi împreună prima schemă XML, va trebui să înțelegem principiile fundamentale. A construi o schemă fără a respecta anumite principii … nu se poate!

Tipuri de date predefinite

Unul din principalele avantaje ale schemelor XML este acela că permit specificarea tipului de conținut și a atributelor elementelor XML. O schemă XML poate specifica dacă un element trebuie să conțină un număr (întreg, zecimal etc.) ceea ce un DTD nu permitea.
Cele mai importante tipuri de date predefinite utilizate în schemele XML sunt următoarele [2]:

tipuri simple numerice
     - Boolean (definește tipul de date boolean – true sau false; 1 sau 0);
     - Binary (definește tipul de date binar);
     - Integer (orice întreg situat în intervalul închis -126789 la 126789);
     - NonPositiveInteger (orice număr întreg negativ sau nul situat în intervalul închis -126789 la 0);
     - nonNegativeInteger (orice număr întreg pozitiv sau nul situat în intervalul închis 0 la 126789);
     - positiveInteger (orice număr întreg pozitiv situat în intervalul închis 1 la 126789);
     - negativeInteger (orice număr întreg negativ situat în intervalul închis -126789 la -1);
     - byte (orice număr întreg situat în intervalul închis -1 la 126);
     - short (orice număr întreg situat în intervalul închis -1 la 12678);
     - int (orice număr întreg situat în intervalul închis -1 la 126789675);
     - long (orice număr întreg situat în intervalul închis -1 la 12678967543233);
     - unsignedByte (orice număr întreg situat în intervalul închis 0 la 126);
     - unsignedShort (orice număr întreg situat în intervalul închis 0 la 12678);
     - unsignedInt (orice număr întreg situat în intervalul închis 0 la 1267896754);
     - unsignedLong (orice număr întreg situat în intervalul închis 0 la 12678967543233);
     - decimal (orice număr zecimal pozitiv sau negativ);
     - float (orice număr zecimal situat în intervalul 3.4e+38 la 1.4e-45).
–  tipuri temporale
     - time (definește ora);
     - date (definește data calendaristică: zzllaa);
     - dateTime (Exemplu: 2003-09-01 T13:20:00+02:00);
     - duration (Exemple: P-1347M; P134Y; P3Y4M10J T8H30M13S);
     - GYearMonth (Exmplu: 2003-09).
tipuri DTD
     - ID;
     - IDREF;
     - IDREFS;
     - NMTOKEN;
     - NMTOKENS;
     - ENTITY;
     - NOTATION;
     - Name.
tipuri particulare
     - string (definește un șir de caractere);
     - hexBinary (definește datele în sistemul hexazecimal);
     - any URI (definește un identificator de resurse).

Elemente de tip simplu și de tip complex

Schema XML descrie structura documentelor XML în mod similar DTD-urilor. Schemele XML fac distincție între două tipuri de elemente:
elemente de tip simplu, care nu pot avea nici fii, nici atribute;
elemente de tip complex, care pot avea elemente fii și atribute.

Remarcă

Este foarte important să reușiți să deosebiți cele două tipuri de elemente între ele întrucât acestea se definesc în mod diferit în cadrul unei scheme XML (simpleType definește elementul de tip simplu, iar complexType definește elementul de tip complex).

top
 
  XML - Construiți o schemă XML    
     

Pentru început vom compara un DTD cu schema XML echivalentă. Apoi veți vedea și singuri ce va urma.

Exemplu

Iată cum procedăm pentru a crea o schemă XML, piesă cu piesă pornind de la documentul XML scheme.xml creat cu editorul Notepad (figura 8.3) al cărui DTD este prezentat în figura 8.1 (creat de asemenea cu Notepad).

Figura 8.1

Remarcă

DTD-ul XML prezentat nu spune nimic despre valorile autorizate ale elementului <um> (unitate de măsură) și nu precizează faptul că elementul <cantitate> are drept conținut o valoare numerică.
Ierarhia listei de produse de excursie este prezentată în figura 8.2.

Figura 8.2

Figura 8.3

Remarcă

Evident, puteți critica sărăcia acestei liste! În ceea ce ne privește am considerat suficiente 3 kg de banane, 2 kg de biscuiți și 1 borcan de ness pentru o simplă ascensiune, în doi pe … OMUL!

Și-acum să fim creativi!
Pentru a crea o schemă XML, folosiți una din metodele prezentate mai jos:
Metoda 1 – Codificarea manuală;
Metoda 2 – Codificarea automată cu aplicații dedicate.

Metoda 1

Dacă vi se va părea complicată această metodă să nu vă îngrijorați, căci nu sunteți singurii în această situație.
1. Definiți spațiul de nume cu tag-ul <xs: schema> și atributul xmlns (figura 8.4).

Figura 8.4

Remarcă

După declarația documentului XML (prima linie), <xs: schema> este primul element pe care îl întâlnim într-o schemă XML. El este deci, elementul rădăcină iar prezența sa este obligatorie.
Cu această declarație, toate elementele schemei care conțin sufixul xs: (xsd:) vor fi recunoscute ca aparținând spațiului de nume corespunzător (vezi http://www.w3.org/2001/XMLSchema).
<xs: schema> poate conține de asemenea și următoarele atribute, toate facultative: targetNamespace; version; elementFormDefault; attributeFormDefault; blockDefault; finalDefault; id (vezi http://www.w3.org/2000/10/XMLSchema).

Exemplu de utilizare a atributului targetNamespace al elementului <xs: schema> (figura 8.5).

Figura 8.5

2. Definiți elementul de tip complex <lista_produse_excursie>.
     2.1. Introduceți elementul <xs: element name= ”lista_produse_ excursie”> (figura 8.6).

Figura 8.6

Remarcă

Elementul de tip complex <lista_produse_excursie> este o secvență de <produse_excursie>.
După cum ați putut constata element permite declararea unui element. El posedă două atribute: name și ref, care sunt exclusive.
name permite declararea unui atribut în mod local.
ref, care este diminutivul de la reference face referiri la un element deja declarat sau care urmează a fi declarat ulterior.
Atributele name și ref (facultative) sunt cele mai frecvent folosite în declararea unui element.
Celelalte atribute facultative ale tag-ului <xs: element> sunt [2]:
     - type (definește tipul elementului; primește ca valoare un nume);
     - equivclass (ia ca valoare un nume);
     - minOccurs (definește numărul minim de apariții ale unui element (occurence) într-un document; ia ca valoare un întreg pozitiv sau nul (în mod implicit primește valoarea 1));
     - maxOccurs (definește numărul maxim de apariții ale unui element într-un document; ia ca valori un întreg pozitiv sau nul (în mod implicit primește valoarea 1));
     - default (primește ca valoare un șir de caractere; atribuie elementului o valoare implicită);
     - fixed (primește ca valoare un șir de caractere; atribuie elementului o valoare fixă și invariabilă);
     - nullable (primește ca valoare true sau false; testează dacă elementul este sau nu este nul);
     - abstract (primește ca valoare true sau false; testează dacă elementul nu va putea fi prezent într-un document);
     - form (primește ca valoare qualified sau unqualified; indică dacă numele elementului trebuie să conțină sau nu prefixul xs:(xsd:));
     - id (vezi DTD).

     2.2. Introduceți elementul <xs: complexType> (figura 8.7).

Figura 8.7

     2.3. Introduceți enunțul <xs: sequence> (figura 8.8).

Figura 8.8

Remarcă

sequence este un grup de elemente. Într-un document, elementele declarate în secvență trebuie să apară obligatoriu cel puțin o dată în ordinea în care ele au fost definite.
Atributele pe care le posedă <xs: sequence> sunt: id; maxOccurs; minOccurs.

     2.4. Introduceți elementul vid <produse_excursie> cu atributul maxOccurs (figura 8.9).

Figura 8.9

Remarcă

maxOccurs=”unbounded” precizează că numărul maxim de elemente <produse_excursie> care trebuie să fie prezente în document nu este limitat.

3. Definiți elementul de tip complex <produse_excursie>, care conține secvența: <cantitate>, <um>, <produs>, în ordinea indicată (figura 8.10).

Figura 8.10

Remarcă

Elementul de tip simplu <cantitate> va fi un număr zecimal (xs: decimal).
Elementul de tip simplu <produs> va fi un șir de caractere (xs: string).
Elementul <um> poate fi definit ca un simplu string dar dorim să-l limităm la o serie de valori predefinite.

4. Definiți elementul <um> cu următoarele valori predefinite: kg; borcan (borcane); bucăți; niciuna (figura 8.11) .

Figura 8.11

Remarcă

Schema utilizează elementul de constrângere <xs: restriction> cu atributul base pentru a preciza că elementul <um> este de tip xs: string.
restriction conține fațete care permit reducerea spațiului de valori.
Valoarea este restricționată printr-o fațetă definită cu elementele
<xs: enumeration>.
Fațeta enumeration permite limitarea spațiului de valori la o listă de valori (kg; borcan(e) etc.).
Fiecare constrângere este un element care posedă un atribut numit value și definește una din valorile posibile.

top
 
  XML - Software XML Schema. Aplicații    
     

La ora actuală există numeroase aplicații care vă pot ajuta să creați scheme XML fără a mai învăța sintaxa prezentată în cadrul primei metode. Aceste aplicații utilizează liste derulante pentru selecția elementelor și afișează rezultatul sub formă grafică. Ele permit de asemenea crearea în mod automat a schemelor XML pornind de la documentele XML (Metoda 2 – Codificarea automată cu aplicații dedicate). Prezentăm în cele ce urmează, două dintre cele mai cunoscute aplicații pentru crearea schemelor XML:
(TIBCO’s) XML Authority;
XML Spy.

(TIBCO’s) XML Authority

XML Authority (http://www.tibco.com) a fost creat de o întreprindere numită Extensibility (răscumpărată după aceea de TIBCO). Este unul din primele medii de dezvoltare a schemelor creat pentru XML.
XML Authority este simplu și ușor de utilizat de la nivel de interfață și permite dezvoltatorilor de aplicații să creeze rapid scheme pe care apoi să le verifice în timp real. Este un instrument practic pentru a crea, modifica și elimina elemente și atribute. XML Authority oferă o reprezentare vizuală a modelului, posibilitatea de a insera ușor comentarii și de a modifica direct sursa pentru aceia care, din timp în timp au nevoie să intervină în cod. Una din funcțiunile cele mai interesante ale XML-ului Authority, în afară de interfața cu utilizatorul este și aceea de a lucra cu mai multe dialecte. Puteți de exemplu deschide un DTD XML și să-l salvați (cu comanda Save as) în echivalentul său XML Schema, SOX (Schema for object – Oriented XML), SGML (Standard Generalized Markup Language), compatibil Microsoft Biz Talk (http://www.biztalk.org); DCD (http://www.w3.org/TR/NOTE-ddml); One Soft (http://www.onesoft.com); SGML (http://www.iso.ch); RELAX (http://www.xml.gr.jp/relax); Schema Adjunct (http://www.extensibility.com/resources/saf.htm); SOX versiunea 2 (http://www.w3.org/TR/NOTE-SOX); XDR (http://msdn.microsoft.com/library/default.asp?URL=/library/psdk/xmlsdk/xmlp7k6d.htm); DTD XML (http://www.w3.org/TR/2000/REC-xml-20001006); XML Schema (http://www.w3.org/XML/Schema).
Exportul în diverse dialecte nu este singura funcție importantă a XML Authority. El știe de asemenea să importe o serie întreagă de surse de date diverse și variante și să construiască o reprezentare XML pornind de la aceste surse. Sursele de date pe care XML Authority știe să le importe sunt: COM, Java, LDAP (Lightweight Directory Access Protocol), ODBC, SGML, XML (document XML bine format).
Câteva funcții ale XML Authority oferă o mare suplețe pentru conversiile unui tip de date în altul. În plus, față de aceste funcții, XML Authority permite să se exporte reprezentarea vizuală a schemelor în format GIF; ajută utilizatorul cu o funcție de introducere date semi-automată; oferă o interfață simplă pentru listele de elemente și de atribute.

Remarcă

Dacă doriți mai multe informații despre XML Authority, vizitați site-ul http://www.tibco.com.
XML Authority este disponibil sub Windows, Unix și MacOs.

Aplicație

Creați cu XML Authority (Metoda 2) schema XML pornind de la documentul XML ilustrat în figura 8.3, al cărui DTD este prezentat în figura 8.1 (vezi Metoda 1). Afișați totodată și codul sursă al schemei XML realizate.

XML Spy

XML Spy (http://www.xmlspy.com) este un alt celebru instrument de creare a schemelor XML. XML Spy este disponibil numai sub Windows! XML Spy permite editarea fișierelor HTML și ASP, dar ele nu au la bază XML.
Formatele (extensia fișierului) pe care XML Spy [5] știe să le recunoască sunt: .biz (BizTalk); .cml (Chemical Markup Language), .dcd (Document Content Description); .dtd (Document Type Definition); .ent (Entity Sets); .math și .mml (Mathematical Markup Language); .mtx (MetaStream XML); .rdf (Resource Description Framework); .smil (Synchronized Multimedia Integration Language); .svg (Scalable Vector Graphics); .wml (Wireless Markup Language); .xdr (XML – Data Reduced); .xhtml (eXtensible Hypertext Markup Language); .xml (document XML); .xsd (Schema XML); .xsl (foaia de stiluri XSL); .xslt (transformare XSL).

Remarcă

XML Spy este un instrument simplu de folosit, extraordinar de flexibil și foarte complet.
XML Spy prezintă și alte facilități precum: introducerea semi-automată a datelor; editarea vizuală a schemelor; editarea directă a sursei XML; posibilitatea de creare a unei documentații în format HTML sau Word.

Aplicație

Creați cu XML Spy (Metoda 2) aceeași schemă XML pe care ați realizat-o manual (Metoda 1) și automat (Metoda 2) cu XML Authority.

În figura 8.12 se prezintă schema XML generată cu XML Spy.

Figura 8.12

Codul sursă al schemei XML generate cu XML Spy este prezentat în figura 8.13.

Figura 8.13

Aplicație

Se consideră DTD-ul (agenda.dtd) din figura 8.14 și documentul XML conform acestui DTD (figura 8.15).

Figura 8.14

Figura 8.15

Aplicație

Realizați schema XML echivalentă folosind una din metodele prezentate mai jos:
Metoda 1 – Codificarea manuală;
Metoda 2 – Codificarea automată cu aplicații dedicate

Remarcă

Elementele <nume>, <prenume> sunt de type=”xs.string”.

În figura 8.16 se prezintă schema XML generată cu XML Spy (Metoda 2).

Figura 8.16

Codul sursă al schemei XML generate cu XML Spy este prezentat în figura 8.17.

Figura 8.17

Figura 8.17 (continuare)

Remarcă

Puteți realiza o conversie automată DTD XML - XML Schema și cu aplicația dtd2xsd, care se găsește pe site-ul W3C (www.w3c.org).

top
 
  XML - Temă    
     
Testați-vă cunostințele

1. Când folosiți schemele XML?

2. Dați exemple de tipuri de date predefinite.

3. Cum se definesc elementele de tip simplu și de tip complex?

4. Ce software XML Schema cunoașteți?

5. Comentați următorul cod XML (figura 8.18)?

Figura 8.18

Vizitați site-urile

www.w3.org/2000/10/XMLSchema
www.w3.org/2001/XMLSchema-instance
www.thaiopensource.com/trex/
www.mutu-xml.org/

top
CUPRINS> De la DTD la XML Schema INTRO
INAPOI INAINTE