DTD intern simplu
<?xml version=”1.0″?>
<!DOCTYPE cdCollection [
<!ELEMENT cdCollection (cd)>
<!ELEMENT cd (title, artist, year)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT artist (#PCDATA)>
<!ELEMENT year (#PCDATA)>
]>
<cdCollection>
<cd>
<title>Dark Side of the Moon</title>
<artist>Pink Floyd</artist>
<year>1973</year>
</cd>
</cdCollection>
Fiecare element care va fi folosit trebuie incluse în DTD. Nu uitați să includeți elementul rădăcină, chiar dacă l-ați specificat deja la începutul DTD. Trebuie să-l precizați din nou, într-o etichetă <!ELEMENT>. <cdCollection> din elementul rădăcină <!ELEMENT cdCollection (cd)> conține toate celelalte elemente ale documentului, dar numai un singur element directă copil: <cd>. Prin urmare, trebuie să specificați elementul copil (doar elemente copil directe trebuie să fie specificate) în paranteze. <!ELEMENT cd (title, artist, year)> Cu această linie, definim elementul <cd>. Rețineți că acest element conține elementele copil <title>, <artist>, și <year>. Acestea sunt precizate într-o anumită ordine. Această ordine trebuie să fie respectată la crearea documentului XML. Dacă modificați ordinea elementelor (cu acest DTD particular), documentul nu va fi validat. <!ELEMENT title (#PCDATA)> Cele trei etichete rămase, <title>, <artist>, și <year>, nu conține în prezent alte etichete. Cu toate acestea ele conțin un text care trebuie să fie analizat. Aceste date se numesc Date de Caractere Analizate (Parsed Character Data), sau #PCDATA. Prin urmare, #PCDATA este specificat în paranteze. Deci, acest DTD simplu prezintă exact ceea ce vedeți aici, în fișierul XML. Nimic nu poate fi adăugat sau luat, atâta timp cât rămânem la acest DTD. Singurul lucru pe care se poate schimba este o parte de text #PCDATA între etichete.
Adăugarea de complexitate
Pot exista momente când veți dori să puneți mai mult decât date de caracter, sau mai mult decât elemente copil într-un anumit element. Acest lucru este denumit conținut mixt. De exemplu, să presupunem că doriți să fiți în măsură să puneți date de caracter sau un element copil, cum ar fi eticheta <b> într-un element <descriere>:
<!ELEMENT description (#PCDATA | b | i )*>
Acest aranjament special ne permite să folosim PCDATA, eticheta <b>, sau eticheta <i> simultan. O precizare specială, totuși, este că, dacă aveți de gând să se amestecați PCDATA cu alte elemente, grupul trebuie să fie urmată de sufixul asterisc (*). Această declarație ne permite acum să adăugăm următoarele la documentul XML (după definirea elementele individuale, desigur)
<cd>
<title>Love. Angel. Music. Baby</title>
<artist>Gwen Stefani</artist>
<year>2004</year>
<genre>pop</genre>
<description>
This is a great album from former
<nowiki><i>No Doubt</i> singer <b>Gwen Stephani</b>.</nowiki>
</description>
</cd>
Cu atribute se face acest lucru un pic diferit decât cu elemente. Vă rugăm să vedeți următorul exemplu:
<cd remaster_date=”1992”>
<title>Dark Side of the Moon</title>
<artist>Pink Floyd</artist>
<year>1973</year>
</cd>
Pentru ca acest lucru să se valideze, trebuie să fie specificat în DTD. Modelele care conțin atribute sunt specificate cu:
<!ATTLIST element_name attribute_name attribute_type default_value>
Să folosim aceasta pentru a valida exemplul nostru CD:
<!ATTLIST cd remaster_date CDATA #IMPLIED>
Opțiuni
<ATTLIST person gender (male|female) “female”>
Gruparea de atribute pentru un element
În cazul în care un anumit element va avea mai multe atribute diferite, grupați-le împreună astfel:
<!ATTLIST car horn CDATA #REQUIRED
seats CDATA #REQUIRED
steeringwheel CDATA #REQUIRED
price CDATA #IMPLIED>
Adăugarea de validare STATIC, pentru elemente care trebuie să aibă o anumită valoare
<!ATTLIST classList classNumber CDATA #IMPLIED
building (UWINNIPEG_DCE|UWINNIPEG_MAIN) „UWINNIPEG_MAIN”
originalDeveloper CDATA #FIXED „Khal Shariff”>
Sufixe
Deci, ce se întâmplă cu ultimul nostru exemplu cu colectarea CD, atunci când vrem să adăugăm mai multe CD-uri? Cu DTD actual, nu mai putem adăuga niciun CD fără a obține o eroare. Încercați și veți vedea. Când specificați un element (sau elemente) copil în modul în care am procedat, doar unul din fiecare element copil poate fi folosit. Nu este foarte potrivit pentru o colecție de CD-uri, nu-i așa? Putem folosi ceva pe nume sufixe pentru a adăuga funcționalitate la eticheta <!ELEMENT>. Sufixele sunt adăugate la capătul elementului copil specificat. Există 3 sufixe principale care pot fi utilizate:
- (No suffix): Numai 1 copil poate fi utilizat.
- (+): Unul sau mai multe elemente pot fi utilizate.
- (*): Zero sau mai multe elemente pot fi utilizate.
- (?): Zero sau un element poate fi utilizat.
Validarea pentru mai mulți copii cu un DTD
Deci, în cazul fișierului XML cu colecția noastră de CD-uri, putem adăuga mai multe CD-uri la listă prin adăugarea unui sufix +:
<!ELEMENT cd_collection(cd+)>
Utilizarea mai multor etichete de formatare internă
Etichetele Bold, B de exemplu, sunt de asemenea, definite în DTD ca elemente, care sunt opționale, prin urmare:
<ELEMENT notes (#PCDATA | b | i)*>
<!ELEMENT b (#PCDATA)*>
<!ELEMENT i (#PCDATA)*>
]>
<classList classNumber=”303″ building=”UWINNIPEG_DCE” originalDeveloper=”Khal Shariff”>
<student>
<firstName>Kenneth
</firstName>
<lastName>Branaugh
</lastName>
<studentNumber>
</studentNumber>
<notes><b>Excellent </b>, Kenneth is doing well.
</notes>
etc
Studiu de caz privind BMEcat
Unul dintre primele proiecte naționale majore pentru utilizarea XML ca format de schimb B2B a fost inițiat de asociația federală pentru managementul materialelor, achiziții și logistică (BME), în colaborare cu companii germane de top, de exemplu, Bayer, BMW, SAP și Siemens. Acestea toate au creat un standard pentru schimbul de cataloage de produse. Acest proiect a fost numit BMEcat. Rezultatul acestei inițiative este o colecție DTD pentru descrierea de cataloage de produse și tranzacțiile aferente (catalog nou, actualizarea datelor de produs și actualizarea prețurilor).
Companiile care operează în comerțul electronic (furnizori, companii care cumpără și piețe) schimbă cantități din ce în ce mai mari de date. Ele ating repede limitele prin varietatea de formate de schimb de date. Soluția BMEcat creează o bază pentru un transfer direct de date de catalog de diferite formate de date. Aceasta pune bazele pentru devansarea traficului de bunuri prin internet în Germania. Utilizarea BMEcat reduce costurile pentru toate părțile întrucât pot fi utilizate interfețe standard.
BMEcat standard bazat pe XML a fost implementat cu succes în mai multe proiecte. În zilele noastre multe companii aplică BMEcat și îl utilizează pentru schimbul de cataloage de produse în acest standard stabilit.
Un catalog BMEcat (Versiunea 1.2) este format din următoarele elemente principale:
CATALOG Acest element conține informațiile esențiale unui catalog de cumpărături, de exemplu versiunea limbii și validitatea. BMEcat presupune exact o limbă per catalog.
FURNIZOR Acest element include identificarea și adresa furnizorilor din catalog. BMEcat presupune exact un singur furnizor pentru fiecare catalog.
CUMPĂRĂTOR Acest element conține numele și adresa destinatarului catalogului. BMEcat presupune nu mai mult de un destinatar per catalog.
ACORD Acest element conține una sau mai multe ID-uri de acord cadru asociate cu perioada de valabilitate corespunzătoare. BMEcat presupune că toate prețurile unui catalog țin de acordul menționat mai sus.
SISTEM DE CLASIFICARE Acest element permite transferul complet a unuia sau mai multor sisteme de clasificare, inclusiv definiții de caracteristici și cuvinte cheie.
SISTEM DE GRUPURI DE CATALOAGE Acest element provine de la versiunea 1.0. Acesta este folosit în principal pentru transferul structurii arborescente care facilitează navigarea unui utilizator în sistemul țintă (Browser).
ARTICOL (din 2005 PRODUS) Acest element reprezintă un produs. Acesta conține un set de atribute standard.
PREȚ ARTICOL (din 2005 PREȚ PRODUS) Acest element reprezintă un preț. Suportul de modele diferite de stabilire a prețurilor este foarte puternic în comparație cu alte formate de schimb. Prețuri de sezon, prețuri de țară, diferite valute și diferite perioade de valabilitate, etc. vor fi suportate.
CARACTERISTICĂ ARTICOL (din 2005 CARACTERISTICĂ PRODUS) Acest element permite transferul de valori caracteristice. Puteți fie înregistra caracteristicile de grup predefinite sau caracteristicile individuale de produse.
VARIANTA Acest element permite listarea de variante de produse, fără a fi nevoie de duplicare. Cu toate acestea, variațiile BMEcat se aplică numai la schimbări individuale în valoare, care să conducă la o schimbare a ID-ului articolului. În caz contrar, nu poate exista nicio dependență pe alte atribute (în special la prețuri).
MIME Acest element include orice număr de documente suplimentare, cum ar fi imagini de produs, fișe de date, sau site-uri.
REFERINȚĂ ARTICOL (din 2005 REFERINȚA PRODUSULUI) Acest element permite eco-referințe între articole în cadrul unui catalog, precum și între cataloage. Aceste referințe se pot folosi restrictiv pentru pachete de produse de cartografiere.
EXTENSIE DEFINITĂ DE UTILIZATOR Acest element permite transportul de date în afara standardelor BMEcat. Emițătorul și receptorul trebuie să fie coordonate.
Validator online
http://www.stg.brown.edu/service/xmlvalid/
XML bine-formate și valide
XML bine-formate – Un document XML care respectă în mod corect regulile sintaxei XML.
XML valid – Un document XML care aderă la regulile unei scheme XML. Pentru a fi valid un document XML trebuie să fie în primul rând bine format.
Un document XML valid trebuie să fie bine-format. Dar, un document XML bine format ar putea să nu fie valid – cu alte cuvinte, un document XML bine format, care îndeplinește criteriile de sintaxă XML, ar putea să nu îndeplinească criteriile pentru schema XML, și, prin urmare va fi invalid.
De exemplu, gândiți-vă la situația în care documentul XML conține următoarele (pentru această schemă):
<city>
<cityName>Boston</cityName>
<country>United States</country>
<adminUnit>Massachusetts</adminUnit>
:
:
:
</city>
Observați că elementele nu apar în secvența corectă în conformitate cu schema (cityName, adminUnit, country). Documentul XML poate fi validat (folosind software-ul de validare) pentru schema sa declarată – software-ul de validare ar găsi atunci eroarea de abatere de la secvență.
Traducere din Wikibooks
Lasă un răspuns