Sunteți pe pagina 1din 103

un model de date pentru Web (II)

//*
XML Infoset, acces via XPath, validri DTD

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

Tehnologii Web

Chuang-Tzu

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

neleptul te nva prin faptele sale,


nu prin cuvintele sale.

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

Cum modelm (reprezentm) datele?

Scop:
specificarea unui model de date (abstract)
pentru XML

recomandare W3C, 2004

www.w3.org/TR/xml-infoset

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset

Se ofer un punct de vedere comun referitor la:


serializarea datelor semi-structurate

reprezentare intern (n memorie) fiier text XML

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset

Se ofer un punct de vedere comun referitor la:


crearea/folosirea de API-uri de procesare XML

ntr-o manier standardizat

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset

Se ofer un punct de vedere comun referitor la:


definirea unor specificaii de nivel (mai) nalt
exemple: XPath, XSLT sau XML Schema
care recurg la acelai model abstract XML

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset

Modelul asigura inter-operabilitatea diferitelor


tehnologii, interfee de programare (API-uri)
i aplicaii XML

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset

Document (document information item)


considerat a fi un arbore, cu rdcina dat
de proprietatea [document element]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Document (document information item)


are proprietatea [children] desemnnd
lista de lucruri (items) din document,
n ordinea dat de algoritmul DFS (depth-first search)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Element
specific un element XML
posed proprietatea [parent] oferind informaii
despre elementul printe cruia i apartine
are asociat proprietatea [children]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Element
proprietatea [local name] desemneaz numele local
al elementului aparinnd unui spaiu de nume indicat
via [namespace name]
prefixul spaiului de nume utilizat este stocat
de proprietatea [prefix]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Element
proprietatea [attributes] ofer lista neordonat
a atributelor ataate
proprietatea [namespace attributes] specific
lista neordonat a atributelor xmlns asociate

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Atribut (attribute)
desemneaz conceptul de atribut XML

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

numele i spaiul de nume ataat sunt specificate


de proprietile [local name] i [namespace name], respectiv

Atribut (attribute)
elementul cruia i aparine este indicat
de proprietatea [owner element]
valoarea propriu-zis a atributului
este specificat de [normalized value]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Caractere (characters)
corespund informaiilor textuale
ale coninuturilor elementelor XML
proprietatea [parent] indic elementul cruia i aparin

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

proprietatea [children] conine datele-caracter propriu-zise

Caractere (characters)
setul de caractere utilizat este desemnat
de proprietatea [character code]
modul de procesare a spaiilor albe este specificat
de proprietatea boolean [element content whitespace]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Attribute

Characters
Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

Element

Instruciuni de procesare
(processing instruction information item)

Comentarii
(comment information item)

Declaraia tipului de document


(document type declaration item)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: concepte

Construciei
<antologie xmlns=
"http://www.infoiasi.ro/antologii"
coordonator="Sabin Buraga" />
i corespunde infoset-ul:

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xml-infoset: exemplu

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

n ce mod pot fi accesate datele stocate


de un document XML?

XPath 1.0

recomandare a Consoriului Web (1999)


www.w3.org/TR/xpath

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath

XPath 1.0
adreseaz pri dintr-un document XML
ofer faciliti de baz pentru manipularea datelor
(iruri, numere,)
opereaz la nivelul structurii abstracte
a documentelor XML (arborele)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath

expresia XPath construcie de baz


evaluarea se realizeaz n funcie de context:
un nod al documentului XML
poziie
o funcie (predefinit sau specificat de programator)
o declaraie a unui spaiu de nume

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath

expresia XPath construcie de baz


n urma evalurii expresiei, e oferit un obiect:
o mulime de noduri (node-set)
o valoare logic true/false
un numr (float)
un ir de caractere

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath

Descendent /
/html/body/article
/cuprins/capitol/autor

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Traversare recursiv //
//capitol
//cuprins
//div/a

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Traversare recursiv //
//capitol
//cuprins
//div/a
Atenie la problemele de performan!
De ce?

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Wildcard *
/cuprins/*/nume
capitol/*

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

/html/body/*/section

evaluarea de expresii XPath


via extensia FirePath pentru Firefox

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Nodul curent .
./capitol

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Atribut @
capitol/@nr
table/@*

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Spaiu de nume :
svg:*

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Spaiu de nume :
//html:*

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Filtru/index [ ]
/cuprins/capitol[2]
//li[@class = "presentation"]

forma general: [expresie]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

6 noduri <li> (de tip Element) care au ca valoare


a atributului class irul de caractere "presentation"

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Pentru valori logice i numerice pot fi folosii


operatorii uzuali:
or and = != <= < >= >
+ - * div mod

comparaiile de iruri sunt case sensitive

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

furnizai semnificaia expresiei XPath:


//*[@class="tools" or @class="presentation"]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Nodul curent (context node)


Nodul printe
Nodurile copil
Nodurile descendente
Nodurile de tip atribut
Nodurile spaiilor de nume

self
parent
child
descendant
attribute
namespace

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath axe

Nodurile ascendente

ancestor

Nodurile ascendente
ori nodul curent

ancestor-or-self

Nodurile descendente
ori nodul curent

descendant-or-self

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath axe

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

//div/descendant::a
//div/descendant::*
Ce valoare ofer fiecare expresie XPath?

expresia XPath

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath axe

/produse/produs/promo/preceding::*

ofer rezultatul
<nume>Ping Uinix</nume>
<ofertant>
http://www.pinguin.info
</ofertant>

folosind axa preceding accesm nodurile precedente


aici, instrumentul Web de testare disponibil la
http://www.xpathtester.com/xpath

self
parent
attribute
namespace

../nume
//child::*[@nr > 2]

.
..
@
:

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath sintaxa prescurtat

Noduri: id(), position(), count(), name(),


namespace-uri(), last(),
Tipuri de noduri: node(), text(), comment(),
processing-instruction()
iruri: concat(), starts-with(), contains(), substring(),
string-length(), translate(),
Booleeni: not(), true(), false()
Numere: sum(), round(), floor(), number(),

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath funcii

count(//li[@class = "presentation"])
numrarea nodurilor ce satisfac o anumit condiie

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath funcii

count(//a[@href]) = count(//a)true
toate elementele <a> includ atributul href

count(//li[@class]) = count(//li)false
exist elemente <li> care nu au specificat atributul class

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath funcii

furnizai semnificaia expresiei XPath:


//nav/*/li[position() mod 2 = 1]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath functii

gsirea sub-nodurilor elementelor <li> aflate pe ultima


poziie din primele liste neordonate: //ul[1]/li[last()]/*

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath functii

precizai semnificaia expresiei XPath:


//section[@id and not(contains(@id, "week"))]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl:

Ce efect are expresia XPath?


xpath
operatori
//nav/*/*[position()
<= 2]/*[@href]/text()

//*[contains(text(), "XML")]
furnizarea tuturor nodurilor care conin irul "XML"

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

precizai semnificaia expresiei XPath:


//li[@class="presentation"]/*/a[@href]

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

furnizai semnificaia expresiei XPath care-i diferena?


//li[@class="presentation"]/*/a[@href]/text()

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

<projects>
evaluarea expresiilor XPath
<project class="S">
direct n linia de comand
<title>Super</title>
<desc>Un super proiect pentru super studenti!</desc>
<stud>1</stud>
<url>http://super.info/</url>
</project>
<project class="M">
<title>Super--</title>
<desc>Un proiect care nu e foarte super...</desc>
<stud>2</stud>
<url>http://www.supermm.org/</url>
</project>
</projects>

instrumentul xmllint (folosete LibXML)


oferit de distribuiile GNU/Linux + Mac OS X
xmllint projects-dtd.xml
--xpath "substring(/projects/project[1]/desc/text(), 4, 5)"

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath operatori

Procesarea datelor XML


n conjuncie cu DOM (Document Object Model)
ori alte metode de prelucrare

detalii n
cursul viitor

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath utilizri pragmatice

avansat
Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath utilizri pragmatice


Transformarea documentelor XML n alte formate
n conjuncie cu XSL (Extensible Stylesheet Language)
XSLT permite generarea de reprezentri
precum HTML, XML sau text obinuit
XSL-FO faciliteaz crearea de obiecte de formatare n
vederea tipririi e.g., generarea de documente PDF
detalii n S. Buraga, Tehnologii XML:
www.slideshare.net/busaco/sabin-buraga-tehnologii-xml

avansat

Interogarea documentelor XML


n conjuncie cu XQuery
context: servere de baze de date
native sau suport pentru XML
de consultat
suplimentul
detalii n S. Buraga, Tehnologii XML:
www.slideshare.net/busaco/sabin-buraga-tehnologii-xml

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath utilizri pragmatice

libxml (C, cu portri pentru alte limbaje;


include i utilitarul xmllint)
http://xmlsoft.org/
lxml i py-dom-xpath biblioteci Python
http://lxml.de/
REXML (Ruby)
modul XML cu suport i pentru XPath
SimpleXML procesri cu XPath n PHP
http://php.net/manual/en/simplexmlelement.xpath.php

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath programare

define ('FLUX', 'http://www.infoq.com/feed'); // adresa fluxului de tiri RSS


define ('XPATH', '/rss/channel/item');
// expresia XPath utilizat

xsl: xpath programare

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

// funcie ce genereaz o legtur HTML spre resurs,


// oferind inclusiv descrierea ei
function genereazaLegatura ($url, $titlu, $dataPub = '', $desc = '') {
return "<section class='news'><p><a href=\"$url\" title=\"$titlu\">$titlu</a>
($dataPub)</p><div>" . $desc . "</div></section>";
}
try {
$xml = @simplexml_load_file (FLUX);
// ncrcm documentul XML
// baleim nsemnrile (aici, elementele <item> din RSS)
foreach ($xml->xpath (XPATH) as $stiri) {
echo genereazaLegatura ($stiri->link, $stiri->title,
$stiri->pubDate, $stiri->description); }
}
catch (RuntimeException $e) {
echo $e->getMessage();
// a survenit o excepie
}

<?xml version="1.0" encoding="UTF-8"?>


<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>InfoQ</title>
<link>http://www.infoq.com</link>
<description>InfoQ feed</description>
<item>
<title>Facebook Open Sources React Native, Year
and Network Class, Fresco and Nuclide</title>
<link>http://www.infoq.com/news/2015/03/react-native-fresco-nuclide</link>
<pubDate>Fri, 27 Mar 2015 12:00:00 GMT</pubDate>
<description></description>
<!-- alte meta-date de interes,
exprimate i via vocabularul DCMI (spaiul de nume dc:) -->
<category>Social Networking</category>
<category>Programming</category>
<category>Open Source</category>
<category>Mobile</category>
<category>Development</category>
<dc:creator>Abel Avram</dc:creator>
<dc:date>2015-03-27T12:00:00Z</dc:date>
structura general a unui
</item>
<!-- alte nouti... (i.e., elemente <item>) -->
flux RSS poate fi studiat la
</channel>
http://www.rssboard.org/
</rss>

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath programare

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath programare

un rezultat
al procesrii

xpath (JavaScript) modul Node.js


de vizitat i https://nodejsmodules.org/tags/xpath
XML::XPath modul Perl
https://metacpan.org/release/XML-XPath

XPath API diverse interfee de programare


oferite de Apache Xalan i Saxon pentru Java
(vezi i javax.xml.xpath.XPath din cadrul JAXP)
hxt-xpath Haskell XML Toolbox XPath
https://wiki.haskell.org/HXT

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath programare

avansat

$x ("//p[@class='info']/*[1]/text()")
utilizarea obiectului $x oferit de consola browser-ului
Chrome sau Firefox pentru evaluarea expresiilor XPath

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath

avansat

Instrumente XPath exemplificri:

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

xsl: xpath

FirePath, Firefinder extensii Firebug pentru formularea


de interogri XPath asupra documentelor Web

XPath Helper, Xpath Finder extensii pentru Chrome


EXPath iniiativ de utilizare/creare de extensii
pentru XPath: http://expath.org/

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

(n loc de) pauz

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

Cum verificm corectitudinea datelor XML?

Dorim ca datele modelate via XML


s poat fi regsite, reutilizate i partajate
ntre aplicaii

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

necesiti

O cerin important este de a cunoate:


elementele/atributele ce pot fi specificate
+
modul lor de structurare
e.g., ordinea, numrul minim/maxim de apariii,...

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

necesiti

O cerin important este de a cunoate:


tipul coninutului
exemplu: atributul align poate avea valorile
mutual exclusive left, right, center

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

necesiti

O cerin important este de a cunoate:


ce poate fi considerat valid i ce reprezint eroare
exemplificare:
elementul <img> are coninut vid
(nu va putea include alte elemente)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

necesiti

Grupuri de indivizi specific vocabularul XML


(setul de elemente/atribute permise)
i regulile de marcare modelele structurale

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

Grupuri de indivizi specific vocabularul XML


(setul de elemente/atribute permise)
i regulile de marcare modelele structurale
uzual, grupurile reprezint:
o companie, o industrie, persoane mprtind
interese comune,
dezvoltatori de instrumente de marcare,
un consoriu/organizaie non-profit

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

Modelul structural se aplic unei clase de


documente XML, n vederea verificrii
via un analizor (procesor, parser XML)
a corectitudinii instanelor de documente
aparinnd acelei clase

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

Aspecte de interes:
numirea elementelor/atributelor
definirea regulilor de utilizare a acestora
specificarea structurii i coninutului
definirea constrngerilor
oferirea unui set de convenii de numire

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

Apare necesitatea specificrii


unui set de constrngeri asociate documentelor
XML, astfel nct datele XML s fie verificate
daca sunt valide sau nu din punct de vedere
structural ori al tipului coninutului

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

Modalitile de specificare a constrngerilor


se pot baza pe:
descrieri
reguli
abloane

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

avansat

Modalitile de specificare a constrngerilor


se pot baza pe:
descrieri
exist un element <utilizator>
avnd un atribut nume care are coninutul...
DTD, XML Schema

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

avansat

Modalitile de specificare a constrngerilor


se pot baza pe:
reguli
orice element <utilizator> va avea un atribut nume,
iar coninutul acestui atribut se va conforma regulii...
Schematron
detalii n S. Buraga, Tehnologii XML:
www.slideshare.net/busaco/sabin-buraga-tehnologii-xml

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

avansat

Modalitile de specificare a constrngerilor


se pot baza pe:
abloane pattern-uri
structura documentelor din clasa utilizator trebuie
s se potriveasc (match) conform urmtorului ablon...
RELAX NG
detalii n S. Buraga, Tehnologii XML:
www.slideshare.net/busaco/sabin-buraga-tehnologii-xml

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

soluie

Tipuri de documente
Document Type Definition (DTD)
specificare formal a tipurilor de documente
(constituieni + structur)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

Tipuri de documente
Document Type Definition (DTD)
specificare formal a tipurilor de documente
(constituieni + structur)
n spiritul
limbajelor formale

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

Documentele XML pot avea sau nu un DTD ataat


intern sau extern documentului XML pe care-l valideaz

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

Dac DTD-ul lipsete, documentul trebuie


s respecte un numr minim de constrngeri
document bine formatat well formed

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

Regulile sintactice de specificare


a meta-elementelor DTD provin de la SGML
DTD-ul poate exprima structura coninutului,
indicatorii de apariie, conectorii

detalii: http://www.w3.org/TR/REC-xml

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

Un DTD specific un tip de document:


<!DOCTYPE element_rdcin [
declaraii de elemente, atribute, entiti,...
]>

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

Un DTD specific un tip de document:


<!DOCTYPE element_rdcin [
declaraii de elemente, atribute, entiti,...
]>
<!DOCTYPE projects [
...
]>

exemplu:
lista proiectelor

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd

<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
metaelement

projects
project
title
desc
stud
url

nume de
element
(neterminal)

(project+)>
(title, desc?, stud, url?)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>
(#PCDATA)>

coninut (neterm. & term.)


#PCDATA, EMPTY, ANY
* + ? indicatori de apariie
, | conectori

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: elemente

Coninutul unui element poate fi:


ir de caractere (#PCDATA parsed character data)
vid (EMPTY)
orice alt marcaj/ir de caractere (ANY)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: elemente

Un element poate aprea:


o singur dat numele elementului
de oricte ori, inclusiv niciodat (*)
macr o dat (+)
de zero sau unu ori (?)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: elemente

Ordinea apariiei elementelor:


secven (,)
alternativ (|)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: elemente

elementul cruia
i este asociat

<!ATTLIST projects
update
>
<!ATTLIST project
class
>

CDATA

#REQUIRED

(A | B | C)

"A"

tipul coninutului
CDATA, ID, ENTITY,...
enumerare de valori

mod de apariie
#REQUIRED
#IMPLIED
#FIXED

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: atribute

Coninutul unui atribut poate fi:


ir de caractere (CDATA character data)
identificator unic (ID)
referin la un identificator (IDREF)
referin la o entitate (ENTITY)
enumerare de valori

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: atribute

Un atribut poate fi declarat s apar:


obligatoriu (#REQUIRED)
opional (#IMPLIED)
fix se folosete o valoare a-priori specificat
(#FIXED)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: atribute

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

<!ELEMENT html
(head, body)>
<!ATTLIST html
id
ID
#IMPLIED
xmlns CDATA #FIXED 'http://www.w3.org/1999/xhtml'>
<!ELEMENT img
EMPTY>
<!ATTLIST img
src
CDATA #REQUIRED
alt
CDATA #REQUIRED
height CDATA #IMPLIED
width
CDATA #IMPLIED>
<!ELEMENT table
(caption?, (col* | colgroup*), thead?, tfoot?, (tbody+ | tr+))>
<!ELEMENT caption
#PCDATA>
<!ELEMENT thead
(tr)+>
<!ELEMENT tfoot
(tr)+>
<!ELEMENT tbody
(tr)+>
fragment din DTD-ul
<!ELEMENT colgroup
(col)*>
<!ELEMENT col
EMPTY>
specificnd gramatica
<!ELEMENT tr
(th | td)+>
limbajului HTML

O instan de document trebuie s aib ataat


o declaraie a tipului cruia i aparine:
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE projects SYSTEM "projects.dtd">

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: validare

Validarea documentului se realizeaz


prin intermediul unui analizor procesor, parser XML
(Apache Xerces, libxml, MSXML etc.)
sau utilitar
(exemple: OpenSP, <oXygen/>, xmllint,)

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: validare

<projects>
<project class="D">
<title>Super</title>
<title/>
<desc>Un super proiect!</desc>
<stud atribut="suplimentar">
1
</stud>
<url>http://www.super.ro/</url>
</project>
</projects>

dtd:> xmllint
validare
projects-dtd.xml --valid

validarea unui document XML cu utilitarul xmllint

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

projects-dtd.xml:32: element project: validity error :


Value "D" for attribute class of project is not among
the enumerated set
<project class="D">
^
projects-dtd.xml:36: element stud: validity error :
No declaration for attribute atribut of element stud
<stud atribut="suplimentar">1</stud>
^
projects-dtd.xml:38: element project: validity error :
Element project content does not follow the DTD,
expecting (title , desc? , stud , url?),
got (title title desc stud url )
</project>
^

de studiat
arhiva
exemplelor

<!-- declararea unei entiti (cu utilizarea entitilor predefinite) -->


<!ENTITY busaco
"Sabin Buraga &lt;busaco@infoiasi.ro&gt;">
<!ATTLIST cuprins
titlu
CDATA
editura
CDATA
an
(2004|2005|2007|2009)
<!ATTLIST capitol
numar
CDATA
<!ATTLIST autor
email
CDATA

#REQUIRED
#IMPLIED
"2007">
#REQUIRED>
#IMPLIED>

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

<!-- DTD definind tipul de document 'cuprins' -->


<!ELEMENT cuprins
(coordonator?, capitol+)>
<!ELEMENT coordonator ANY>
<!ELEMENT capitol
(nume, autor*, descriere?)>
<!ELEMENT nume
(#PCDATA)>
<!ELEMENT autor
(#PCDATA)>
<!ELEMENT descriere
(#PCDATA)>

<!DOCTYPE cuprins SYSTEM "cuprins.dtd">


<!-- pentru validare se folosete un DTD extern -->
<cuprins titlu="Programarea in Web 2.0" editura="Polirom" an="2007">
<coordonator>&busaco;</coordonator>

</cuprins>

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: validare

validarea unui document XML via <oXygen /> XML Editor


pe baza Apache Xerces

raportarea erorilor de validare n Visual Studio


recurgnd la MSXML
https://msdn.microsoft.com/en-us/library/ms763742.aspx

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: validare

validarea paginilor Web pe baza DTD-urilor


corespunztoare versiunilor HTML: 3.2, 4.01, 5,
validator.w3.org

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

dtd: validare

extragerea i validarea datelor XML

//*
limbajul XPath definirea tipurilor de documente

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

rezumat

n cadrul orelor de laborator (1115 aprilie 2016)


http://profs.info.uaic.ro/~busaco/teach/courses/web/web-projects.html

Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/

episodul viitor: prezentarea proiectului

S-ar putea să vă placă și