Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Marcarea informatiilor pentru Web - SGML, XML
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

"Comunicarea este esenta stiintei." t8s18sy
(Francis Crick)
SGML - Standard Generalized Markup Language
XML - eXtensible Markup Language

--------------------------------------------------------------------------------

1. SGML - Standard Generalized Markup Language
SGML (Standard Generalized Markup Language) reprezinta un standard international pentru definirea unor metode de reprezentare a textelor in format electronic, independent de dispozitiv si de sistemul de calcul.

1.1 Scurt istoric
Manuscrisele electronice, la inceputurile informaticii, contineau coduri sau macro-uri care indicau un anumit mod de formatare a documentelor, intr-o maniera particulara (codificare specifica depinzind de caracteristicile hardware sau ale sistemului de operare). Prin contrast, modul de codificare generica (aparut la sfirsitul anilor '60) utilizeaza marcatori (tag-uri) descriptivi pentru aranjarea unui anumit document. Printre sustinatorii acestei din urma metode s-a numarat si William Tunnicliffe, presedinte la Graphic Communications Association (GCA) care a dorit sa impuna separarea continutului documentelor de formatul lor.

Tot la finalul anilor 1960, Stanley Rice propune ideea unui catalog universal de marcatori parametrizati pentru structurarea editarii de carte. Norman Scharpf, director al GCA, dezvolta aceasta idee si astfel este creat 'GenCode (R) concept', capabil a recunoaste ce tipuri de coduri sint necesare editarii fiecarui tip de document in parte si modul de includere a documentelor de dimensiuni reduse in unele mai largi. Acest proiect a jucat ulterior un rol important in dezvoltarea standardului SGML.

In anul 1969, Charles Goldfarb, conducator al proiectului IBM de cercetare a sistemelor informationale integrate in domeniul legislativ, impreuna cu Edward Mosher si Raymond Lake, inventeaza GML (Generalized Markup Language) pentru a permite editarea, formatarea de texte si pentru a partaja documente in contextul sistemelor distribuite. GML se baza pe ideile de codificare generica ale lui Rice si Tunnicliffe si introducea conceptul de definire formala a tipurilor de documente prin intermediul unor structuri de elemente recursive.




Parti majore ale GML au fost implementate in sistemele de editare computerizata pe mainframe-uri de catre IBM si alte corporatii. Goldfarb isi continua cercetarile: referinte incrucisate, procesare inlantuita, tipuri de documente concurente, care nu vor apare in GML, dar vor fi dezvoltate ca parti ale SGML.

In 1978, ANSI (American National Standards Institute) prin comitetul sau de procesare a informatiilor stabileste un grup care sa se ocupe de crearea de limbaje de programare pentru procesarea de texte, grup condus de Charles Card, avindu-l ca membru pe Norman Scharpf si apoi cooptindu-l si pe Goldfarb. Rezultatul a fost SGML-ul, a carui prima prezentare a fost expusa in 1980. Din anul 1983, GCA l-a putut recomanda ca standard industrial, sustinut de Ministerul Apararii al Statelor Unite (standardul CALS - Continuous Acquisition and Lifecycle Support).

In 1984, proiectul a fost autorizat de ISO (International Organization for Standardization). Cercetarile au continuat in cadrul comitetului ANSI, acum numit X3V1.8, condus de William Davis, cu sustinerea comitetului GenCode al GCA, avindu-l la conducere pe Sharon Adler de la IBM.

In anul 1985, a fost publicata propunerea ca SGML sa devina standard international si astfel a fost fondat, de catre Joan Smith, in Marea Britanie, grupul international al utilizatorilor de SGML.

Textul final al specificatiilor SGML a fost aprobat si publicat in anul 1986, utilizindu-se un sistem SGML dezvoltat la CERN (Laboratorul european de fizica particulelor) de Anders Berglund: ISO 8879: Information Processing - Text and office systems - Standard Generalized Markup Language (SGML), Geneva.

Aplicatii timpurii importante in SGML
Electronic Manuscript Project (EMP)

Intre anii 1983 si 1987, EMP a fost dezvoltat de AAP (Association of American Publishers) avindu-se in vedere conceperea asistata de calculator a cartilor, ziarelor si articolelor. Aplicatia avea printre facilitati suport de interschimbare a manuscriselor intre autorii lor si editori si includerea de elemente de definire a tabelelor complexe si a formulelor stiintifice.

Computer-aided Acquisition and Logistic Support (CALS)

Partea de SGML a CALS a fost propusa in februarie 1987 de catre Bruce Lapisto, avind ca beneficiar Ministerul Apararii al SUA, devenind in 1988 standard militar (conform MIL-M-28001). Proiecte similare pentru achizitia de date asistata de calculator si suport logistic au fost dezvoltate si de alte tari ca Suedia, Australia, Canada.

1.2 Prezentare a SGML
Precizari generale
SGML este un standard international pentru descrierea de marcaje (markups) ale textelor electronice. In fapt, SGML reprezinta un meta-limbaj, o descriere formala a unui limbaj, in acest caz, un limbaj de adnotare (de formatare) de texte.

Cuvintul marcaj (markup) a fost utilizat initial pentru a descrie anumite adnotari, note marginale in cadrul unui text cu intentia de a indica tehnoredactorului cum trebuie listat un anumit pasaj ori chiar omis. Exemple de acest gen ar fi sublinierea unor anumite cuvinte, folosirea anumitor simboluri speciale, listarea unor parti de document cu un corp de litera (font) specificat etc. Cum formatarea si imprimarea textelor au fost automatizate, termenul s-a extins pentru a acoperi toate tipurile de coduri de marcare inserate in textele electronice cu scopul de a indica modul de formatare, listare ori alte actiuni.

Generalizind, putem defini marcajul sau codarea drept orice actiune de a interpreta explicit o portiune de text. La un nivel superficial, toate textele sint codate: puncte de punctuatie, folosirea de majuscule, dispunerea enunturilor in pagina, chiar si spatiile dintre cuvinte putind fi privite drept marcaje. Codificarea unui text pentru procesarea computerizata este, in principiu, ca o transcriere a unui manuscris din scriptio continua intr-un format special, intern, dictat de utilizator prin folosirea (explicita sau nu) unor directive/marcaje ce definesc modul de interpretare a continutului textului.

Printr-un limbaj de specificare intelegem, astfel, un set de conventii de marcare utilizate pentru codificarea textelor. Un limbaj de marcare trebuie sa specifice multimea de marcaje obligatorii, permise, maniera de identificare a marcajelor si care este semantica fiecarui marcaj disponibil (similar procesului de specificare a sintaxei si semanticii unui limbaj de programare).

Caracteristici
Exista trei caracteristici definitorii ale SGML:

marcaje descriptive (descriptive markups) - folosirea de coduri de marcaje ce ofera nume speciale pentru a clasifica parti de document (de exemplu <para> sau \endAsectionS identifica o portiune dintr-un anumit document, in cazul nostru inceput de paragraf si respectiv de sfirsit de sectiune). Prin contrast, un limbaj de marcare procedurala defineste o actiune de indeplinit la un moment dat (e.g. move(left_margin,2') ori skip(this_line)).

tipuri de documente - SGML introduce notiunea de tip de document si de definitie a tipurilor de documente: document type definition (DTD). Documentele sint privite ca avind tipuri, asa cum au obiectele procesate de calculatoare. Un tip de document este definit formal de partile sale constituiente si de structura lor. De exemplu, definitia unui raport poate consta din titlu si numele autorului, urmate de un rezumat si de o secventa de mai multe paragrafe. Documentele avind asociat un tip, se poate utiliza un parser (analizor) pentru a verifica pentru un text corectitudinea sa, adica apartenenta sa la un tip de document si respectarea elementelor specificate in DTD. Astfel, documente de acelasi tip pot fi procesate intr-un mod uniform. Programele pot exploata informatiile incapsulate in definitiile de structura ale documentelor si se pot comporta deci intr-o maniera inteligenta. De aceea, SGML este luat in consideratie de cercetatori din domeniul inteligentei artificiale, in special de cei care se ocupa de procesarea limbajului natural.

independenta datelor - SGML asigura translarea documentelor codificate in acest mod de la o platforma la alta si de la un mediu software la altul fara pierderea informatiei. SGML ofera un mecanism general pentru substitutia sirurilor de caractere (independent de setul de caractere ales: ASCII, EBCDIC sau UniCode) si posibilitati de extindere a marcajelor.

1.3 Structuri SGML
In continuare vom descrie mecanismul simplu si consistent prezent in SGML pentru marcarea si identificarea unitatilor-text structurale (atomi lexicali), cum ar fi sectiunile, capitolele, paragrafele.

Elemente
Termenul tehnic utilizat de SGML pentru o unitate-text, vazuta ca o componenta structurala, este element. Diferite tipuri de elemente au asignate diferite nume. Fiecare element trebuie specificat explicit intr-un anumit mod. Standardul ofera o varietate de moduri pentru a realiza acest lucru, dar cea mai comuna modalitate este de a insera un marcaj (tag) la inceputul unui element (tag de start) si unul la sfirsitul lui (tag de sfirsit). Perechea tag de start - tag de sfirsit este folosita la incadrarea fiecarei instante a elementului respectiv in cadrul unui text (similar utilizarii diferitelor tipuri de paranteze ori semne de punctuatie; de exemplu, in Pascal comentariile sint specificate intre acolade AS, in Fortran indicii de tablouri sint inserati intre (), in C sectiunile de inceput si de sfirsit de bloc de intructiuni se scriu intre AS, iar in limbajul natural folosim ghilimelele pentru a delimita un citat). In SGML se utilizeaza <element> pentru a specifica un tag de inceput si </element> pentru un tag de sfirsit, unde element este numele unui element oarecare.

Exemplu:

<p>Cum zice si fratele nostru Che Guevara in insemnarile sale ce acuma cetesc la opait: <quote>Pantofarul musai pantofi sa faca, iar revolutionarul, revolutii</quote>.</p>

(Mircea Cartarescu - "Levantul") unde <p> si <quote> denota inceput de paragraf, respectiv de citat.

Modele
Un element poate fi vid (nu contine nimic intre tag-urile de inceput si sfirsit) sau poate contine un text ori alte elemente. Mai multe elemente de acelasi tip pot fi imbricate (asa cum am vazut mai sus).

Astfel, relatiile dintre elementele SGML pot fi vazute in termeni de:

secventa

aparitie

ierarhie

grupare

incluziune

Pentru a ilustra mai detaliat acest aspect, consideram un model structural foarte simplu. Presupunem ca dorim sa identificam o antologie printr-o succesiune de poeme, titlurile lor, versurile din care sint compuse. In termeni SGML, antologie este un tip de document si este compusa dintr-o serie de poeme. Fiecare poem incapsuleaza un element titlu (unic) si citeva aparitii de elemente strofa, fiecare strofa continind un numar de elemente vers. Astfel avem:

<antologie>
<poem><titlu>...
<strofa>
<vers>...
<vers>...
...
</strofa>
<poem>
...
<!-- mai multe poeme... (acesta e un comentariu) -->

</antologie>

La fel, am putea defini acelasi lucru pentru un limbaj de programare:

<prog>
<titlu>...
<decl>
<const>
...
</const>
<var>
...
</var>
<proc>
...
</proc>
<corp>
<instructiune>...</instructiune>
<instructiune>...</instructiune>
...
</corp>
</prog>

Evident, exemplele de mai sus nu ne precizeaza anumite reguli de compunere a unei antologii, respectiv a unui program. Declaratiile de variabile sau de constante sint optionale, dar corpul programului e obligatoriu si acest lucru nu se deduce din cele prezentate anterior. Asadar avem nevoie de un mecanism de precizare a structurii unui text si, desigur, semantica fiecarui element definit.

Totusi, chiar si la acest nivel, documentul de tip antologie poate fi procesat in anumite moduri, pentru diverse scopuri. Un program de indexare ar putea extrage doar elemente relevante criteriului ales pentru realizarea indexului: o lista de titluri, o lista a celor mai des folosite cuvinte dintr-o poezie. Un program de formatare a textului ar putea insera linii intre fiecare strofa, iar titlul fiecarui poem ar putea fi tiparit ingrosat. Un program mai ambitios pentru analiza lingvistica asistata de calculator ar putea determina metrica si tipul de rime ale fiecarui poem. In ceea ce priveste documentul de tip program, s-ar putea concepe un analizor care sa verifice corectitudinea sintactica si, in functie de limbajul dorit, sa genereze automat constructiile specifice acelui limbaj (pentru Pascal <prog> ar putea fi inlocuit de program identificator;, iar in C de void main(void). <corp> ar fi begin in varianta Pascal si A in C, iar </corp> ar fi end, respectiv S etc.)

Definirea structurii unui document (Document Type Definition)
DTD este exprimata in SGML ca un set de afirmatii (instructiuni) declarative, utilizind o sintaxa simpla. Pentru modelul antologie, am putea scrie definitia urmatoare:

<!ELEMENT antologie - - (poem+)>
<!ELEMENT poem - - (titlu?,strofa+)>
<!ELEMENT titlu - 0 (#PCDATA)>
<!ELEMENT strofa - 0 (vers+)>
<!ELEMENT vers 0 0 (#PCDATA)>

Fiecare declaratie reprezinta o definitie formala a unui element. O declaratie (meta-element) este delimitata de < si >, primul caracter fiind semnul de exclamatie, urmat imediat de un cuvint cheie SGML, care denota tipul obiectului ce va fi definit. Fiecare definitie este compusa din trei parti: un nume sau un grup de nume (neterminali in jargonul limbajelor formale), doua caractere specificind regulile de minimizare (vezi mai jos) si un continut (neterminali si terminali). Dupa cum se observa, fiecare definitie poate fi asimilata cu o productie. Partile componente ale unei declaratii sint separate de spatii albe (spatiu, tab-uri sau NL).

Reguli de minimizare
Aceste reguli determina daca tag-urile de inceput si de sfirsit de element trebuie sa fie prezente la fiecare aparitie a respectivului element. Regulile sint de fapt perechi de caractere: primul se refera la tag-ul de start, iar cel secund la tag-ul de sfirsit. Pot fi prezente numai caracterele "-" (tag obligatoriu) si "O" (tag optional). Dupa cum se remarca, doar elementele antologie si strofa au ambele tag-uri obligatorii, pe cind la titlu poate apare numai tag-ul de start.

Continutul
Inchisa intre paranteze, a treia parte a definitiei se numeste model-continut, specificind ce alte elemente pot apare in cadrul elementului definit. Cuvintul cheie #PCDATA (parsed character data) indica posibilitatea aparitiei oricarui caracter valid. Alte tipuri de date: CDATA (character data), RCDATA (replaceable character data), SDATA (specific data), NDATA (non-SGML data), EMPTY (no data - element vid), ANY (orice tip de data).

Indicatori de aparitie
In declaratia elementului strofa observam aparitia unui semn special, un indicator de aparitie, care poate fi:

semnul plus (+) elementul respectiv poate apare de una sau mai multe ori (o strofa e compusa din cel putin un vers)

semnul asterisc (*) elementul poate apare de zero, unu sau mai multe ori

semnul intrebarii (?) elementul poate apare de cel mult o data (un poem poate avea un unic titlu sau nici unul, dar e compus macar dintr-o singura strofa)

Conectori
Un model-continut poate cuprinde mai multe componente intr-o anumita ordine dictata de un conector. In exemplul nostru s-a utilizat virgula. Conectorii pot fi:

virgula (,) componentele trebuie sa apara obligatoriu in ordinea specificata

ampersand (&) componentele trebuie sa apara, dar in ordine aleatoare

bara verticala (|) doar una dintre componente poate apare

Daca la definirea elementului poem am fi pus & in loc de virgula, atunci titlul ar fi putut apare la sfirsitul poeziei, dupa strofe!

Observatii
Putem reprezenta DTD ca un arbore: radacina este definitia elementului antologie (simbol de start) care are ca fiu poem, iar poem are ca fii titlu si strofa si asa mai departe.

In SGML e permis sa definim modele-continut in care fiecare componenta este o lista de elemente, combinata cu conectorii de grup. Astfel am putea avea definitii ca:

<!ELEMENT catren 0 0 (vers1,vers2,vers3,vers4)>
<!ELEMENT (vers1|vers2|vers3|vers4) 0 0 (#PCDATA)>

(un catren e compus din patru versuri, fiecare vers continind orice caracter)
Mai complex, sa presupunem ca in cadrul unui poem apare si un refren care poate fi prezent doar la inceputul unui poem ori ca o adaugire optionala dupa fiecare strofa:

<!ELEMENT refren - - (#PCDATA|vers+)>

<!ELEMENT poem - 0 (titlu?,((vers+)|(refren?,(strofa,refren?)+)))>

Exceptii
SGML permite ca orice model-continut sa fie modificat prin intermediul unei liste de exceptii. Exceptiile pot fi:

includeri elementele aditionale pot fi incluse intr-un anumit moment in model (specificate cu semnul plus +)

excluderi anumite elemente nu pot fi incluse in cadrul modelului curent (specificate cu semnul minus -)

Cind includerile si excluderile privesc acelasi element, excluderile sint prioritare (conform standardului ISO 8879).

Revenind la tipul de document program, in corpul unui program nu pot apare declaratii de constante sau de variabile:

<!ELEMENT (vardecl|constdecl) - - (#PCDATA)>
<!ELEMENT prog - - (titlu?,
((vardecl?|constdecl?|procdecl?),corp)>

In acest caz, corp ar trebui declarat astfel:

<!ELEMENT instructiune - - (#PCDATA)>
<!ELEMENT corp - - (instructiune*) - (vardecl|constdecl)>

Corpul poate contine mai multe instructiuni (posibil nici una), dar nu poate include declaratii de variabile sau de constante.

Structuri concurente
Toate structurile discutate pina acum au avut o ierarhie simpla, la fiecare nivel al arborelui fiecare nod apartinind unui nod parinte.

Urmarim in continuare sa paginam antologiile create. Declararea unei pagini este simpla:

<!ELEMENT pag - - ((titlu?,vers+)+)>

Totusi, o inserare a elementului pag in ierarhia definita pina in prezent nu este chiar atit de facila. Anumite poeme pot fi mai lungi decit o singura pagina (sa ne gindim la "Luceafarul" eminescian), pe cind alte pagini pot contine mai multe poeme. De asemeni, nu putem insera <pag> intre <antologie> si <poem> si nici intre <poem> si <strofa>. Este necesara o facilitate de a putea defini o ierarhie separata, cu aceleasi elemente la baza ei (strofe, versuri si titluri), dar combinate intr-o suprastructura diferita.

Pentru fiecare arbore de ierarhie vom scrie o definitie DTD diferita:

<!DOCTYPE antologie a
<!ELEMENT antologie - - (poem+)>
<!ELEMENT poem - - (titlu?,strofa+)>
<!ELEMENT strofa - 0 (vers+)>
<!ELEMENT (titlu|vers) - 0 (#PCDATA)>
i>

Numele tipului de document este dat de simbolul de start (elementul radacina al ierarhiei).

Mai specificam si tipul de antologie paginata antologpag:

<!DOCTYPE antologpag a
<!ELEMENT antologpag - - (pag+)>
<!ELEMENT pag - - ((titlu?,vers+)+)>
<!ELEMENT (titlu|vers) - 0 (#PCDATA)>
i>

Avem astfel doua metode diferite de a explora acelasi text de baza (fie consideram grupuri de strofe si poeme, fie grupuri de versuri sau titluri). Acelasi text este vizibil din ambele directii, difera doar aranjamentul.

Este necesar sa indicam carei ierarhii apartine fiecare element. Aceasta se realizeaza incluzind numele tipului de document intre paranteze imediat inainte de un identificator, in cadrul tag-urilor de inceput si de sfirsit: paginile vizibile doar in documente de tip antologpag trebuie marcate cu <(antologpag)pag> si </(antologpag)pag>. Similar, poemele si strofele apar doar in tipul antologie, deci avem constructii ca: <(antologie)poem> sau <(antologie)strofa>.

In prezent, concurenta este optionala si nu toate analizoarele SGML sint obligate sa o suporte.

Atribute
In contextul SGML, un atribut e utilizat sa descrie o anumita proprietate a unei aparitii specifice (particulare) a unui element. De exemplu, un paragraf poate accepta ca atribut optional modul de aliniere (la stinga, la dreapta sau centrat), iar alinierea nu se realizeaza decit pentru paragraful in cauza si nu are efect la celelalte paragrafe (context local).

Atributele vor apare doar in cadrul tag-ului de start si nu in tag-ul de sfirsit (ar fi redundant).

Un exemplu:

<prog id=P1 stare="in_lucru" versiune="1.0">
...
</prog>

Elementul <prog> are definite trei atribute: un identificator, o stare si o versiune. Un procesor SGML poate folosi valorile atributelor pentru anumite actiuni specifice. De pilda, un compilator nu va compila decit programele ce au versiunea mai mare de 2.0 si va activa depanatorul daca stare are valoarea "depanare" sau va realiza optimizari de cod in cazul in care stare="definitiv". Identificatorul este folosit uzual pentru o identificare unica a fiecarui element definit in SGML.

Ca si elementele, atributele se declara in DTD, folosindu-se o sintaxa similara. Pentru exemplul de mai sus avem:

<!ATTLIST prog id ID #IMPLIED stare (in_lucru|depanare|definitiv) in_lucru
>

Atributele au fost declarate doar pentru elementul <prog>, specificindu-se pentru fiecare in parte numele, tipurile valorilor acceptate si valoarea implicita.

Tipurile valorilor acceptate pot fi urmatoarele:

ID identificator unic pentru fiecare instanta a elementului

CDATA orice sir de caractere valide (pot fi incluse si tag-uri dar ele nu vor fi recunoscute de parserul SGML)

ENTITY nume de entitate generala (vezi mai jos)

ENTITIES lista de nume de entitati

IDREF pointer (referinta) la alt element similar

IDREFS lista de referinte

NAME nume generic

NAMES lista de nume

NMTOKEN valoarea atributului este orice sir de caractere alfanumerice

NMTOKENS lista de token-uri

NUMBER doar numerele sint acceptate ca valori

NUMBERS lista de numere

NOTATION nume de notatie

A treia parte a definitiei unui atribut specifica modul de interpretare a absentei atributului respectiv. Pot fi utilizate si aici o serie de cuvinte cheie predefinite:

#REQUIRED valoarea trebuie specificata

#IMPLIED valoarea poate lipsi

#CURRENT daca nici o valoare nu apare, ultima valoare specificata va fi folosita

#CONREF referinta continut

Entitati
SGML poseda o metoda flexibila si facila de codificare si referentiere a diferitelor parti ale continutului unui document, intr-un mod portabil. Cuvintul entitate are un sens special: inseamna o parte de text ce are asignat un nume (o entitate poate fi un sir de caractere ori un continutul unui fisier text).

<!ENTITY pg "Pagina Facultatii de Informatica"> defineste o entitate cu numele pg si a carei valoare este sirul "Pagina Facultatii de Informatica".

O entitate sistem se declara astfel:

<!ENTITY CapDoi SYSTEM "sgml.txt"> valoarea ei fiind continutul fisierului text specificat.

Din moment ce o entitate este definita, ea poate fi invocata oriunde in document, precedata de & (sau de %) si urmata de punct-virgula.

De exemplu, textul "Acest proiect se ocupa de &pg;!" (similar deci macrosubstitutiei realizate de preprocesorul C).

O alta utilizare a acestei facilitati ar fi generarea unor caractere din codul extins pentru alfabete ale unor limbi ca romana, chineza sau greaca. De exemplu, vom scrie &acirc; pentru a obtine a sau &copy; pentru ©.

SGML ofera si posibilitatea de a referi caracterele prin valorile lor numerice: referinte caracter. O referinta caracter incepe cu &# si se sfirseste cu ; desigur (ca exemplu &#107;).

O forma speciala de entitati, numite entitati parametru, pot fi utilizate in declaratiile SGML. Aceste entitati au urmatoarele caracteristici speciale:

entitatile parametru se folosesc numai in cadrul declaratiilor de marcare SGML

entitatile parametru sint delimitate de % si ; in loc de & si ;

Declararea entitatilor parametru are aceeasi forma ca si cea a entitatilor generale, dar intre cuvintul cheie ENTITY, procent si numele entitatii trebuie sa apara obligatoriu spatii albe.

Exemple:
<!ENTITY % doc.prose 'INCLUDE'>
<!ENTITY % doc.extens SYSTEM 'doc.dtd'>

Anumite entitati pot fi publice, in general inregistrate de ISO sau alte organizatii:

<!ENTITY %ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN">
<!ENTITY %IBMchars PUBLIC "+//IBM//ENTITIES IBM PC Character Set//EN">

Marca +// semnifica faptul ca entitatea sau resursa folosita este inregistrata. Entitatile neinregistrate au -// in componenta.

Sectiuni de marcare
Ocazional, anumite parti ale documentului necesita un tratament special din partea parserului SGML, prin intermediul cuvintelor cheie de mai jos:

INCLUDE sectiunea marcata cu acest specificator va fi inclusa in document si procesata normal

IGNORE sectiunea va fi omisa complet (exclusa din document)

CDATA sectiunea poate contine siruri de caractere dar toate constructiile SGML si entitatile nu vor fi recunoscute de analizor

RCDATA ca mai sus, insa referintele la entitati vor fi recunoscute si expandate

TEMP sectiunea inclusa este o parte temporara a documentului care ulterior ar putea dispare

Un exemplu:

In anumite cazuri, procentul de calculatoare performante poate ajunge pina la 90%.
<!a IGNORE a
In anii 1990, situatia s-a schimbat.
ii>

1.4 Declaratia SGML
Intreaga definitie a structurii unui document trebuie scrisa conform unui standard SGML. Pentru aceasta, se foloseste declaratia SGML care ofera o serie de indicatii sistemului de procesare: seturile de caractere utilizate, informatii de control, limitari etc.

Astfel, meta-elementul SGML poate contine:

"standard"

standardul SGML folosit (de exemplu "ISO 8879:1986")

CHARSET

include setul de caractere de baza (BASESET) si setul de caractere de descriere (DESCSET)

CAPACITY

capacitatea memoriei utilizate in analizarea documentelor

SCOPE

scopul sintaxei, poate fi DOCUMENT sau INSTANCE

SYNTAX

maniera de procesare sintactica: SHUNCHAR CONTROLS (caractere care nu sint suportate), BASESET si DESCSET (seturile de caractere descrise mai sus), NAMES (regulile de numire a tag-urilor), NAMECASE (specifica faptul daca literele mici sint echivalente cu cele mari), DELIM (posibilitati de schimbare a delimitatorilor standard), QUANTITY (diverse limite pentru lungimea numelor elementelor)

FEATURES

defineste diverse facilitati de procesare
APPINFO

specifica informatii despre sistemul de procesare
Declaratia <!SGML...> nu este intotdeauna necesara procesarii definitiilor tipurilor de documente create.

1.5 Proiecte si aplicatii SGML
O varietate de produse-program este disponibila pentru asistenta crearii, validarii si procesarii documentelor SGML. Ca tipuri de utilitare putem enumera:

parsere (analizoare) SGML - decid daca un document scris in SGML este corect, pe baza definitiei tipului de document (DTD), la iesire furnizind raspunsul da/nu si chiar o noua versiune a documentului

editoare structurale - sint un fel de procesoare de texte inteligente, utilizind informatiile extrase din DTD pentru a interoga utilizatorul care elemente sint necesare la diverse puncte ale documentului

formatatoare - inlocuiesc tag-urile, producind o forma gata de listare a documentului

sisteme de gestiune a bazelor de date orientate-text - utilizeaza indecsi pe baza carora extrag anumite informatii din texte (folositoare pentru realizarea de glosare, sumare etc.)

sisteme hipertext - extind metodele de manipulare a textelor suportind legaturi de asociere intre diverse parti ale documentelor, inserare de obiecte multimedia (figuri, sunet, film) si altele; navigatoarele Internet actuale sint un exemplu de sisteme hipertext evoluate

Prezentam o serie de proiecte si de aplicatii privind SGML-ul:

Proiecte de cercetare
HyTime: ISO 10744 Hypermedia/Time-based Structured Language

SMGL (Standard Music Description Language)

Metafile for Interactive Documents

IBM Information Development Document Type

ELVIS - Elektronisches Literaturverzeichnis-Informatik für Sehgeschedigte

MIME-SGML (Multipurpose Internet Mail Extensions)

eXtensible Markup Language (XML)

OpenTag Initiative

Text Encoding Initiative (TEI)

Project Opera (Outils pour les documents electroniques, recherche et applications)

European Corpus Initiative (ECI)

Lingua Parallel Concordancing Project

Aplicatii
Analizoare

SP: James Clark's New SGML Parser Toolkit (disponibil pentru DOS si Windows)

YASP: Pierre Richard's Yorktown Advanced SGML Parser

YAO (Yuan-Ze-Almaden-Oslo project) Parser Materials

Editoare/vizualizatoare

PSGML - editor Emacs pentru scrierea de documente SGML

HoTMetaL - editor HTML conceput de SoftQuad, disponibil pentru UNIX, Windows etc.

Syntext - vizualizator al gramaticii SGML

PerlSGML - colectie de programe si biblioteci Perl necesare procesarii documentelor SGML: dtd2html (utilitar de documentare si navigare prin DTD), dtddiff (utilitar de listare a modificarilor survenite in DTD), dtdtree (generator al arborilor elementelor SGML) si altele

SARA (SGML-Aware Retrieval Application) - sistem client/server ce permite existenta unei baze de date de texte incluzind marcaje SGML spre a fi partajata si integerogata de clienti aflati la distanta. Sistemul a fost dezvoltat la Universitatea Oxford si prevede un limbaj de interogare de nivel inalt CQL (Corpus Query Language)

sgrep - program de cautare in documente structurate (fisierele text structurate pot fi fisiere SGML, HTML, TeX, C), conceput de Pekka Kilpelainen si Jani Jeakkola, disponibil in medii UNIX

Convertoare SGML

Rainbow - limbaj de interschimbare a formatelor pentru procesoarele de texte, avind ca suport SGML. In prezent recunoaste formate ca MIF, RTF, InterLeaf si Ventura

CoST (Copenhagen SGML Tool, UNIX) - mediu de programare a aplicatiilor, controlat de SGML, scris de Klaus Harbo si ulterior de Joe English

NSL (Normalised SGML Library) - biblioteca de functii de convertire a documentelor SGML

Utilitare de formatare

format - pachet de formatare a documentelor SGML in LaTeX, scris de Thomas Gordon

SGML-Tools - pachet de formatare de texte bazat pe SGML care permite producerea de documente LaTeX, HTML, LyX, RTF si ASCII dintr-o singura sursa (multiple tag-uri specifice fiecarui format in parte pot coexista in cadrul fisierului de intrare), disponibil sub UNIX (in particular Linux)


DynaText - un sistem complex de management si validare a documentelor SGML
2. XML - eXtensible Markup Language
Descendent al SGML, XML (eXtensible Markup Language) este un meta-limbaj utilizat in activitatea de marcare structurala a documentelor, a carui specificatie a fost dezvoltata incepind cu 1996 in cadrul Consortiului Web, la care au aderat ulterior o serie de grupuri de experti din comunitatile academice (Text Encoding Initiative, NCSA, James Clark) si industriale (SUN, IBM, Netscape, Oracle, Adobe etc.).

In fapt, XML este compus dintr-o familie de limbaje menite a adapta curentele concepte de publicare a documentelor la Internet. XML este compus din:

XML (eXtensible Markup Language) - subset al specificatiei SGML, conceput pentru o implementare mai usoara, avind in ultima perioada o dezvoltare extraordinara;

XLL (eXtensible Linking Language) - set al mecanismelor hipertext bazate pe HyTime si Text Encoding Initiative, concretizat in doua componente majore:

XLink - conceput pentru descrierea legaturilor dintre obiectele Internet

XPointer - compus dintr-o serie de termeni de localizare relativi la alte locatii

XSL (eXtensible Stylesheet Language) - limbaj standard al foilor de stil, ca subset al DSSSL, permitind atasarea de semantici elementelor XML si transformarea documentelor XML in alt tip de documente (XML, HTML, MathML etc.)

XUA (XML User Agent) - directie de standardizare a navigatoarelor XML.

2.1 Trasaturi principale ale XML

Subset simplificat al SGML

foarte puternic, dar usor de implementat

fara limite in ceea ce priveste complexitatea structurilor ce pot fi definite

indeajuns de compact pentru a fi suportat de navigatoarele Web

Ofera suport pentru uzul international

marcajele si continutul pot fi reprezentate in Unicode

uneltele de dezvoltare XML pot suporta orice codificari

Metalimbaj

conceput pentru a suporta definirea unui numar nelimitat de limbaje specializate, oferind suport de extinderi

portabilitate

2.2 Deosebiri esentiale fata de SGML

Orice document XML trebuie sa inceapa cu meta-elementul <?xml ...>.

In XML nu trebuiesc realizate definitii ale tipului de document (DTD) obligatorii.

Elementele vide nu sint acceptate. Un element vid are o sintaxa modificata: <element />.

Numele de elemente si de atribute sint case-sensitive (<tag> este diferit de <Tag> sau de <TAG>).

In XML pot fi specificate anumite instructiuni de procesare (processing instructions) de forma <?nume informatii ?>; nume, denumit tinta, identifica instructiunile de procesare pentru o aplicatie.

Incluziunile si excluziunile nu sint permise, la fel parametrii de minimizare in declaratiile de elemente.

Numele incepind cu xml ori XML sint rezervate. XML predefineste semantica atributelor xml:space si xml:lang.

2.3 Specificatia tehnica a limbajului
Terminologie
Pentru a descrie elementele care tin de un document XML, in ceea ce urmeaza s-au folosit urmatorii termeni:

poate

Documentele pot sa se conformeze specificatiei, dar nu trebuie sa se comporte conform descrierii actiunii din specificatie.

trebuie

Documentele trebuie sa se comporte conform descrierii altfel se va semnala eroare.

eroare

O violare a unor reguli din specificatie. Un procesor XML poate ignora aceste erori.

eroare fatala

O violare a unor reguli din specificatie. Dupa intilnirea unei astfel de erori, procesorul poate continua cautarea unor astfel de erori si poate sa le raporteze aplicatiei. Dupa descoperirea unei erori fatale este recomandat ca procesorul sa nu mai continue procesarea normala.

constringere de validitate

O regula care se aplica tuturor documentelor XML valide. Violarea acestor constringeri de validitate reprezinta eroare si trebuie, la cererea utilizatorului, sa fie raportate de catre procesoarele XML ce realizeaza validari.

constringerile pentru documentele bine formatate

O regula care se aplica tuturor documentelor XML bine formatate (valide). Violarea acestor constringeri reprezinta eroare fatala.

potrivire

Doua siruri si numere ce sunt comparate trebuie sa fie identice. La cererea utilizatorului, procesoarele pot normaliza anumite caractere la anumite forme canonice.

pentru compatibilitate

O facilitate XML inclusa doar pentru a asigura faptul ca XML-ul ramine compatibil cu SGML-ul.

pentru interoperabilitate

O recomandare inclusa pentru a creste sansele ca documentele XML sa poata fi procesate de procesoarele SGML existente.

Reprezentarea documentelor
Un document XML este format din marcaje si date caracter. Un marcaj este un sir de caractere delimitat de caracterul "<" la inceput si de caracterul ">" la sfirsit. Modul de definire a marcajelor in XML este asemanator celui din HTML, dar exista unele constringeri in plus.

In XML marcajele nu sunt folosite pentru afisarea textelor si imaginilor sau a altor elemente, ci sunt utilizate pentru a scoate (semi-)structura anumite date. Astfel, un fragment de document XML valid poate fi:

<ecuatie>
<titlu>Ecuatia de gradul 1</titlu>
<coeficient grad = "1">7</coeficient>
<coeficient grad = "0">4</coeficient>
</ecuatie>

Sectiunile CDATA
Sectiunile CDATA pot apare oriunde pot apare si datele de tip caracter (in exemplul de mai sus "Ecuatia de gradul 1"). Ele sunt utilizate pentru a include blocuri de text continind caractere care altfel ar fi recunoscute ca si marcaje. Sectiunile CDATA incep cu sirul <!aCDATAa si se termina cu sirul ii>.

In interiorul sectiunilor CDATA nu trebuie sa apara sirul ii fara sa fie urmat de >. Sectiunile CDATA nu pot fi incluse unele in altele.

Exemple corecte:

<!aCDATAa
Aceasta este o sectiune CDATA
ii>
<!aCDATAa
<marcaj>text</marcaj>
ii>

Exemple gresite:

<!aCDATAaa text text
ii text
ii>
<!aCDATAaa text
<!aCDATAa text
ii> text
ii>

Declaratia XML
Documentele XML pot si ar trebui sa inceapa cu o declaratie XML care specifica versiunea limbajului XML utilizat. Declaratia XML incepe cu <?xml si se termina cu ?>. In cazul in care exista in document declaratia XML, aceasta trebuie sa fie primul element al documentului. Declaratia nu poate fi precedata de nici un alt element si trebuie sa fie unica. Exista trei atribute care pot intra in declaratia XML:

version

Reprezinta una din versiunile curente ale XML. Versiunea actuala 1.0 este singura de pina acum si deci declaratia trebuie sa arate astfel: <?xml version="1.0" ?>.

Orice alta versiune specificata nu exista si folosirea ei genereaza eroare. In XML este interzisa utilizarea unuia sau mai multor spatii intre caracterul de inceput al tagului si numele tagului. Deci, declaratia <? xml... este gresita.

Documentele in a caror declaratie exista specificata versiunea trebuie sa se conformeze acestei versiuni, altfel procesoarele XML vor genera eroare. Conformarea cu versiunea specificata inseamna utilizarea constructiilor definite in acea versiune sau in versiunile precedente, dar numai in cazul cind este specificat acest lucru.

encoding

Atributul poate lua valorile "UTF-8", "UTF-16","ISO-10646-UCS-2" sau orice alte valori care reprezinta submultimi ale setului Unicode. Daca se foloseste denumirea unei multimi care nu este definita de ISO atunci trebuie facuta referirea explicit la adresa la care se afla definita acea multime de caractere. Daca se intilneste in text o entitate ce nu poate fi procesata din cauza definirii gresite a multimii de caractere, atunci se genereaza eroare fatala. Multimea de caractere ASCII este o submultime a multimii UTF-8. Exemple de declarare a codificarii:

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

In XML numarul de spatii dintre atribute sau diferite date caracter nu are nici o importanta, spatiile fiind evidentiate doar in cazul unei specificatii speciale a utilizatorului.

standalone

Atributul poate lua valorile "yes" sau "no". In documentele XML pot exista anumite referinte spre alte documente care sa contina definitii ale unor marcaje, atribute sau entitati din document. Cind valoarea este "yes" atunci nu trebuie sa existe referinte spre alte documente. Daca valoarea este "no" atunci este posibil sa existe referinte spre alte documente, dar daca nu exista atunci folosirea atributului nu are sens. Implicit se considera ca un document in a carui declaratie nu se afla atributul standalone nu contine referinte externe.

Definirea tipului de document
Ca si in cazul SGML, tipul unui document XML reprezinta modul in care vor fi specificate informatiile in acel document. Acest lucru se realizeaza prin intermediul DTD-ului (Document Type Definition), iar acest DTD poate fi intern sau extern.

Documentele XML pot avea un DTD sau DTD-ul poate lipsi. Daca exista un DTD intern sau extern, atunci utilizatorul trebuie sa se conformeze acestui DTD, iar in cazul in care lipsesc ambele, atunci utilizatorul poate construi documente respectind un numar minim de constringeri.

DTD-ul intern se declara imediat dupa declaratia XML sau, daca aceasta declaratie nu exista, el va fi primul element exceptind comentariile, spatiile sau instructiunile de procesare. DTD-ul intern se declara utilizind cuvintul cheie DOCTYPE in modul urmator:

<!DOCTYPE element_radacina a declaratie de elemente, atribute, entitati, instructiuni de procesare, notatii
i>

La fel ca la SGML, elementul radacina reprezinta primul tag din multimea tagurilor definite de utilizator. El poate apare o singura data in document si nu trebuie sa se afle in interiorul altui tag. El trebuie sa existe indiferent daca exista specificat un DTD sau nu. Altfel spus, orice document trebuie sa contina un element radacina care satisface constringerile de mai sus.

DTD-ul extern este definit intr-un alt fisier text care trebuie sa se afle la o adresa specificata. Declaratia este asemanatoare, dar intervin cuvintele cheie SYSTEM sau PUBLIC:

<!DOCTYPE cookbook
SYSTEM "https:/www.cookbook.com/cookbook.dtd">
<!DOCTYPE cookbook
PUBLIC "cookbook" "https:/www.cookbook.com/cookbook.dtd">

Fisierul "cookbook.dtd" aflat la adresa specificata in declaratie contine definitiile elementelor ce vor aparea in document. Elementul cookbook trebuie sa apara in DTD-ul specificat. SYSTEM inseamna ca DTD-ul se afla la acea adresa, iar PUBLIC inseamna ca va fi generat un fisier ce va contine acel DTD.

Instructiunile de procesare
Instructiunile de procesare sunt un tip special de marcaj care contin informatii despre anumite aplicatii ce urmeaza a fi executate. Instructiunile de procesare incep cu <? urmat de numele aplicatiei si de o specificare a unor elemente ce tin de acea aplicatie.

Numele aplicatiei din instructiunea de procesare trebuie sa fie diferit de xml, XML, xML sau orice alt mod de a scrie cu litere mari sau mici a cuvintului xml. Declaratia XML este tot o instructiune de procesare, iar cuvintele de acest tip sunt rezervate deoarece urmeaza a fi standardizate intr-o versiune ulterioara.

Iata un exemplu:

<?wordperfect document="manual.wp" ?>

Elementele
In XML (ca si in SGML) elementele se definesc folosind constructia <!ELEMENT. Este interzisa aparitia a unuia sau mai multe spatii intre delimitatorul <! si cuvintul cheie ELEMENT. Prin marcaj vom intelege acelasi lucru ca si prin element.

In XML fiecare marcaj trebuie sa fie urmat de un marcaj de sfirsit. Daca nu se intimpla acest lucru, atunci se semnaleaza eroare si documentul nu va fi afisat. Textul care urmeaza unui marcaj nu trebuie sa contina caracterele lt; si > deoarece sunt rezervate.

Un element in XML poate fi definit utilizind mai multe metode:

Elemente vide

Definirea elementului vid se realizeaza utilizind cuvintul cheie EMPTY:

<!ELEMENT img EMPTY>

Un element vid nu este urmat de text, iar in document o constructie ce foloseste acest tip de element poate apare in doua forme:

<img></img>
<img />

In primul exemplu prezentat elementul vid a fost utilizat ca orice element, in sensul ca tagul de sfirsit incepe cu </, iar in al doilea exemplu este ilustrat un sfirsit de tag special care se poate utiliza numai in cazul elementelor vide. Oricare dintre cele doua metode este corecta si poate fi folosita in document la orice moment.

Elemente ANY

Elementele ANY sint elemente care pot avea orice continut:

<!ELEMENT univers ANY>

Acest mod de definire este util atunci cind scriem DTD-ul unui document si inca nu cunoastem care va fi continutul acelui element. Un element definit astfel poate poseda oricite atribute, poate fi de tip #PCDATA sau poate fi element vid. Acest element este asemanator unei clase abstracte ce va fi ulterior definita.

Elemente cu continut eterogen

Continutul eterogen al unui element reprezinta o succesiune de texte #PCDATA si elemente care vor fi definite asemanator elementului cu continut eterogen pe care convenim sa-l numim parinte. Elementele ce fac parte din parinte vor fi denumite copii.

Un exemplu, corect procesat atit de un analizor SGML, cit si de unul XML:

<?xml version = "1.0" ?>
<!-- definirea tipului de document -->
<!DOCTYPE persoana a
<!ELEMENT persoana (#PCDATA | nume | prenume | informatii)*>
<!ELEMENT nume (#PCDATA)>
<!ELEMENT prenume (#PCDATA)>
<!ELEMENT informatii (#PCDATA | virsta | ocupatia)*>
i>
<!-- documentul propriu-zis -->
<persoana>Studentul 1
<nume>Petriretescu</nume>
<!-- Pot folosi comentarii, este corect -->
<prenume>Gogosar</prenume>
<virsta>22</virsta>
<!-- Nu se specifica ocupatia -->
Acestea au fost datele personale
</persoana>

Elemente cu mai multe nivele

Elementele de acest gen ofera cel mai complex mod de a specifica informatiile. In acest caz elementele din continut sunt separate prin bara verticala sau prin virgula. Un element poate fi o secventa sau o alternativa de copii. Alternativa de alegere a elementelor copii este specificata prin bara verticala, iar secventa prin virgula, exact ca la SGML. Desigur, pot fi specificati si indicatorii de aparitie prin intermediul caracterelor speciale "*", "+" si "?".

Cind un element are un continut eterogen, atunci in definitia sa nu poate intra cuvintul cheie #PCDATA, dar poate exista in orice alt element din continut. In continutul unui element de acest tip nu poate fi specificat de mai multe ori un alt element sau o alta secventa sau alegere de elemente. O secventa nu poate fi continuata de o alegere sau invers.

Exemplele urmatoare sint gresite:

<!ELEMENT persoana (nume, prenume | virsta)>

<!ELEMENT opera (roman | basm, subiect, personaj | caracter)>

In cazul in care o alegere trebuie continuata de o secventa sau invers, secventa respectiv alegerea trebuie incadrata de paranteze. Exemplele de mai sus devin corecte astfel:

<!ELEMENT persoana (nume, (prenume | virsta))>
<!ELEMENT opera ((roman | basm), subiect, (personaj | caracter))>

Daca un element contine in definitia sa copii, atunci trebuie definiti si copii (acesti copii pot fi de orice tip). Numarul spatiilor din definitie poate fi oricit de mare, dar procesoarele nu vor recunoaste decit unul singur, exact ca la HTML. In cazul in care un copil este urmat de unul din caracterele "?", "*" sau "+", atunci intre copil si caracter nu poate fi folosit spatiul.

Atributele
In XML (ca si in SGML) atributele unui element se declara utilizind cuvintul cheie ATTLIST. Nu trebuie sa existe spatii intre <! si ATTLIST. Daca exista doua declaratii ale aceluiasi atribut, atunci prima declaratie este luata in considerare iar celelalte sint ignorate. Multimea tipurilor de atributele in XML este aceeasi cu cea din SGML, iar pentru specificarea modului de aparitie a atributelor se folosesc cuvintele cheie #REQUIRED (aparitie obligatorie), #IMPLIED (aparitie optionala), #FIXED (aparitie optionala, dar atunci cind apar, valoarea atributului trebuie sa fie cea specificata in cadrul DTD-ului). Exista predefinite o serie de atribute pentru a specifica regulile spatiilor albe si identificarea limbii in care se scrie un anumit document sau fragment de document XML.

Regula spatiilor albe
In editarea documentelor, este uneori necesara aparitia "spatiilor albe" (spatii, tab-uri, linii vide). Anumite spatii albe nu trebuie incluse in versiunea finala a documentului, pe cind altele sint obligatorii (de exemplu, in codul sursa sau in cazul productiilor lirice).

Un atribut special xml:space poate fi inserat in documente pentru a specifica, in cadrul elementului in care apare acest atribut, ca spatiile albe sa fie tratate in mod semnificativ. Valorile acestuia pot fi "default" sau "preserve".

<!ATTLIST poem xml:space (default|preserve) 'preserve'>

Identificarea limbajului
Atributul special xml:lang poate fi inclus in documente pentru a defini limbajul utilizat in continutul si valorile atributelor unui element. Un exemplu:

<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<quote autohr="Sainte-Beuve" xml:lang="fr">
Il n'y a que de vivre; on voit tout et le contraire de tout.
</quote>

Entitati
Entitatile sunt utilizate pentru scrierea unor documente de lungimi mai scurte si pentru rapiditatea redactarii documentelor. Entitatile se clasifica in doua tipuri: entitati generale si entitati cu parametri. Entitatile generale se clasifica la rindul lor in entitati interne analizate, entitati externe analizate si entitati externe neanalizate.

Ca si in SGML, entitatile sint definite prin constructia <!ENTITY.

Entitati interne analizate

Entitatile interne analizate se refera in general la un text pe care trebuie sa-l expandeze procesorul XML atunci cind intilneste o referire la acea entitate.

Un exemplu, in care avem definite urmatoarele:

<!ELEMENT pictor (#PCDATA)>
<!ENTITY sdali "Salvador Felipe Jacinto Dali i Domenech">

Entitatea sdali va fi utilizata astfel:

<pictor>&sdali;</pictor>

Valoarea unei entitati care va fi expandata de procesorul XML nu trebuie sa contina caracterele "&",";" sau apostrof si poate face referinte la alte entitati.

Entitati externe analizate

Entitatile externe parsate se refera la un text care trebuie expandat, diferenta fata de cele anterioare fiind aceea ca entitatile externe reprezinta referinte care pot fi utilizate de mai multe documente. Orice schimbare care are loc intr-o astfel de entitate este imediat actualizata in documentele care o utilizeaza. Exista doua tipuri de entitati externe analizate: entitati private care se declara folosind cuvintul cheie SYSTEM si entitati publice declarate prin PUBLIC.

Entitatile private sunt utile in cazurile in care un grup de persoane restrins foloseste aceste entitati. Entitatile publice au gama de utilizare mult mai larga.

Entitati externe neanalizate

Entitatile externe neanalizate se refera la documente care nu sint de tip XML si deci nu trebuie sa fie parsate de analizoarele XML. Analog entitatilor precedente, entitatile de acest tip pot fi private sau publice.

<!ENTITY ent1 SYSTEM "url1" NDATA notatie>
<!ENTITY ent2 PUBLIC "identif" "url2" NDATA notatie>

Cuvintul cheie NDATA comunica procesorului ca exista o notatie referita prin "notatie" (vezi mai jos).

Iata un exemplu, in care elementul img va avea ca tip de valoare a atributului src o entitate externa neanalizata denumita logo, folosind notatia gif:

<!ELEMENT img EMPTY>
<!ATTLIST img src ENTITY #REQUIRED
>
<!ENTITY logo SYSTEM "https://www.site.com/logo.gif" NDATA gif>
<!NOTATION gif PUBLIC "gif viewer">

Entitati interne cu parametri

Entitatile interne cu parametri pot fi utilizate doar in interiorul DTD-ului. Valoarea lor trebuie sa satisfaca aceleasi constringeri de la entitatile generale si modul lor de definire este similar celui de la SGML.

Entitati externe cu parametri

Entitatile externe cu parametrii sint asemanatoare entitatilor externe generale analizate, utilizeaza aceleasi cuvinte cheie si au acelasi scop ca entitatile interne cu parametri:

<!ENTITY % student SYSTEM "https://www.xml.com//std.dtd">

La adresa specificata exista fisierul "std.dtd" in care este definita entitatea student. Aceasta entitate poate fi utilizata doar in interiorul DTD-ului documentului.

Entitati predefinite

In XML exista anumite caractere care nu trebuie sa apara in forma lor normala in anumite locuri din text. Totusi, pentru a le putea specifica se folosesc entitatile predefinite din XML care refera aceste caractere. Aceste entitati sint similare entitatilor predefinite din SGML.

Notatii
Notatiile se utilizeaza pentru a identifica formatul entitatilor neanalizate, a elementelor in care apar referinte spre notatii sau pentru a specifica anumite instructiuni de procesare. Modurile de definire a notatiilor sint urmatoarele :

<!NOTATION nume SYSTEM "adresa">
<!NOTATION nume PUBLIC "generare">
<!NOTATION nume PUBLIC "generare" "adresa">

Notatiile trebuie sa contina in definitie unul dintre cuvintele cheie SYSTEM sau PUBLIC. Sensul lor este acelasi cu cel al entitati lor si genereaza aceleasi lucruri. "adresa" reprezinta adresa la care se afla definitia notatiei sau efectiv valoarea notatiei. "generare" specifica un fisier care va fi generat si care va contine definitia notatiei.

Utilizarea elementelor XML
Un document XML poate contine o declaratie XML, o declaratie a tipului de document si o multime de marcaje care au fost definite in DTD.

Daca un document nu contine DTD, atunci el trebuie sa respecte un numar minim de constringeri. Documentul trebuie sa contina un element radacina, element care va fi primul din text. Ultimul element va fi tag-ul de sfirsit al elementului radacina. Celelalte elemente pot apara in orice ordine si ori de cite ori dorim, insa trebuie sa satisfaca constringerile prezentate mai jos. Sint interzise referintele la entitati, altele decit cele predefinite.

Continutul unui element reprezinta tot ceea ce se gaseste intre tag-ul de inceput al elementului si tag-ul lui de sfirsit. Daca un element E are un copil C, atunci continutul lui C trebuie sa se afle in continutul lui E (regula inchiderii corecte a parantezelor de la expresiile matematice). Aceasta constringere este valabila la toate tipurile de documente si trebuie sa fie satisfacuta si de DTD.

Un exemplu de document XML valid, fara DTD:

<?xml version="1.0" encoding="UTF-8" ?>
<carte>
<cuprins>Acesta este un cuprins de carte</cuprins>
<capitol>
<sectiune>O sectiune de capitol</sectiune>
</capitol>
</carte>

Iata un exemplu gresit (elementul carte trebuie sa contina si tag-ul de sfirsit al elementului capitol):

<carte>
<capitol>Un capitol de carte
</carte>
</capitol>

Daca documentul contine DTD-ul, atunci elementele se vor conforma descrierii formale din DTD. Elementele definite in DTD pot avea atribute noi, nedefinite, care pot fi de orice tip, dar cele definite trebuie sa respecte definitia. De asemeni, pot apara, fara a fi definite, elemente noi cu atributele lor aferente. Celelalte constringeri au fost evidentiate in sectiunile dedicate elementelor, atributelor, entitatilor si notatiilor.

Analizoarele XML actuale pot descoperi cele mai frecvente greseli sintactice, conform specificatiei XML 1.0. In figura urmatoare se poate observa semnalarea unei erori de definire a unui element, in urma analizei unui document folosind aplicatia vizuala XML Editor scrisa de absolventul Eduard Schmidt.


Analiza unui document utilizind XML Editor
2.4 Spatii de nume
Prin utilizarea spatiilor de nume, dezvoltatorii de aplicatii XML pot califica numele de elemente in mod unic, evitind conflictele dintre elemente cu aceleasi nume.

De exemplu, un autor de document XML referitor la cartile dintr-o biblioteca poate scrie urmatoarele:

<book ident="74">
<title>Retele de calculatoare</title>
<year>1998</year>
</book>

Intr-un alt document XML se vor memora persoanele care au imprumutat anumite carti:

<student>
<!-- Date despre student -->
<name>Stefan Tanasa</name>
<year>4</year>
<!-- Carti imprumutate -->
<books>
<ident>74</ident>
<ident>158</ident>
</books>
</student>

Pentru un cititor uman este clar faptul ca elementul <year> din primul document se refera la anul aparitiei cartii, iar <year> din cel de-al doilea document semnifica anul de studiu in care se afla studentul care a imprumutat carti de la biblioteca.

In vederea evitarii ambiguitatilor de procesare, se asociaza un vocabular, denumit spatiu de nume (namespace), pentru elementele in cauza.

Astfel anii acum pot fi scrisi in modul urmatorul:

<BookInfo:year>1998</BookInfo:year>
<!-- Apartine spatiului de nume "BookInfo" -->
<StudInfo:year>4</StudInfo:year>
<!-- Apartine spatiului de nume "StudInfo" -->

Aceasta permite ca in cadrul aceluiasi document XML sa apara ambele informatii (anul aparitiei si anul de studiu) fara a se naste ambiguitati, iar validarea se poate realiza fara probleme.

Declararea spatiilor de nume
Spatiile de nume se declara fie implicit (un spatiu de nume pentru toate elementele domeniului lui de vizibilitate) sau explicit (ca prefix ori substitut pentru numele complet al unui spatiu de nume).

Un exemplu de declarare implicita:

<library>
<!-- Lista cartilor din biblioteca -->
<book xmlns="urn:infoiasi.ro:BookInfo" ident="1">
<title>...</title>
<year>...</year>
...
</book>
...
<!-- Totalul general -->
<total>107400</total>
</library>

Elementele <book>, <title> si <year> si atributul ident fac parte din spatiul de nume "BookInfo" accesibil la adresa data de URN-ul (Uniform Resourse Name) infoiasi.ro. Atributul xmlns este cuvint-cheie XML si specifica un spatiu de nume care in cazul nostru va fi vizibil pina la tag-ul de sfirsit </book>. Toti descendentii necalificati ai lui <book> se considera apartinind spatiului de nume "BookInfo". Elementul <total> nu face parte din spatiul de nume "BookInfo".

In urmatorul exemplu se declara "b" ca abreviere pentru numele complet al spatiului de nume "BookInfo". Toate elementele si atributele prefixate cu "b" vor fi considerate ca apartinind spatiului de nume "BookInfo".

<b:book xmlns="urn:infoiasi.ro:BookInfo" b:ident="74">
<b:title>Retele de calculatoare</b:title>
<b:year>1998</b:year>
</b:book>

Aceasta declarare este una explicita.

Un exemplu complet
Presupunem ca avem urmatorul document XML continind toate persoanele (clientii) inregistrate la o biblioteca, tinind evidenta volumelor imprumutate:

<?xml version="1.0"?>
<c:clients xmlns:c="urn:bcu.ro:LibClients">
<s:student xmlns:s="urn:infoiasi.ro:StudInfo" xmlns:b="urn:infoiasi.ro:BookInfo">
<name>Stefan Tanasa</name>
<s:year>4</s:year>
<c:books total="1">
<b:book b:ident="74">
<title>Retele de calculatoare</title>
<b:year>1998</b:year>
<b:description>
<h2 xmlns="https://www.w3.org/TR/REC-html40">
Un <i>best-seller</i> clasic
</h2>
</b:description>
</b:book>
</c:books>
</s:student>
...
</c:clients>

Sint declarate mai multe spatii de nume. Elementul <name> desi nu este calificat, apartine lui "s" deoarece se afla in domeniul de vizibilitate al acestuia, iar "b" nu contine vreun element cu acest nume. Elementele <h2> si <i> apartin spatiului de nume specificat de Consortiul Web in recomandarea HTML 4.0 si pot fi utilizate la formatarea descrierii cartii respective.

2.5 Hiper-legaturi in XML (XLink)
Specificatia legaturilor in XML, denumita XLL, p


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta