26
C02. XML. DTD Date Semistructurate, 2012-2013

C02. XML. DTD

  • Upload
    benard

  • View
    47

  • Download
    1

Embed Size (px)

DESCRIPTION

C02. XML. DTD. Date Semistructurate, 2012-2013. C 02 . DS. DTD. C02 - DS. - PowerPoint PPT Presentation

Citation preview

Page 1: C02. XML. DTD

C02. XML. DTD

Date Semistructurate, 2012-2013

Page 2: C02. XML. DTD

C02. DS

• DTD

Page 3: C02. XML. DTD

• Cum nu exista un vocabular standard, iar documentele XML pot contine orice elemente (valide), trebuie, totusi, stabilite niste reguli, pentru ca documentele sa poata fi citite de cei interesati (ex: institutii financiare care cer diferite rapoarte).

• Pentru a stabili reguli care sa fie indeplinite de documentele unei aplicatii XML – o solutie este DTD.

• DTD-urile sunt scrise intr-o sintaxa formala care explica exact ce elemente si entitati pot sa apara in document, unde pot sa apara, ce poate sa contina un element si ce atribute poate sa aiba.

• Diferite aplicatii XML pot sa foloseasca diferite DTD-uri pentru a specifica ce este si ce nu este permis in documentele XML.

• DTD – mecanism pentru descrierea structurii unui document – exprima modelul si permite validarea documentului conform acestui model.

C02 - DS

Page 4: C02. XML. DTD

• Aspecte pe care un DTD nu le poate mentiona (explicit!):– care este elementul radacina al documentului (desi se poate deduce printr-o

parcurgere a DTD-ului)

– cate instante ale unui element pot sa apara in document (doar 0, 1, ..., n)

– de ce natura sunt datele caracter din interiorul unui element (tipuri de date – nu se poate specifica daca reprezinta valori numerice, date calendaristice s.a.)

• Un DTD nu spune nimic legat de un document XML despre lungime, semnificatie, valori permise (vezi valorile fixe si valori posibile pentru atribute) si alte caracteristici ale textului continut de un element.

• Observatie: Este important sa avem DTD-ul inainte de crearea documentului XML.

C02 - DS

Page 5: C02. XML. DTD

• Rolul DTD-ului este de a specifica ce elemente sunt permise in document, unde, si in ce ordine. DTD-ul descrie arborele care este acceptabil pentru documentul XML.

• Avantaje DTD– daca se foloseste un editor XML care stie sa citeasca un DTD, atunci

acesta forteaza structura documentului care se creeaza;– un DTD ajuta in plus un procesor XML in delimitarea tag-urilor de continutul

efectiv;– un DTD poate declara valori fixe sau implicite pentru atributele elementelor.

• Observatie: Cel mai important este ca un document XML sa fie well-formed. Validarea este optionala. Dar, daca datele din document sunt folosite pentru a fi importate intr-o BD, atunci conteaza daca lipseste un element.

C02 - DS

Page 6: C02. XML. DTD

C02 - DS

Elementul radacina

Se indica faptul ca este necesara o sursa externa

• Submultimi DTD externe

• Declaratia de tip de document este inclusa in documentul XML dupa declaratia XML si inainte de tag-ul de inceput al documentului radacina.

• Exemple:

<?xml version="1.0" standalone="no"?>

<!DOCTYPE person SYSTEM "http://www.aaa.org/dtds/person.dtd">

<!DOCTYPE person SYSTEM "/subdir/person.dtd">

<!DOCTYPE person SYSTEM "person.dtd">

Page 7: C02. XML. DTD

• Submultimi DTD interne

<?xml version="1.0"?>

<!DOCTYPE person [

<!ELEMENT first_name (#PCDATA)>

...

]>

<person> <name> ... (doc XML)

C02 - DS

Page 8: C02. XML. DTD

• Specificatie mixta (intern + extern) => DTD complet (in mod firesc, subseturile nu trebuie sa se suprapuna)

<!DOCTYPE person SYSTEM "name.dtd"

[

<!ELEMENT profession (#PCDATA)>

<!ELEMENT person (...)>

]>

<...> ... Doc XML </...>

C02 - DS

Page 9: C02. XML. DTD

• Elemente:• Fiecare element care poate fi folosit intr-un document XML trebuie

declarat separat intr-un DTD:

<!ELEMENT element_name content_specification>• Continut:

– #PCDATA – daca elementul poate sa contina date caracter

– Elemente fiu (secventa ordonata): e_parinte (e_fiu1, e_fiu2, …)

• Cardinalitatea elementelor continute (numarul de elemente fiu, sufixe):– un element poate sa contina una sau mai multe instante de un anumit tip de

element => se poate mentiona numarul de elemente fiu:

– ? – zero sau unul

– * – zero sau mai multe

– + – unul sau mai multe

C02 - DS

Page 10: C02. XML. DTD

• Alegeri (optiuni): se poate specifica pentru un element sa contina unul sau alt element fiu. – O alegere este data printr-o lista de elemente (potentiale elemente fiu).

– Un element nu poate sa aiba mai multe elemente fiu din lista data.

– Dar – se poate (a | b | c)*

• Exemplu:

<!ELEMENT methodResponse (params | fault)> • Grupari: optiunile, secventele si sufixele pot fi combinate pentru o

varietate mai mare a continutului posibil al unui element, cu ajutorul parantezelor rotunde.

• Exemplu:<!ELEMENT adresa (strada, cod?, localitate, (judet | regiune

| stat)+, tara, email+, website*, (retea?, telefon)+)>

C02 - DS

Page 11: C02. XML. DTD

• Continut mixt (documente narative):• Exemplu:<!ELEMENT paragraph (#PCDATA | name | profession | footnote |

emphasize | date )* >

• Observatie: #PCDATA trebuie sa fie primul element din secventa. Acesta este singurul mod prin care se poate defini continut mixt. In acest caz nu se poate specifica ordine in elementele fiu sau numar de aparitii al acestora.

C02 - DS

Page 12: C02. XML. DTD

• Elemente vide:<!ELEMENT image EMPTY>

• Orice continut:<!ELEMENT page ANY>

• Observatie: In cazul in care un element este declarat de tip ANY, iar in document contine sub-elemente, atunci acele elemente trebuie declarate in DTD. De obicei, ANY se foloseste temporar, pana la definitivarea DTD-ului.

C02 - DS

Page 13: C02. XML. DTD

• Declaratii de atribute

• Toate atributele elementelor trebuie declarate – in declaratiile ATTLIST. Un ATTLIST poate declara mai multe atribute pentru acelasi element, insa – daca mai multe elemente au acelasi atribut, trebuie declarat de fiecare data.

• Exemplu – elementul image are atributul source de tip sir de caractere, iar valoarea acestuia este obligatoriu sa fie data:

<!ATTLIST image source CDATA #REQUIRED>

<!ATTLIST image source CDATA #REQUIRED

width CDATA #REQUIRED

height CDATA #REQUIRED

alt CDATA #IMPLIED>

C02 - DS

Page 14: C02. XML. DTD

• Tipuri de atribute:– CDATA – continut sir de caractere oarecare (valid XML)

<!ATTLIST prof specializare CDATA #REQUIRED>

– Enumerare – lista de posibile valori<!ATTLIST disciplina activitati (C | S | L) #REQUIRED>

– ID: atributul trebuie sa contina un nume XML care sa fie unic pe multimea de elemente (de orice tip) in cadrul documentului; fiecare element poate avea un singur atribut de tip ID

<!ATTLIST prof idp ID #REQUIRED>

– IDREF: refera un atribut de tip ID al unui element din document; Observatie: valorea unui atribut IDREF poate fi orice valoare care apare ca valoare a unui atribut ID din document, chiar daca nu este al unui element asteptat

<!ATTLIST prof catedra IDREF #REQUIRED>

– IDREFS: contine o lista de nume XML separate prin whitespace, unde fiecare este valoarea unui atribut ID al unui element din documentul curent; elementul curent, prin acest atribut, refera mai multe elemente

<!ATTLIST catedra sefi IDREFS #REQUIRED>

– NMTOKEN: un XML name token este similar cu un nume XML; difera fata de un nume XML prin faptul ca orice caracter permis in numele token-ului este acceptat ca prim caracter (nu numai litere, ideograme sau underscore); orice nume XML este un XML name token, dar nu orice XML name token este un nume XML

C02 - DS

Page 15: C02. XML. DTD

• Posibile valori pentru un atribut:

– #IMPLIED – atributul este optional, fara a se da valoare implicita<!ATTLIST prof email CDATA #IMPLIED>

– #REQUIRED – atributul este obligatoriu, fara a se da valoare implicita

<!ATTLIST prof specializare CDATA #REQUIRED>

– #FIXED – valoarea atributului este constanta; atributul are valoarea data, chiar daca nu este mentionat in element; daca este mentionat – trebuie sa aiba valoarea data in declaratia din DTD

<!ATTLIST disciplina prezenta CDATA #FIXED "Da">

– Literal – valoarea implicita este data ca sir de caractere<!ATTLIST prof diriginte NMTOKEN "Nu">

C02 - DS

Page 16: C02. XML. DTD

• Declaratii de entitati generale

• XML predefineste 5 entitati: &lt;, &amp;, &gt;, &quot;, &apos;.• Un DTD poate sa defineasca si alte entitati cu o declaratie ENTITY – se

da un nume (nume XML) si textul cu care se va inlocui entitatea declarata. Textul trebuie sa fie well-formed (poate fi sectiune din document XML).

• Exemplu:

<!ENTITY super "supercalifragilisticexpialidocious">• => in document, unde se scrie &super;, la afisare se inlocuieste cu

textul dat.

C02 - DS

Page 17: C02. XML. DTD

• Entitati parametru (DTD extern)

• Este posibil ca mai multe elemente sa aiba o parte din atribute sau specificatii de continut similare.

• Exemplu:<!ELEMENT apartment (address, footage, rooms, baths, rent)><!ELEMENT sublet (address, footage, rooms, baths, rent)><!ELEMENT coop (address, footage, rooms, baths, price)><!ELEMENT condo (address, footage, rooms, baths, price)><!ELEMENT house (address, footage, rooms, baths, price)>

• Pentru a nu repeta aceleasi specificatii pentru mai multe elemente, este posibil sa se se declare partea comuna o singura data (astfel – si modificarile se vor efectua intr-un singur loc), care sa fie referita din fiecare declaratie de element.

C02 - DS

Page 18: C02. XML. DTD

• Entitati parametru

• Entitatea parametru se poate folosi numai intr-un DTD – referinta de entitate parametru – este declarata similar unei entitati generale.

• Exemplu – declarare:<!ENTITY % residential_content "address, footage, rooms, baths"><!ENTITY % rental_content "rent"><!ENTITY % purchase_content "price">

• Exemplu – utilizare (in DTD-uri externe):<!ELEMENT apartment (%residential_content;, %rental_content;)><!ELEMENT sublet (%residential_content;, %rental_content;)><!ELEMENT coop (%residential_content;, %purchase_content;)><!ELEMENT condo (%residential_content;, %purchase_content;)><!ELEMENT house (%residential_content;, %purchase_content;)>

C02 - DS

Page 19: C02. XML. DTD

• Includere conditionala

• Directiva IGNORE se foloseste pentru ignorarea unei sectiuni de declaratii, de catre parser.

• Exemplu:<![IGNORE[ <!ELEMENT production_note (#PCDATA)>]]>

• Directiva INCLUDE – se foloseste pentru a specifica cum ca acea sectiune de declaratii chiar este folosita in DTD.

• Dar – daca se foloseste o entitate parametru, se poate modifica usor functionalitatea DTD-ului, pe diferite sectiuni:

<!ENTITY % caz1 "INCLUDE"><!ENTITY % caz2 "IGNORE"><![%caz1; [<!ELEMENT e1 ... >]]><![%caz2; [<!ELEMENT e2 ... >]]>

C02 - DS

Page 20: C02. XML. DTD

• Exemplu DTD (1)

<!ELEMENT catedre (catedra*, prof*)><!ELEMENT catedra (#PCDATA)><!ATTLIST catedra idc ID #REQUIRED><!ATTLIST catedra sefi IDREFS #REQUIRED><!ELEMENT prof (nume, birou?, disciplina+, observatii,

diverse?)><!ATTLIST prof idp ID #REQUIRED><!ATTLIST prof cat IDREF #REQUIRED><!ELEMENT nume (#PCDATA)><!ELEMENT birou (#PCDATA)>

C02 - DS

Page 21: C02. XML. DTD

• Exemplu DTD (2)<!ELEMENT disciplina (#PCDATA)><!ATTLIST disciplina tip CDATA "obl" activitati (C | S | L | CS | CL |

CSL) #REQUIRED prezenta CDATA #FIXED "da" x CDATA #IMPLIED><!ELEMENT observatii (#PCDATA)><!ENTITY obsP1 SYSTEM "obsP1.txt"><!ENTITY element_extern SYSTEM "elext.yml"><!ENTITY text_fix "acesta este textul fix care vreau

sa-l inserez"><!ELEMENT diverse ANY><!ELEMENT aaa (#PCDATA)><!ENTITY % continut_elext "#PCDATA"><!ELEMENT elext (%continut_elext;)>

C02 - DS

Page 22: C02. XML. DTD

• Exemplu DTD (3)

Continut "obsP1.txt":

observatii prof 1 din fisier extern

Continut "elext.yml":

<elext>continut de element extern

</elext>

C02 - DS

Page 23: C02. XML. DTD

• Exemplu DTD (4) - XML

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE catedre SYSTEM "profi_ent_ext.dtd">

<catedre> <catedra idc="C1" sefi="P11 P12"> Sisteme Informatice </catedra> <catedra idc="C2" sefi="P21"> Limbaje de programare </catedra>

<prof idp="P11" cat="C1"> <nume>prof 1</nume> <birou>333</birou> <disciplina tip ="obl" activitati="CL" prezenta="da"

x="optional">bd</disciplina> <disciplina tip ="opt" activitati="CS">ds</disciplina> <observatii>&obsP1;</observatii> </prof >

C02 - DS

Page 24: C02. XML. DTD

• Exemplu DTD (5) - XML

<prof idp="P12" cat="C1"> <nume>prof 2</nume> <birou>406</birou> <disciplina activitati="C">pdpj</disciplina> <observatii>obs prof 2</observatii> </prof > <prof idp="P21" cat="C2"> <nume>prof 3</nume> <disciplina tip ="fac" activitati="S">curs facultativ</disciplina> <disciplina tip ="opt" activitati="CL">curs optional</disciplina> <observatii>obs prof 3</observatii> <diverse> <aaa> continut divers &text_fix; </aaa> &element_extern; </diverse> </prof ></catedre>

C02 - DS

Page 25: C02. XML. DTD

• Exemplu DTD (6) – XML – OUTPUT

C02 - DS

Page 26: C02. XML. DTD

• Next C03– XML Schemas

C02 - DS