|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Marcarea informatiilor pentru Web - SGML, XML | ||||||
|
||||||
"Comunicarea este esenta stiintei." t8s18sy -------------------------------------------------------------------------------- 1. SGML - Standard Generalized Markup Language 1.1 Scurt istoric 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 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 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 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 Elemente 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 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> </antologie> La fel, am putea defini acelasi lucru pentru un limbaj de programare: <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) <!ELEMENT antologie - - (poem+)> 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 Continutul Indicatori de aparitie 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 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 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)> (un catren e compus din patru versuri, fiecare vers continind orice caracter)
<!ELEMENT refren - - (#PCDATA|vers+)> Exceptii 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)> In acest caz, corp ar trebui declarat astfel: <!ELEMENT instructiune - - (#PCDATA)> Corpul poate contine mai multe instructiuni (posibil nici una), dar nu poate include declaratii de variabile sau de constante. Structuri concurente 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 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 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 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"> 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 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 â pentru a obtine a sau © 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 k). 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: Anumite entitati pot fi publice, in general inregistrate de ISO sau alte organizatii: <!ENTITY %ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN"> Marca +// semnifica faptul ca entitatea sau resursa folosita este inregistrata. Entitatile neinregistrate au -// in componenta. Sectiuni de marcare 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%. 1.4 Declaratia SGML 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 specifica informatii despre sistemul de procesare 1.5 Proiecte si aplicatii SGML 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 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 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) 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 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 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 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> Sectiunile CDATA 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 Exemple gresite: <!aCDATAaa text text 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" ?> 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 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 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 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 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 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> 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" ?> 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)> 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))> 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 Regula spatiilor albe 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 <p xml:lang="en-GB">What colour is it?</p> Entitati 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)> 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> 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> 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 <!NOTATION nume SYSTEM "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 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" ?> Iata un exemplu gresit (elementul carte trebuie sa contina si tag-ul de sfirsit al elementului capitol): <carte> 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. De exemplu, un autor de document XML referitor la cartile dintr-o biblioteca poate scrie urmatoarele: <book ident="74"> Intr-un alt document XML se vor memora persoanele care au imprumutat anumite carti: <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> 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 Un exemplu de declarare implicita: <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"> Aceasta declarare este una explicita. Un exemplu complet <?xml version="1.0"?> 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) |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|