Sunteți pe pagina 1din 4

XML Namespaces - Domenii pentru nume in XML

Mihai Gabroveanu <mihaiug@central.ucv.ro>


Copyright 2006 Mihai Gabroveanu

Abstract
Domeniile pentru nume XML ofera o metoda simpla de calicare a numelor elementelor si atributelor folosite in documentele XML prin asocierea lor cu domenii pentru nume identicate prin adrese IRI

Table of Contents
1. Introducere ................................................................................................................................ 1 2. Domeniile pentru nume XML ....................................................................................................... 2 2.1. Denirea domeniilor de nume utilizand atributul xmlns ........................................................... 2 2.2. Denirea domeniilor multiple ............................................................................................. 2 2.3. Denirea domeniului implicit ............................................................................................. 3 2.4. Atribute .......................................................................................................................... 3 3. Bibliograe ............................................................................................................................... 4

1. Introducere
Domeniile de nume XML furnizeaza o metoda de reutilizare a marcajelor in documente, eliminad conicte intre numele elementelor si atributelor folosite in oricare din marcaje. Prin conict intelelegem ca un element (sau combinatie element/atribut) denit intr-un DTD are acelasi nume cu un element denit intr-un alt DTD. Exemplu: Sa consideram urmatorul document XML ce reprezinta datele despre un curs.
<?xml version="1.0" ?> <CURS> <NUME>Programare in XML</NUME> <SECTIA>Informatica</SECTIA> <AN>3</AN> <PROFESOR> <PERSOANA> <NUME>Mihai</NUME> <PRENUME>Gabroveanu</PRENUME> <AN>1976</AN> </PERSOANA> </PROFESOR> </CURS>

Se observa ca desi documentul este bine format (well-formed) sunt unele probleme cu acesta. Astfel, elemenul NUME este utilizat cu doua semnicatii diferite: o data reprezinta numele unui curs iar cea de-a doua oara reprezinta numele unei persoane. De asemenea, elementul AN in prima aparitie indica anul de studii iar in cea dea doua reprezinta anul nasterii. Practic, este posibil ca la o prelucrare automata sa se faca confuzie intre aceste elemente ele apartinand la doua concepte diferite. Spunem ca avem un conict de nume. Pentru a rezolva astfel de probleme au fost introduse domeniile de nume (namespaces). Domeniile de nume identica care elemente din document apartin aceluiasi vocabular XML.

XML to PDF by RenderX XEP XSL-FO Formatter, visit us at http://www.renderx.com/

XML Namespaces - Domenii pentru nume in XML

2. Domeniile pentru nume XML


Pentru a putea face distinctie intre elementele ce reprezinta concepte (vocabulare) diferite le vom incardra pe ecare intr-un domeniu de nume (namemespace). Fiecarui domeniu de nume ii vom asocia un URI unic.

Note
Un URI (Universal Resource Identier) este o abstractizare a unui URL. In timp ce un URL identica o locatie un URI identica o resursa. De exemplu, un URI pentru o persona poate codul numeric personal. Asta nu insemana ca putem sa vizualizam o persoana in browser specicandu-i cnp-ul. Acest URI nu poiteaza intotdeauna la un sier anume. URI-ul deneste un domeniu de nume pur formal.

2.1. Definirea domeniilor de nume utilizand atributul xmlns


In exemplu anterior, elementele trebuie incadrate in doua domenii diferite: unul care refera multumea cursurilor si unul care refera multimea persoanelor. Incadrarea unui element intr-un namespace se face printr-un prex urmat de doua puncte :. Asocierea dintre prex si namespace se face utilizand atributul xmlns in radacina elementului ce introduce conceptul. Sintaxa este urmatoarea:
<prefix:nume-element xmlns:prefix="NAME-SPACE-URI"> <prefix:nume-copil>...</prefix:nume-copil> ... </prefix:nume-element>

Exemplu: Sa presupunem pentru exemplul anterior ca multimea cursurilor o in cadram in namespace-ul http://inf.ucv.ro/curs iar multimea persoanelor le incadram in namespace-ul http://inf.ucv.ro/persoana. Atunci sierul XML devine:
<?xml version="1.0" ?> <C:CURS xmlns:C="http://inf.ucv.ro/curs"> <C:NUME>Programare in XML</C:NUME> <C:SECTIA>Informatica</C:SECTIA> <C:AN>3</C:AN> <C:PROFESOR> <P:PERSOANA xmlns:P="http://inf.ucv.ro/persoana"> <P:NUME>Mihai</P:NUME> <P:PRENUME>Gabroveanu</P:PRENUME> <P:AN>1976</P:AN> </P:PERSOANA> </C:PROFESOR> </C:CURS>

Se observa ca ecare element al ecarui concept este precedat de prexul asociat namespace-ului corespunzator. Numele elementelor precedate de prex, adica cele de forma prex:nume-element se numesc nume calicate, iar cele ce urmeaza dupa prex se numesc nume locale.

2.2. Definirea domeniilor multiple


Sintaxa limbajlui XML permite denirea de namespace-uri multipe pentru un element. Sintaxa este urmatoarea:
<prefix:nume-element-radacina xmlns:prefix-1="NS-URI-1" ... xmlns:prefix-n="NS-URI-n"> <prefix-1:nume-copil-ns-1>...</prefix-1:nume-copil-ns1> .... <prefix-n:nume-copil-ns-n>...</prefix-n:nume-copil-ns-n> </prefix:nume-element-radacina>

unde prex este un prex ce identica e un namespace tocmai introdus, e unul denit la unul din parintii elementului, e poate sa lipseasca.

XML to PDF by RenderX XEP XSL-FO Formatter, visit us at http://www.renderx.com/

XML Namespaces - Domenii pentru nume in XML Exemplu: In exemplul anterior am denit ambele namespace-uri utilizate la nivelul elementului radacina:
<?xml version="1.0" ?> <C:CURS xmlns:C="http://inf.ucv.ro/curs" xmlns:P="http://inf.ucv.ro/persoana"> <C:NUME>Programare in XML</C:NUME> <C:SECTIA>Informatica</C:SECTIA> <C:AN>3</C:AN> <C:PROFESOR> <P:PERSOANA > <P:NUME>Mihai</P:NUME> <P:PRENUME>Gabroveanu</P:PRENUME> <P:AN>1976</P:AN> </P:PERSOANA> </C:PROFESOR> </C:CURS>

In general se recomanda ca toate namespace-urile utilizate intr-un document XML sa se declare la nivelul elementului radacina.

2.3. Definirea domeniului implicit


In documentele de dimensiuni mari in care majoriatea elementelor apartin aceluiasi namespace devine deranjata prexarea tuturor tagurilor cu acelasi prex. Aceasta problema poate rezolvata asignand un namespace implicit pentru un element si tuturor copiilor lui. Denirea namespace-ului implicit (default) se face utilizand atributul xmlns fara a urmat de nici un prex. Elementul respectiv impreuna cu toti copii lui se considera ca fac parte din acel namespace implicit daca nu sunt precedati de un prex. Sintaxa denirii acestuia este urmatoarea:
<nume-element xmlns="default-name-space-uri" xmlns:prefix-1="NS-URI-1" ... xmlns:prefix-n="NS-URI-n"> .... </nume-element>

Exemplu: Sa presupunem pentru exemplul anterior ca http://inf.ucv.ro/curs este namespace-ul default. Atunci avem:
<?xml version="1.0" ?> <CURS xmlns="http://inf.ucv.ro/curs" xmlns:P="http://inf.ucv.ro/persoana"> <NUME>Programare in XML</NUME> <SECTIA>Informatica</SECTIA> <AN>3</AN> <PROFESOR> <P:PERSOANA > <P:NUME>Mihai</P:NUME> <P:PRENUME>Gabroveanu</P:PRENUME> <P:AN>1976</P:AN> </P:PERSOANA> </PROFESOR> </CURS>

2.4. Atribute
Deoarece atributele apartin unui element specicat, pentru ele nu exista pericolul confuziei in cazul elementelor similare din namespace-uri diferite. Astfel pentru atribute nu este obligatoriu sa specicam namespace-ul. Totusi pentru a consecventi sintaxa libajului XML permite specicarea namespace-ului prin prexarea la fel ca la elemente cu numele lui. Exemplu:
<?xml version="1.0" ?> <C:CURS xmlns:C="http://inf.ucv.ro/curs" xmlns:P="http://inf.ucv.ro/persoana"> <C:NUME>Programare in XML</C:NUME> <C:SECTIA>Informatica</C:SECTIA> <C:AN>3</C:AN> <C:PROFESOR> <P:PERSOANA P:cnp="176051116039"> <P:NUME>Mihai</P:NUME> <P:PRENUME>Gabroveanu</P:PRENUME>

XML to PDF by RenderX XEP XSL-FO Formatter, visit us at http://www.renderx.com/

XML Namespaces - Domenii pentru nume in XML


<P:AN>1976</P:AN> </P:PERSOANA> </C:PROFESOR> </C:CURS>

3. Bibliografie
Namespaces in XML 1.1 W3C Recommendation 4 February 2004, Tim Bray, Dave Hollander, Andrew Layman, Richard Tobin Elliotte Rusty Harold, XML Bible. IDG Books Worldwide, Inc, 919 E. Hillsdale Blvd., Suite 400, Foster City, CA 94404 http://www.w3schools.com/xml/

XML to PDF by RenderX XEP XSL-FO Formatter, visit us at http://www.renderx.com/

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