Sunteți pe pagina 1din 18

smaranda.belciug@inf.ucv.

ro Laborator 5 Tehnologii Web si Programare Client Server

Prin declararea unui DOCTYPE (document type) n fiierul XML apelm un Document Type Definition (DTD) pe care l-am pregatit. DTD-ul definete regulile jocului documentului nostru. Ce este un DTD? Un DTD este o mulime de reguli care definete elementele i atributele lor pentru un document XML. Practic, DTD definete gramatica unui document XML. Termen Declararea unui XML Exemplu <?xml version = 1.0 encoding = UTF-8 standalone = yes ?> <!DOCTYPE Root-Element SYSTEM filename.dtd? <!ATTLIST Element-Name Name Datatype Default> Ce nseamn Spune procesorului ce fel de versiune de XML s foloseasc Definete un tip de element Definete un nume, un tip de dat, o valoare default pentru fiecare atribut asociat cu un element

Declararea DOCTYPE Declararea listei de atribute

smaranda.belciug@inf.ucv.ro Declararea unui entiti Declararea unei notaii <!ENTITY Entity-Name text> <!NOTATION NameSystem externalID> Definete o mulime de informaii numite entiti Asociaz o notaie cu o informaie, pentru ca un program extern s poat interpreta acea informaie.

Cnd folosim un DTD? Cnd dorim s crem i s manipulm o mulime de documente dintr-o companie. DTD-ul ne permite s crem un set de reguli pe care toate documentele trebuie s le respecte. Cnd dorim s definim ce fel de markup poate fi folosit ntr-un anumit tip de documente.

XML Prolog XML Prolog este primul lucru pe care-l ntlnete un procesor ntr-un document XML. Se plaseaz primul ntr-un document i descrie coninutul i structura documentului. XML Prolog poate conine: O declarare XML O declarare DOCTYPE Comentarii Instruciuni de procesare Spaii goale

O declarare nu d o structur documentului, i nici nu definete elementele sale. Ea furnizeaz instruciuni procesorului despre ce tip de document trebuie procesat i ce standarde trebuie folosite. Un DTD poate fi intern sau extern. Dac atributul standalone este setat cu yes, atunci documentul poate avea un DTD intern. Valoare default este no. DOCTYPE face legtura dintre XML i DTD. DOCTYPE spune procesorului unde se gsete DTD-ul.

smaranda.belciug@inf.ucv.ro Instruciuni de procesare Instruciunile de procesare sunt asemntoare comentariilor, doar c le adresm procesorului, nu oamenilor. <?name data?> <?xml: stylesheet type = text/css href=bookstore.css?> Numele este xml:stylesheet, iar data este type = text/css i href=bookstore.css. Toate instruciunile de procesare trebuie s nceap cu <? i s se ncheie cu ?> Cum se citete un DTD? DTD-urile nu sunt scrise n XML sunt scrise n SGML i urmeaz regulile SGML. Exemplu. Bookstore DTD, versiunea extern

smaranda.belciug@inf.ucv.ro Deoarece inima documentului XML este reprezentat de elementele sale, acestea trebuie definite n DTD, folosind element type declarations. Acestea sunt importante deoarece ele nu declar doar elementele, ci i toate elementele nested. Tip de coninut ANY EMPTY Exemplu <!ELEMENT Name ANY> <!ELEMENT Name EMPTY> Ce nseamn? Permite orice tip coninut elementului. Specific faptul c elementul trebuie s nu conin nimic. (vezi source, nu are coninut, dar are atribute) Permite ca elementul s conin date caracter sau o combinaie de subelemente sau date caracter.

Coninut mixt

Coninut element

<!ELEMENT Name #PCDATA> sau <!ELEMENT Name (#PCDATA | ChildName) *> <!ELEMENT Name (Child1, Specific faptul c un Child 2)> element poate s conin subelemente.

<!ELEMENT author (#PCDATA | publisher)*> #PCDATA nseamn c elementul poate s conin parsed character data, adic, textul pe care-l interpreteaz procesorul. Dac se dorete ca elementul s conin doar caractere fr markup se folosete #CDATA. - poate s apar #PCDATA i/sau alte elemente nested Element content models Un element content model descrie elementele copil pe care un element le poate conine. Simbol , Exemplu <!ELEMENT customer, (custNumbar, lastName, firstName, address, city, state, zip, phone, email)> <!ELEMENT books (book1 | book2)> <!Element books (book)> <!ELEMENT (book+)> <!ELEMENT Ce nseamn Toate elementele copil trebuie s fie scrise cu virgul.

Sau book1 sau book2 poate s apar n books. O singur apariie a lui book va aprea n books. books Copilul book va trebui s fie folosit de mai mult ori n books (cel puin o dat). books Elementul book poate fi 4

smaranda.belciug@inf.ucv.ro (book*)> folosit o data niciodat n books. sau

Atribute <!ATTLIST element-name attribute-name datatype defaultvalue> Tip de atribut: CDATA orice string de caractere fr &, <,>, . Ele pot fi scrise astfel: &amp;, &lt;, &gt;, &quot. ID creeaz un ID pentru un atribut care identific un element IDREF permite ca valoarea unui atribut s fie aceeai ca a ID-ul altui element din document IDREFS la fel ca IDREF, dar valoare poate s fie pentru mai multe IDREF ENTITY perminte folosirea datelor binare externe sau neparsate ENTITIES permite legtur mai multe entiti NMTOKEN restricioneaz valoarea atributului la orice nume XML valid NMTOKENS NOTATION permite s fie folosite o valoare specificat de o notaie n DTD. Valoarea default poate s fie: #REQUIRED trebuie inclus tot timpul atributul cnd este folosit elementul #IMPLIED atributul este opional #FIXED atributul este opional, dar dac este folosit trebuie s ia valoarea default setat n DTD. ENTITY DECLARATION - definete un alias pentru un bloc text. Internal Entity <!ENTITY store1 River Valley Center> Pentru a o referi se scrie &store1;. External Entity Documentul este mprit n mai multe pri. Referim imagini, clipuri media etc.

<!ENTITY entityName PUBLIC system-identifier> !!!ATENTIE!!! NU SE POT FOLOSI ENTITAI CIRCULARE <!ENTITY loc Library of Congres &US;>

smaranda.belciug@inf.ucv.ro <!ENTITY US &loc; United States> Parameter entities Parameter entities se folosesc pentru a crea scurtturi n crearea unui DTD. Internal: <!ENTITY % entityName replacementText> External: <!ENTITY % Bks SYSTEM book.dtd> <!ENTITY % Sls SYSTEM sales.dtd> <!ENTITY % Cust SYSTEM customer.dtd> %Bks; %Sls; %Cust;

nelegerea notaiilor Entitile externe pot fi de dou tipuri: entiti parsate sau entiti neparsate. Dac ele conin text sau XML, atunci ele sunt parsate. Fiierele audio, imaginile etc nu sunt parsate. Pentru a folosi entiti neparsate trebuie declarate o entitate, o notaie i atribute. <!ENTITY entityName SYSTEM entity.url NDATA id> O entitate neparsat se declar n DTD, dar coninutul este adugat ntr-un document XML. <!ENTITY logo SYSTEM logo.gif NDATA gif> Trebuie apoi creat o <!NOTATION pentru a identifica tipul de NDATA care apeleaz aplicaia plug-in special. O <!NOTATION este o mulime de reguli care descrie comportamentul unei entiti neparsate. <!NOTATION id SYSTEM contentType> <!NOTATION gif SYSTEM image/gif> <!NOTATION id SYSTEM contentType> <!NOTATION gif SYSTEM image/gif> SYSTEM este un cuvnt cheie XML care indic faptul c entitatea apare ntr-un URL (URI). PUBLIC indic faptul c pentru entitate se folosete un nume standard. Pentru a folosi o entitate neparsat ntr-un document XML, ce trebuie utilizat ca atribut, nti se adaug un element n DTD care conine atributul. <!ELEMENT image EMPTY> <!ATTLIST image source ENTITY #REQUIRED>

smaranda.belciug@inf.ucv.ro

Apelarea unui DTD DTD intern

DTD Extern <!DOCTYPE rootElement SYSTEM dtd.url> <!DOCTYPE books SYSTEM bookstore.dtd>

smaranda.belciug@inf.ucv.ro

Schem XML O schem XML definete reguli pentru structura i coninutului unui document XML. Termen Declararea XML Sintax Exemplu <xml version = <xml version=1.0 version encoding = UTF-8> encodind = encoding> Ce face? Spune procesorului ce versiune de XML este i ce fel de caractere trebuie folosite Identific <xsd:schema <xsd:schema documentul ca smlns:xsd = xmlns:xsd=http://www. namespace> w3.org/2001/XMLSchema> fiind o schema XML <xsd:element <xsd:element name Definete name=name> =books> elementul books <xsd:attribute <xsd:attribute Definete name=name name=sourceType atributul type = type = xsd:string> sourceType datatype>

Schema element

Declarare element Declarare atribut

DTD-ul este perfect pentru dezvoltarea documentelor care conin mai ales text. Schemele XML sunt perfecte pentru documentele care conin mai multe tipuri de date, precum: numere de telefon, adrese, preuri. Exemplu. O factura invoice conine: ct cost un produs sau un serviciu, cantitatea care a fost vndut sau numrul de ore ct dureaz s fie terminat un anumit serviciu. Cu o schem putem spune ce fel de format trebuie s aiba datele (dou cifre urmate de virgula plus dou cifre). O schema XML are 44 de tipuri de date diferite. Dintre ele fac parte: string decimal dateTime anyURI integer

Fiecare tip de data are anumite constrngeri (minLength sau maxLength pentru string). XML prolog pentru XML schema o declarare XML 8

smaranda.belciug@inf.ucv.ro o declarare de element schem

n cazul n care se folosete un singur namespace, nu este nevoie de prefixul xsd (sau xs). n acest caz nu mai este nevoie s folosim prefix pentru elementele i atributele din document. <?xml version=1.0 encoding=UTF-8?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema> XSD XML Schema Definitions. Declararea elementelor Definiii simple type: declar elemente care nu conin alte elemente sau nu au atribute Definiii complex type: declar elemente care conin alte elemente sau atribute.

Exemplu. Single type: un element de tip data n formatul YYYY-MM-DD year-month-day: <xsd:element name=date type=xsd:date/> Complex type: <xsd:element name=book> <xsd:complexType> <xsd:attribute name=format type=xsd:string use=required/> </xsd:complexType> </xsd:element> Exist patru tipuri de baz de modele de coninut: Text: elementul poate s conin doar text. <xsd:element name=author type=xsd:string/> Empty: elementul nu poate s aib elemente copil sau text. Poate s conin atribute. <xsd:element name=source> <xsd:complexType> <xsd:attribute name=yearsInService type=xsd:positiveInteger:/> </xsd:complexType> <xsd:element> Element: elementul poate s conin elemente copil <xsd:element name=bookInfo> <xsd:complexType> <xsd:sequence> <xsd:element ref=title/>

smaranda.belciug@inf.ucv.ro <xsd:element ref = author/> <xsd:element ref=published/> <xsd:element ref=isbn/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=title type=xsd:string/> Cuvntul sequence este un compositor. Intr-o XML schema pot fi trei compositors: o sequence: elementele trebuie specificate ntr-o anumit ordine n documentul XML. o choice: doar un singur element poate s apar n documentul XML. Unele dintre elementele copil poate s nu apar n documentul XML. o all: se folosete atunci cnd documentul poate s conin unul, niciunul sau toate elementele copil posibile. mixed: elementul conine i alte elemente, dar i text. <xsd:element name=confirmOrder> <xsd:complexType mixed = true> <xsd:sequence> <xsd:element ref=opening/> <xsd:element ref=fullName/> <xsd:element ref=date/> <xsd:element ref=title/> </xsd:sequence> <xsd:complexType> </xsd:element> Valoarea true n complexType indic faptul c se poate folosi text ntre elementele copil. Fiierul XML ar arata aa: <confirmOrder> <opening>To:</opening> <fullName> Popescu Ana</fullName>, Aceasta este confirmare ca pe <date>2011-10-11</date>, am primit comanda dvs. Pentru <title>On the road</title> Vom trimite coletul via pot n dou zile lucrtoare. Multumim, Best Seller Bookstores, Inc.

Declararea atributelor Definiiile complex type (deoarece cele simple nu conin atribute) pot conine unul sau mai multe atribute. Ele trebuie declarate la finalul lui complexType, dup ce toate celelalte componente au fost specificate. <xsd: element name=customer>

10

smaranda.belciug@inf.ucv.ro <xsd:complexType> <xsd:sequence> <xsd:element name = firstName type=xsd:string/> <xsd:element name = lastName type =xsd:string/> </xsd:sequence> <xsd:attribute name = custNumber type=xsd:positiveInteger/> </xsd:complexType> </xsd:element> Atributele sunt optionale. Dac sunt obligatorii trebuie adugat valoarea required. <xsd:attribute name=custType type=xsd:string use=required/> Grupuri de atribute Dac folosim aceeai mulime de atribute la mai multe elemente din schem, putem crea un grup de atribute care poate fi accesat de oricte elemente dorim. <xsd:attributeGroup name=location> <xsd:attribute name=US type=xsd:string/> <xsd:attribute name = Canada type = xsd:string/> <xsd:attribute name = Europe type=xsd:string/> </xsd:attributeGroup> Un grup de atribute trebuie declarat global, adic dupa declararea elementului schem. Spaii goale Spatiul gol din coninutul unui document XML nu este ntotdeauna ignorat de o schem XML, depinde de valoarea dat lui whiteSpace: preserve pstreaz spaiul din jurul elementelor replace indic faptul c tab-urile, return-ul i line feed-urile sunt nlocuite cu spaii collapse- dup ce toate tab-urile, return-urile i line feed-urile sunt nlocuite cu spaii, restul secvenei de spaii este nlocuit cu un singur spaiu. Exemplu.

11

smaranda.belciug@inf.ucv.ro

Declararea tipurilor de date Cu ajutorul declarrii tipurilor de date definim formatul elementelor sau atributelor. Simple datatypes Se pot folosi tipuri de data ntr-o definiie simple type, unde un element nu conine atribute i nici alte elemente: <xs: element name = itemNumber type=xs:integer/> Complex datatypes <xs:complexType name=priceInfo> <xs:sequence> <xs:element ref = princeType/> <xs:element ref=princeN/> </xs:sequence> </xs:complexType> <xs:element name=priceType type=xs:string/> <xs:element name=priceN type=xs:decimal/> .. <xs:element name=price type=priceInfo/> <xs:element name=shipping type = priceInfo/>

12

smaranda.belciug@inf.ucv.ro Practic, tipurile complexe se folosesc pentru a crea un nou tip de dat, care s fie folosit n schema XML. Definirea constrngerilor i verificarea valorilor Noile tipuri de date pot fi derivate din cele 44 deja existente cu ajutorul unei definirii tipurilor de date i a elementului restriction. Un element restriction creeaz o constrngere pentru un tip de dat construit. Exemplu. O definiie de tip simple type pentru constrngerile totalDigits i fractionDigits este folosit pentru a specifica un coninut valid pentru elementul costNumber:

De reinut. Entitile i notaiile (non-XML) dintr-o schem XML pot fi folosite ca valori de atribute i pot fi folosite doar dac exist deja o declarare de notaie n schem, ca n exemplul de mai jos: <xs: notation name = gif public = image/gif system=GIFViewer.exe/> Dup ce am declarat o notaie, numele notaie este asociat cu un atribut, derivnd un nou tip de dat din tipul de data NOTATION, astfel:

Codul de mai sus creeaz o list o list care are un singur element, n acest caz pentru imageType, care limiteaz valoare doar la gif.

13

smaranda.belciug@inf.ucv.ro Adnotrile Annotation Adnotrile sunt folosite pentru a scrie informaii n plus pentru persoanele care citesc documentul. O adnotare se creeaz cu un element annotation care conine fie un element documentation (pentru oameni) fie un appIfno (pentru aplicaii).

n exemplul de mai jos adaugm un element appInfo pentru a include informaii din al limbaj XML schema (Schematron).

Cum includem o schem ntr-un document XML? Cu toate c nu se poate include ntreaga schem n documentul XML, cum se poate face cu un DTD intern, se poate face o referin la o schem n elementul rdcin al documentului XML.

Construirea unei scheme XML 1. nelegerea datelor. Colecia de date este format din titluri de cri, nume de autori etc? Sau este format din numere, numere de telefon, adrese email? 2. Rdcina structurii schemei: Elementele. Ce fel de elemente trebuie s includ schema? Listing books2.xml.

14

smaranda.belciug@inf.ucv.ro

Mai sus este prezentat un singur element book, dar elementul books poate s conin orice numr de elemente book, atta timp ct acest lucru este specificat n schem. 3. Construirea unui model de coninut. Un model de coninut definete tipul coninutului din document. Cele patru modele de coninut pentru elementele dintr-o schem XML sunt: elementul (conine elemente copil), text (conine doar text), mixed (conine elemente copil + text) i empty. Mai jos este markup-ul definiie complex type pentru elementul books.

Putem specifica elementele copil, astfel: Folosind un atribut ref cu o valoare egal cu valoarea numelui atributului din fiecare declarare a elementului copil al elementului. Este nevoie de o declarare separat a elementului copil n schem.

Folosind un nume de atribut cu o valoare egala cu cea a numelui elementului copil, mpreun cu tipul de atribut plus o valoare definit de user printr-un complex type.

Adugarea unei definiii complex type pentru bookType este uoar:

15

smaranda.belciug@inf.ucv.ro

4. Folosirea atributelor. Declararea atributelor se face DOAR ntr-o definiie complex type. Atributele trebuie declarate la finalul definiiei complex type, dup ce toate componentele au fost specificate.

5. Folosirea tipurilor de dat. O declarare de tip de dat definete exact tipul de date cu care se va lucra.

Expresia de mai sus definete formatul preului: semnul $ urmat de 1-4 cifre, apoi punct, apoi 1,2 cifre.

16

smaranda.belciug@inf.ucv.ro

Crearea unei scheme simple 1. Creeaz un prolog XML i un element schema. 2. Adaug un atribut xmlns elementului schema pentru a specifica faptul c acest document folosete namespace-ul XML Schema i prefixul xs: sau xsd:. 3. Adaug elementele i atributele declarate anterior.

17

smaranda.belciug@inf.ucv.ro

18