05 - definició desquemes i vocabluaris en xml

48
+ Definició d’esquemes i vocabularis en XML Llenguatges de Marques i Sistemes Gestors d’Informació + Introducció ! XML permet crear els llenguatges de marques que vulguem. ! Aquest és el punt fort de l’XML sobre altres llenguatges de marques: s’adapta al que es vulgui representar sense importar la complexitat que pugui tenir. ! Aquestes dades possiblement siguin processasdes per un programa d’ordinador i aquests no donen tanta llibertat com l’XML. ! És a dir, no són gaire bons interpretant i entenent informació per a la qual no han estat programats per processar.

Upload: toni

Post on 31-Jan-2016

217 views

Category:

Documents


0 download

DESCRIPTION

XML

TRANSCRIPT

Page 1: 05 - Definició desquemes i vocabluaris en XML

+

Definició d’esquemes i vocabularis en XML Llenguatges de Marques i Sistemes Gestors d’Informació

+Introducció

!  XML permet crear els llenguatges de marques que vulguem.

!  Aquest és el punt fort de l’XML sobre altres llenguatges de marques: s’adapta al que es vulgui representar sense importar la complexitat que pugui tenir.

!  Aquestes dades possiblement siguin processasdes per un programa d’ordinador i aquests no donen tanta llibertat com l’XML.

!  És a dir, no són gaire bons interpretant i entenent informació per a la qual no han estat programats per processar.

Page 2: 05 - Definició desquemes i vocabluaris en XML

+Introducció

<dibuix> <rectangle>12,10,14,10</rectangle> <linia>13,13,25,25</linia>

</dibuix>

! És correcte aquest document des del punt de vista d’XML?

! És correcte, però el programa no sabrà que fer amb l’etiqueta <linia> perquè ningú no l’ha programat.

! És per aquest motiu que els programes normalment es dissenyen per processar només tipus concrets d’XML.

+Introducció

!  Per tant, una de les coses que haurà de fer un programa és comprovar que les dades del document XML siguin correctes.

!  Hi ha sistemes per comprovar que els documents XML contenen les etiquetes que han de contenir i que estan col·locades tal com fa falta.

!  El procés de fer aquestes comprovacions s’anomena validació.

Page 3: 05 - Definició desquemes i vocabluaris en XML

+Validació de documents XML

!  El procés de comprovar que uns fitxer XML determinats segueixin un determinat vocabulari s’anomena validació.

!  Els documents que segueixen les regles del vocabulari s'anomenen documents vàlids.

!  És el mateix un document ben format i un document vàlid? !  Un document està ben format quan segueix les regles d’XML.

!  Un document és vàlid si segueix les normes del vocabulari que té associat.

+Validació de documents XML

!  Un document pot complir perfectament amb les regles de creació de documents XML i, per tant, estar ben format, però en canvi no seguir les normes del vocabulari i, per tant, no ser vàlid.

!  Però si és vàlid segur que és ben format.

!  La validació de document és un procés corrent en llenguatges de marques, ja que no sempre la persona que defineix com ah de ser el document després és la que generi els documents (pot ser que sigui automatitzat).

Page 4: 05 - Definició desquemes i vocabluaris en XML

+Validació de documents XML

!  Per forçar una determinada estructura en un document cal que hi hagi alguna menar de definir aspectes com ara: !  En quin ordre han d’anar les etiquetes

!  Quines són correctes i quines no

!  L’ordre d’aparició

!  Quins atributs hi podem posar

!  Quin contingut hi pot haver

!  ...

!  XML fa això per mitja de:

Llenguatges de definició de vocabulari (o llenguatges d’esquemes

+Validació de documents XML

!  Els llenguatges de definició d’esquemes sorgeixen de la necessitat que els documents XML siguin processats per programes: !  Per extreure informació

!  Transformar-ho en altres coses

!  ...

!  Ja que els programes no són tan flexibles com l’XML i necessiten processar dades amb estructures de documents tancades.

Page 5: 05 - Definició desquemes i vocabluaris en XML

+Validació de documents XML

!  Hi ha molts de llenguatges de definició d’esquema, però els més utilitzats en XML són: !  Document type definitions (DTD)

!  W3C XML Schema definition language

!  Relax NG

!  Schematron

!  El procés de validació es fa per mitjà de programes especials anomenats processadors o validadors (parsers).

!  Els validadors sovint estan en forma de biblioteques per poder ser incorporats als programes.

+Validació de documents XML

!  No tots els processadors poden validar tots els llenguatges de definició de vocabularis i, per tant, s’haurà de triar en funció del llenguatge que fem servir.

Page 6: 05 - Definició desquemes i vocabluaris en XML

+Processador d’XML

!  Els processadors XML són els encarregats de validar els documents i, per tant, és molt important triar un processador que sigui capaç de validar el llenguatge de validació que feim servir: !  El fet que la DTD sigui el sistema més antic i que se’n parli en

l’especificació d’XML ha fet que la majoria dels processadors puguin validar llenguatges definits amb DTD.

!  Amb el pas del temps, XML Schema s’ha convertit en la manera estàndard de validar vocabularis XML, i altres tecnologies XML en fan servir alguns aspectes. Per tant la majoria de processadors també suporten aquest format.

!  Molts processadors a part dels dos més usats també poden fer servir altres llenguatges (en especial Relax NG).

+DTD (Document Type Definitions)

!  És un llenguatge de definició d’esquemes que ja existia abans de l’aparició d’XML. Era utilitzat al SGML.

!  Per això es pot fer servir als altres LM que s’han basat en ell (com XML o HTML).

!  Quan es va definir l’XML es va aprofitar per fer una versió simplificada de DTD, per ser el llenguatge d’especificació d’esquemes original.

!  Una gran avantatge era que mantenia la comptabilitat amb SGML (documentació)

Page 7: 05 - Definició desquemes i vocabluaris en XML

+DTD (Document Type Definitions)

!  Per poder validar un document XML cal especificar quin és el document d’esquemes que fa servir.

!  Utilitzant DTD existeixen diverses formes d’especificar-ho.

!  En general, implica afegir una declaració DOCTYPE dins el document XML per validar.

!  L’etiqueta DOCTYPE sempre ha d’anar: !  A la primera línia si no hi ha declaració XML

!  Just darrera la declaració XML

Associar una DTD a un document XML

+DTD (Document Type Definitions)

<?xml version=“1.0” ?> <!DOCTYPE ... > <document> </document>

! Hi ha dues maneres d’incoprorar DTD en un document XML: !  Declaració interna

!  Declaració externa

Associar una DTD a un document XML

Page 8: 05 - Definició desquemes i vocabluaris en XML

+DTD (Document Type Definitions)

!  En les declaracions DTD internes les regles de la DTD estan incorporades en el document XML.

Declaració interna

> <!DOCTYPE nom contingut

Element DTD Arrel del

document XML

Regles per validar la

DTD

+DTD (Document Type Definitions) Declaració interna

!  Les declaracions DTD no

es fan servir gaire ja que tenen una sèrie de problemes: !  No és fàcil compartir les

declaracions amb altres documents.

!  Per fer canvis s’han d’aplicar a tots els documents.

Page 9: 05 - Definició desquemes i vocabluaris en XML

+DTD (Document Type Definitions)

!  En comptes d’especificar la DTD en el mateix document és considera una pràctica molt millor definir-la en un fitxer a part.

!  Per fer una declaració externa també es fa servir l’etiqueta DOCTYPE però el format és lleugerament diferent i preveu dues possibilitats: !  DTD privada

!  DTD pública

Declaració externa

+DTD Privada

!  Són les més corrents, no hi ha res que impedeixi que el fitxer es comparteixi o es publiqui per mitjà d’Internet.

Page 10: 05 - Definició desquemes i vocabluaris en XML

+DTD Privada

!  En el camp d’adreça es poden definir camins dins la màquina:

<!DOCTYPE SYSTEM “alumnes.dtd”>

!  O fins i tot es pot definir una DTD per mitjà duna adreça d’Internet:

<!DOCTYPE SYSTEM “http://www.unaweb.es/alumnes.dtd”>

+DTD Privada

!  Un cop definit només cal crear l’arxiu alumnes.dtd al lloc adequat amb les regles que defineix el vocabulari.

Classe.xml Alumnes.dtd

Page 11: 05 - Definició desquemes i vocabluaris en XML

+DTD pública

!  Les definicions PUBLIC reservades per a DTD que estiguin definides pels organismes d’estandarització, ja siguin oficials o no.

!  En la definició d’una DTD pública s’afegeix un camp extra que fa d’identificador de l’organisme.

+Declaració pública

!  L’FPI es defineix per mitjà d’un grup de quatre cadenes de caràcters separades per doble barres.

Símbol//Nom del responsable//Document descrit//Idioma !  Símbol: Si l’estàndard no ha estat aprovat hi haurà un “–”, mentre

que si ha estat aprovat per un organisme no estàndard serà un “+”. Si ha estat aprovat per un organisme d’estàndards, hi haurà una referència.

!  Nom responsable: Qui és l’organització o la persona responsable de definir l’estàndard.

!  Document descrit: Conté un identificador únic del document descrit.

!  Idioma: El codi ISO de l’idioma en què està descrit el document.

Page 12: 05 - Definició desquemes i vocabluaris en XML

+Declaració pública

!  Per exemple: !  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

!  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

!  <!DOCTYPE classe PUBLIC "-//IOC//Classe 1.0//CA" "http://www.ioc.cat/classe.dtd">

+Definició d’esquemes amb DTD

!  La part més important d’un sistema de definició de vocabularis és definir com es fa per: !  Determinar l’ordre en què els elements poden apareixer

!  Quin contingut poden tenir

!  Quins atributs poden tenir les etiquetes

!  ...

!  Això, ho farem definint una serè de regles per mitjà d’un sistema d’etiquetes predefinit.

Page 13: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

!  De la mateixa manera que els elements són la base de l’XML la definició d’aquests elements és la base de la definició de fitxers DTD.

!  Sempre s’hauran de definir tots els elements que componen el vocabulari i a més especificar-ne el contingut.

Elements

+Definició d’esquemes amb DTD

<!ELEMENT nom (#PCDATA)>

! Com en XML, els continguts poden ser dades o bé altres elements.

! Podem definir tres grans grups de continguts en una DTD: !  Contingut genèrics

!  Contingut d’elements

!  Contingut barrejat

Elements

Page 14: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

Hi ha tres continguts genèrics que es poden fer servir per definir elements:

! ANY: El contingut de l’element pot ser qualsevol cosa.

! EMPTY: L’element no té contingut

! PCDATA: El contingut de l’etiqueta poden ser dades.

Continguts genèrics

+Definició d’esquemes amb DTD

Els elements que estiguin definits amb ANY poden contenir qualsevol cosa dins seu. Tant etiquetes, com dades, o fins i tot una barreja de les dues coses.

! Si es defineix persona així:

<!ELEMENT persona ANY>

! Validarà tant elements que contenguin dades:

<persona> Joan </persona>

! Com elements que contenguin altres elements:

<persona><nom>Joan</nom></persona>

Continguts genèrics " ANY

Page 15: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

Els continguts definits amb EMPTY és per les etiquetes que no tenen contingut dedins.

<!ELEMENT professor EMPTY>

! Aquesta definició serveix tant pels elements que es defineixen fent servir el sistema d’una sola etiqueta o amb apertura i tancament:

<professor/>

<professor></professor>

Continguts genèrics " EMPTY

+Definició d’esquemes amb DTD

El contingut genèric #PCDATA (parser character data) segurament és el més usat per marcar que una etiqueta només té dades en el seu contingut.

Si partim de l’exemple següent: <persona>

<nom>Joan</nom> <cognom>Marimon</cognom>

</persona>

Utilitzarem #PCDATA: !  <!ELEMENT nom(#PCDATA)>

!  <!ELEMENT cognom(#PCDATA)>

Continguts genèrics " #PCDATA

Page 16: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

Una de les situacions habituals en un document XML és que un element dins del seu contingut en tengui d’altres: <persona>

<nom>Joan</nom> <cognom>Marimon</cognom>

</persona>

! Per tant, l’element <persona> és un element que té com a contingut una seqüència d’altres elements:

<!ELEMENT persona (nom, cognom)>

! Defineix explícitament quins són els fills de l’element, separant-los per comes (AND).

! Les seqüències tenen un ordre explícit.

Contingut d’elements

+Definició d’esquemes amb DTD

!  L’operador alternativa (|) permet que el processador pugui triar entre una de les opcions que se li ofereixen (OR):

<!ELEMENT personal(treballador|president)>

!  Pot validar: <personal>

<president>Mateu</president> </personal> !  O: <personal>

<treballador>Tomeu</treballador> </personal>

Contingut d’elements

Page 17: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

!  No hi ha cap limitació definida per posar alternatives.

!  Podem posar tantes alternatives com ens facin falta.

!  També és pot mesclar amb EMPTY indicant que el valor pot no apareixer:

<ELEMENT alumne(delegat|EMPTY)>

Contingut d’elements

+Definició d’esquemes amb DTD

!  Els modificadors serveixen per especificar quantes instàncies dels elements finlls hi pot haver en un element: !  ? Indica que l’element tant pot ser-hi o no.

!  + Indica que l’element ha de sortir una vegada o més.

!  * Indica que l’element pot no ser-hi o repetir-se.

!  Per tant, si volem especificar que una persona pot ser identificada per mitjà del nom i un o més cognoms, com podríem definir l’element persona?

<!ELEMENT persona(nom|cognom+)>

<!ELEMENT persona(nom, cognom, cognom?)

Contingut d’elements

Page 18: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

!  En les DTD s

S’han d’especificar quins són els atributs que es faran servir en cada una de les etiquetes explícitament.

!  La declaració d’atribut es fa amb una etiqueta especial.

Atributs als DTD

+Definició d’esquemes amb DTD

!  Per definir un atribut anomenat nom de l’element <persona> <!ATTLIST persona nom CDATA #IMPLIED>

!  Especificar múltiples atributs: <! ATTLIST persona nom CDATA #REQUIRED>

<! ATTLIST persona cognom CDATA #REQUIRED>

!  O bé es pot fer amb una sola referència ATTLIST: <!ATTLIST persona nom CDATA #REQUIRED cognom CDATA #REQUIRED>

!  Les dues declaracions anteriors en permetrien validar: <persona nom=“Joan” cognom=“Marimon” />

Atributs als DTD

Page 19: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

Els elements ATTLIST poden tenir atributs que permeten definir característiques sobre els atributs:

! #IMPLIED: L’atribut és opcional.

! #REQUIRED: L’atribut és obligatori.

! #FIXED: Té un valor constant.

! #DEFAULT: Permet especificar un valor per defecte.

Atributs en DTD " Atributs d’ATTLIST

+Definició d’esquemes amb DTD

<ATTLIST equip posicio ID #REQUIRED>

! S'està obligant que quan es defineixi l’element <equip> especifiqui obligatòriament l’atribut posició.

<ATTLIST persona dni NMTOKEN #IMPLIED

! Permet que l’atribut DNI pugui ser-hi o no. <!ATTLIST document versió CDATA #FIXED “1.0”>

<!ATTLIST document codificació NMTOKEN #DEFAULT “UTF-8”>

! El valor s’especifica a continuació de l’atribut i ha d’anar entre cometes.

Atributs en DTD " Atributs d’ATTLIST

Page 20: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

El tercer paràmetre d’una declaració ATTLIST serveix per definir quins tipus de dades pot tenir l’atribut.

!  CDATA: Pot tenir qualsevol cadena de caràcters vàlids.

!  Enum: Pot tenir qualsevol dels valors especificats.

!  ID: És pot fer servir com identificar. Valor únic.

!  IDREF/S: El valor són referències a un ID existent.

El plural és per definir una llista.

!  ENTITY/IES: Permet definir constants pel document.

!  NMTOKEN/S: Expecifiquen cadenes de caràcters XML. (no espai)

!  NOTATION: Permet un atribut d’una notació declarada abans.

Atributs en DTD

+Definició d’esquemes amb DTD

!  CDATA: És un tipus de dades pràcticament idèntic al tipus #PCDATA de les etiquetes. És pot posar qualsevol dada en format de text tant si té espais com si no en té.

<ATTLIST empresa nom CDATA #REQUIRED>

<empresa nom=“Microsoft Corporation” />

<empresa nom=“6Tem” />

!  Enumeracions: Els atributs també poden ser especificats definint-hi quins poden ser els valors correctes per un atribut.

<!ATTLIST dia (dll|dm|dx|dj|dv|ds|dg) #IMPLIED>

Atributs en DTD

Page 21: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

!  ID: Serveix per definir atributs que es puguin usar com a identificadors d’un element dins del document.

! Els valors assignats no es poden repetir dins el document.

! Els valors han de començar per una lletra o un subratllat.

<classificacio>

<equip posicio=“primer”>F.C. Barcelona </equip>

<equip posicio=“segon”>Real Madrid </equip>

<equip posicio=“tercer”>Atlètic de Madrid </equip>

</classificacio>

Atributs en DTD

+Definició d’esquemes amb DTD

!  IDREF / IDREFS: !  Es fan servir per definir valors d’atributs que fan referència a

elements que tinguin un valor de tipus ID.

<!ATTLIST recepta id ID #REQUIRED>

<!ATTLIST ingredient ref IDREF #REQUIRED> <llibre-cuina>

<receptes> <recepta id=“rec1”>Patates fregides</recepta> <recepta id=“rec2”>Patates bullides</recepta> </receptes> <ingredients> <ingredient ref=“rec1”>Oli</ingredient> <ingredient ref=“rec2”>Aigua</ingredient> </ingredients>

</llibre-cuina>

Atributs en DTD

Page 22: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

!  NMTOKEN / NMTOKENS: !  Especifiquen que els atributs poden tenir qualsevol caràcter

acceptat per XML (no poden tenir blancs):

<!ATTLIST home naixement NMTOKEN #REQUIRED>

<home naixement=“1970” />

!  El valor en plural especifica una llista de valors en comptes d’un sol:

<coordenades posicio=“x y” />

Atributs en DTD

+Definició d’esquemes amb DTD

!  NOTATION: !  Es fa servir per permetre valors que han estat declarats com a

notation amb l’etiqueta <!NOTATION>

!  Es fa servir per especificar dades no-XML.

<!NOTATION GIF SYSTEM “image/gif”>

<!NOTATION JPG SYSTEM “image/jpg”>

<!ATTLIST persona photo NOTATION (GIF|JPG) #IMPLIED>

Atributs en DTD

Page 23: 05 - Definició desquemes i vocabluaris en XML

+Definició d’esquemes amb DTD

!  ENTITY / ENTITIES !  Indica que el valor és una referència a un valor extern que no s’ha

de processar.

!  En general solen contenir valors binaris externs.

!  Fer servir ENTITY implicarà haver declarat l'entitat amb <!ENTITY:

<!ATTLIST persona foto ENTITY #IMPLIED>

<!ENTITY pere SYSTEM “pere.jpg”

!  Permetrà que es defineixi l’atribut persona el valor de l’entitat i que automàticament sigui associat a la imatge:

<persona nom=“pere” />

Atributs en DTD

+Definició d’esquemes amb DTD

!  El DTD no està basat en XML.

!  La DTD no segueix la manera de definir els documents d’XML, això implica aprendre un nou llenguatge.

!  Les altres limitacions importants són: !  No comprova el tipus.

!  Presenta problemes en barrejar etiquetes i #PCDATA.

!  Només accepta expressions deterministes.

!  Les DTD es continuen fent servir perquè són senzilles de crear però cal recordar les seves limitacions, també tenir present que no sempre s’adaptaran a les nostres necessitats.

Limitacions

Page 24: 05 - Definició desquemes i vocabluaris en XML

+Exemple de creació d’una DTD

!  Una empresa ha preparat una botiga d’Internet que genera les comandes dels clients en un format XML que s’envia al programa de gestió de manera automàtica.

!  Els XML que es generen contenen dades del client i de la comanda que s’ha fet.

!  Abans de passar-ho al programa han decidit que per tenir més seguretat es farà un pas previ que consistirà a validar el document.

!  Per això hem de generar el DTD.

+Exemple de creació d’una DTD

!  Hem de fer dues coses:

!  Associar les regles al fitxer XML

!  Crear un fitxer amb les regles, que s’anomenarà comanda.dtd

Page 25: 05 - Definició desquemes i vocabluaris en XML

+Exemple de creació d’una DTD Associar les regles al fitxer XML

!  Especificar la regla DOCTYPE just desprès de la declaració de l’XML:

<!DOCTYPE comanda SYSTEM “comanda.dtd”>

+Exemple de creació d’una DTD Crear les regles

!  No existeix una única forma de crear una DTD.

!  El següent sistema ens pot ajudar a corregir i evitar errors.

!  El sistema consisteix: !  Començar per l’arrel

!  Continuar definint els fulls per nivells.

!  Definir els elements que contenen dades (#PCDATA)

Page 26: 05 - Definició desquemes i vocabluaris en XML

+W3C XML Schema Definition Language

!  A l’especificació de XML es fa referència a les DTD com a mètode per definir vocabularis XML.

!  Però aquestes tenen una sèrie de limitacions (diapositives anteriors).

!  Això va fer que el W3C definís una nova especificació, popularment anomenada XML SCHEMA o XSD.

http://www.w3.org/XML/Schema

+ W3C XML Schema Definition Language

!  Hi va haver membres del grup de treball que consideraven que l’especificació era massa complexa.

!  És varen desenvolupar alternatives més simples, entre les quals destaca Relax NG.

!  Va sortir més tard que DTD i XSD per això va poder solucionar algunes de les seves limitacions.

!  Existeixen dues versions de Relax NG: !  Una basada en XML

!  Relax NG Compact, pensada per generar documents d’esquemes més compactes i petits.

Relax NG

Page 27: 05 - Definició desquemes i vocabluaris en XML

+W3C XML Schema Definition Language

!  L’èxit d’XSD ha estat molt gran, actualment es fa servir per altres tasques a part de simplement validar XML. També es fa servir en altres tecnologies XML, com: !  Xquerry

!  Serveis web

!  ...

!  Les característiques més importants que aporta XSD són: !  Està escrit en XML

!  Té el seu propi sistemes de dades

!  Suporta espais de noms per permetre barrejar diferents vocabularis

!  Permet ser reutilitzat (herència d’objectes i substitucions de tipus)

+XML Schema

!  És el sistema per poder definir a quin vocabulari pertanyen les etiquetes.

!  Els espais de noms permeten mesclar llenguatges XML en el mateix document i a més definir clarament a quin vocabulari pertany cada etiqueta.

!  El que fan els espais de noms és canviar els noms de les etiquetes perquè siguin únics.

!  Es sol utilitzar les URL que en principi són úniques.

Espai de noms

Page 28: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  L’XML permet definir àlies per les URL.

!  Els àlies es defineixen per mitjà de l’atribut xmlns dels elements i s’hereten a tots el conjunt de l’element:

<element xmlns:alies=“http://... /”>

!  Per tant, si es defineix l’atribut a l’arrel del document s'heretaran els àlies a tots els elements del document.

Espai de noms

+XML Schema

!  Si algun atribut xmlns no defineix àlies es converteix en l’espai de noms per defecte.

Espai de noms

Page 29: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Per un DTD feim:

!  Amb XMLSchema:

Associar un esquema a un fitxer XML

+XML Schema

!  L’XSD està basat en XML i, per tant, ha de complir amb les regles d’XML.

!  Tot i que no és obligatori normalment sempre es comença el fitxer amb la declaració XML.

!  Només hi ha un element arrel, que en aquest cas és <schema>.

!  No generam un document XML lliure sinó que estam fent servir un vocabulari concret i conegut hem d’especificar l’espai de noms d’XSD:

Definir un fitxer d’esquema

Page 30: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Els elements es defineixen fent servir l’etiqueta <element>, i amb atributs s’hi especifica com a mínim el nom i opcionalment el tipus de dades que contendrà l’element.

Definició d’elements

+XML Schema

!  L’XSD divideix els elements en dos grans grups basant-se en les dades que contenen: !  Elements amb contingut de tipus simple.

!  Són els elements sense atributs que només contenen dades.

!  Elements amb contingut de tipus complex.

!  Són elements que poden tenir atributs, no tenir contingut o contenir elements.

!  Es pot veure que gairebé sempre hi haurà algun tipus complex, ja que l’arrel normalment contindrà altres elements.

Definició d’elements

Page 31: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Es consideren elements amb contingut de tipus simple aquells que no contenen altres elements ni tenen atributs.

!  La versió 1.1 d’XSD defineix una cinquantena de tipus de dades.

!  Entre els més usats destaquen: !  String: cadena de caràcters.

!  Decimal: valor numèrics.

!  Boolean: només pot contenir: true (1) o false (0)

!  Date: dates en format (AAAA-MM-DD)

!  anyURL: referències a llocs (URL, camins de disc, ...)

!  Integer: nombres enters

Definició d’elements: Elements de tipus simple

+XML Schema

!  Els tipus de dades permeten restringir els valors que contindran les etiquetes XML.

!  Per exemple, si es parteix de la definició següent: <xs:element name=“posicio” type=“xs:integer”/>

<posicio>Primer</posicio> " no és vàlid.

!  Altres exemples:

Definició d’elements

Page 32: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Quan es defineix una etiqueta en XSD s’està definit que l'etiqueta haurà de sortir en el document XML una vegada.

!  És bastant habitual que hi hagi etiquetes que es repeteixin un nombre determinat de vegades.

!  En XSD això s’indica per mitjà d’uns atributs de l'etiqueta <element> que determinen la cardinalitat dels elements: !  minOccurs: permet definir quantes vegades ha de sortir un

element com a mínim.

!  maxOcurrs: serveix per definir quantes vegades com a màxim pot sortir un element.

Definició d’elements

+XML Schema

!  Es poden donar valors als elements amb l’atribut fixed. Aquest atribut definexi un valor obligatori per l’element.

!  De manera que només pot tenir el contingut especificat o buit:

!  Amb default, el valor de l’etiqueta pot ser canviat.

!  L’atribut nillable l’utilitzarem per dir si es permeten continguts nuls (true | false)

Definició d’elements

Page 33: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  A vegades pot interessar definir valors per als elements que no han de coincidir necessàriament amb els estàndards.

!  Per definir tipus simples personals no es posta el tipus a l’element i s’hi defineix un fills <simpleType>

!  Dins de simpleType s’especifica quina és la modificació que es vol realitzar. El més habitual és que aquestes modificaciosn siguien fetes amb:

List, union, extension, restriction

Definició d’elements: Tipus simples personals

+XML Schema

!  List: definim que un element pot contenir llistes de valors.

!  L’etiqueta validaria amb una cosa com:

!  Els elements simpleType es poden definir amb un nom fora dels elements i posteriorment usar-los com a tipus de dades personals.

Definició d’elements: Tipus simples personals

Page 34: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Union: Serveix per fer que es puguin mesclar tipus diferents en els contingut d’un element.

!  La definició de l’element <preu> farà que l’element pugui ser de tipus valor o de tipus símbol.

!  Així li podríem assignar valors com aquest:

Definició d’elements: Tipus simples personals

+XML Schema

!  Restriction: es poden crear tipus de dades on només s’accepten alguns valors, és a dir que les dades compleixin condicions determinades.

!  L’element <naixement> pot tenir valors entre 1850 i 2011.

Definició d’elements: Tipus simples personals

Page 35: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Normalment els valors de les restriccions s’especifiquen a l’atribut value:

Definició d’elements: Tipus simples personals

+XML Schema

!  Volem que el valor de l’element <resposta> sigui A, B o C, com ho hauríem de definir?

Definició d’elements: Tipus simples personals

Page 36: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Pattern: permet fer restriccions amb expressions regulars.

Definició d’elements: Tipus simples personals

+XML Schema

!  Com definiries un tipus de dades DNI?

Definició d’elements: Tipus simples personals

Page 37: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Són aquells que tenen atributs, contenen altres elements o no tenen contingut.

!  Els elements amb contingut complex han rebut moltes crítiques perquè es consideren massa complicats, peròs ‘han de fer servir perquè en tots els fitxers d'esquema normalment hi haurà un tipus complex:

L’arrel del document

Definició d’elements: Tipus complex

+XML Schema

!  Es considera que hi ha quatre grans grups de contingut de tipus complex: 1.  Els que en el seu contingut només tenen dades. Per tant, són

com els de tipus simples però amb atributs.

2.  Els elements que en el contingut només tenen elements.

3.  Els elements buits.

4.  Els elements amb contingut mesclat.

Definició d’elements: Tipus complex

Page 38: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Els elements amb tipus complex es defineixen especificant que el tipus de dades de l’element és <xs:complexType>.

!  Es poden definir tipus complexos amb nom per reutilitzar-los com a tipus personalitzats.

Definició d’elements: Tipus complex

+XML Schema

!  En XSD només els elements de tipus complex poden tenir atributs.

!  Es defineixen com un element però canviant l’etiqueta:

!  Podem posar restriccions iguals que als elements:

!  Si no s’indica el contrari, els atributs sempre són opcionals.

Definició d’elements: Tipus complex: Atributs

Page 39: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  L’etiqueta <attribute> té una sèrie d’atributs que permeten definir característiques extra:

!  Per exemple, l'atribut any s'haurà d’especificar obligatòriament si es defineix així:

Definició d’elements: Tipus complex: Atributs

+XML Schema

!  Si l’element només conté text, el contingut de complexType serà un simpleContext. Permet definir restriccions o extensions a elements que només tenen dades com a contingut.

!  La diferència més important és que en aquest cas es poden definir atributs a l’element.

!  En aquest exemple l’element <mida> té contingut de tipus enter i defineix dos atributs, llargada, amplada, que també són enters.

Definició d’elements: Tipus complex: simpleContent

Page 40: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Els elements que contenen altres elements també poden ser definits en XSD dins d’un <complexType> i poden ser alguns dels elements de la taula:

Definició d’elements: Tipus complex: Contingut format per elements

+XML Schema

!  L’element <sequence> és una de les maneres amb què el llenguatge XSD permet que s’especifiquin els elements que han de formar part del contingut d’un element.

!  Fins i tot quan només hi hagi una sola etiqueta es pot definir com a seqüència.

!  La condició més important que tenen és que els elements del document XML han d’aparèixer en el mateix ordre en el quals es defineixen a la seqüència.

!  Les seqüències poden contenir altres seqüències d’elements.

Definició d’elements: Tipus complex: sequence

Page 41: 05 - Definició desquemes i vocabluaris en XML

+XML Schema Definició d’elements: Tipus complex: sequence

+XML Schema

!  <choice> és per fer que s’hagi de triar una de les alternaties de les que es presenten dins seu.

!  En el següent exemple l’element persona a de contenir l’etiqueta <nomCognoms> o <dni>, però no totes dues:

!  Entre les alternatives hi pot haver seqüències o altres elements <choice>:

Definició d’elements: Tipus complex: choice

Page 42: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  La diferència més important entre l’element <all> i <sequence> és l’ordre.

!  L’element <all> especifica una seqüència d’elements però permet que s’especifiquin en qualsevol ordre.

!  Però dins seu només hi pot haver elements i no es pot fer servir la cardinalitat.

Definició d’elements: Tipus complex: all

+XML Schema

!  Per a XSD els elements sense contingut són sempre de tipus complex.

!  En la definició simplement no s’especifica cap contingut i així l’element buit.

!  Si l’atribut necessita atributs simplement s’especifiquen dins del complexType:

Definició d’elements: Tipus complex: Elements sense contingut

Page 43: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Els elements amb contingut mesclat són els elements que el seu contingut pot ser elements o text.

!  En XSD el contingut mesclat es defineix posant l’atribut mixed=true en la definició de l’element <complexType>:

Definició d’elements: Tipus complex: Contingut mesclat/barrejat

+XML Schema

!  <complexContent> permet definir extensions o restriccions a un tipus complex que contengui contingut mesclat o només elements.

!  Així es pot definir:

Definició d’elements: Tipus complex: complexContent

Page 44: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

Tenim aquest XML, hem de crear el seu XSD.

Quines són les primeres passes?

1.  Afegir en la definició de l'etiqueta arrel “classe” quin serà el document de validació.

Exemple resolt

+XML Schema

1.  Afegir en la definició de l'etiqueta arrel “classe” quin serà el document de validació.

Exemple resolt

Page 45: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

!  Afegir a l’etiqueta arrel “classe” quin és el document de validació:

!  Una alternativa utilitzant espai de noms:

!  Al document XML no hem de fer res més.

Exemple resolt

+XML Schema

!  Hem de crear el document xsd:

!  Quina és la següent passa? !  L’arrel sempre serà de tipus complex ja què conté atributs i tres

elements, de manera que es pot començar la declaració com una seqüència d’elements.

Exemple resolt

Page 46: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

1.  L’etiqueta curs és simple.

Exemple resolt

+XML Schema Exemple resolt

Page 47: 05 - Definició desquemes i vocabluaris en XML

+XML Schema Exemple resolt (v2)

+XML Schema

Dins el XML podem tenir:

Mentre que al XSD haurien de declarar primer el tipus_estudi i les seves opcions i després crear l’element de tipus complex curs:

Exemple llista d’opcions dins un atribut

Page 48: 05 - Definició desquemes i vocabluaris en XML

+XML Schema

Per validar podem fer servir:

!  http://www.freeformatter.com/xml-validator-xsd.html

!  http://www.utilities-online.info/xsdvalidation

Validació