ATTLIST

Per a validar els atributs de les diferents etiquetes disposem de la paraulalau ATTLIST (llista d'atributs). Per tant, en una declaració de tipus ATTLIST podrem especificar un o molts atributs.

El format general de la declaració ATTLIST és:


<!ATTLIST element-name attribute-name attribute-type attribute-value>

on:

  • element-name : etiqueta en la qual s'aplica l'atribut
  • attribute-name : nom del atribut
  • attribute-type : tipus d'atribut.
  • attribute-value : valor o característica de l'atribut.

Exemple

A mode d'exemple suposem el següent document XML sobre el qual volem especificar un fitxer DTD.


<?xml version="1.0" ?>
<!DOCTYPE import SYSTEM "import.dtd">
<import pagat="N">30.23</import>

<!ELEMENT import (#PCDATA)>
<!ATTLIST import pagat CDATA "S">

Multiples atributs

Quan en una etiqueta hi ha múltiples atributs hi ha la possibilitat de fer múltiples declaracions o bé de fer una única declaració que contingui els múltiples atributs. Així, per exemple, si afegim un segon atribut a l'etiqueta import de l'exemple anterior, les dues declaracions DTD són vàlides, tot i que la primera és la preferible sempre que la indentació sigui la correcte per a facilitar la llegibilitat.


<?xml version="1.0" ?>
<!DOCTYPE import SYSTEM "import.dtd">
<import pagat="N" moneda="E">30.23</import>

<!ELEMENT import (#PCDATA)>
<!ATTLIST import pagat CDATA "S"
                moneda CDATA "E">

Attribute-value

Attribute-value ens permet especificar si l'atribut és obligatori o no, i assignar-li un valor per defecte. Aquest és el valor que es recuperarà en el cas que l'atribut no consti en el fitxer XML. Opcions relacionades amb el valor d'atribut:

Valor atribut (#FIXED)

Quan s'especifica #FIXED com a valor d'atribut, aquest és opcional. En el cas que en el document XML hi consti l'atribut especificat com a #FIXED, aquest només pot tenir el valor "fixat". En cas contrari, s'asumeix el valor especificat per l'atribut en l'especificació DTD com a valor de l'atribut.


<?xml version="1.0" ?>
<!DOCTYPE import
[
    <!ELEMENT import (#PCDATA)>
    <!ATTLIST import pagat CDATA #FIXED "S">
]>
<import>30.23</import>

El document XML anterior és valid ja que l'atribut pagat està etiquetat com a fix. En l'exemple, no hi ha possibilitat de tenir impagats!


<?xml version="1.0" ?>
<!DOCTYPE import
[
    <!ELEMENT import (#PCDATA)>
    <!ATTLIST import pagat CDATA #FIXED "S">
]>
<import pagat="S">30.23</import>

El document XML anterior és vàlid ja que l'atribut pagat apareix en el document XML amb el valor que s'ha establer com a fix en el DTD: "S".

DOCUMENT XML NO VÀLID


<?xml version="1.0" ?>
<!DOCTYPE import
[
    <!ELEMENT import (#PCDATA)>
    <!ATTLIST import pagat CDATA #FIXED "S">
]>
<import pagat="N">30.23</import>

El document anterior no és vàlid ja que l'atribut pagat té un valor incorrecte en el document XML ("N"). L'únic valor que pot constar per aquest atribut és el valor "S" ja que s'ha especificat que l'atribut té sempre el valor fix: "S".

Valor atribut (#REQUIRED)

L'opció #REQUIRED obliga a que l'atribut sigui obligatori. Per tant, el document XML següent només serà vàlid si consta l'atribut "pagat".


<?xml version="1.0" ?>
<!DOCTYPE article
[
    <!ELEMENT article (nom,preu)?>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT preu (#PCDATA)>
    <!ATTLIST preu pagat CDATA #REQUIRED>
]>
<article>
    <nom>pc</nom>
    <preu pagat="S">600</preu>
</article>

Cal tenir en compte que l'obligatorietat de l'atribut va enllaçada a l'obligarietat de l'etiqueta. Aixi, per exemple, en el cas anterior les etiquetes nom i preu són opcionals. El següent document XML també és vàlid, tot i que no consti l'atribut pagat . Això és degut a que l'etiqueta on s'hauria d'ubicar l'atribut és opcional i, per tant, l'atribut també és opcional.


<?xml version="1.0" ?>
<!DOCTYPE article
[
    <!ELEMENT article (nom,preu)?>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT preu (#PCDATA)>
    <!ATTLIST preu pagat CDATA #REQUIRED>
]>
<article/>

Valor atribut (#IMPLIED)

Utilitzem l'especificació #IMPLIED quan:

  1. L'atribut no té un valor per defecte.
  2. L'atribut és opcional (no #REQUIRED).
  3. L'atribut no té un valor fix (no #FIXED)

<?xml version="1.0" ?>
<!DOCTYPE article
[
    <!ELEMENT article (nom,preu)?>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT preu (#PCDATA)>
    <!ATTLIST preu pagat CDATA #IMPLIED>
]>
<article>
    <nom>pc</nom>
    <preu pagat="S">600</preu>
</article>

El document XML anterior és vàlid ja que l'especificació de l'atribut pagat és opcional (IMPLIED). El següent document XML també és vàlid ja que #IMPLIED implica que l'atribut és opcional.


<?xml version="1.0" ?>
<!DOCTYPE article
[
    <!ELEMENT article (nom,preu)?>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT preu (#PCDATA)>
    <!ATTLIST preu pagat CDATA #IMPLIED>
]>
<article>
    <nom>pc</nom>
    <preu>600</preu>
</article>

Attribute-type

Attribute-type defineix el tipus d'atribut. Els diferents tipus que pot tenir un atribut són:

  • CDATA
  • Enumerated
  • NOTATION
  • ENTITY
  • ENTITIES
  • ID
  • IDREF
  • IDREFS
  • NMTOKEN
  • NMTOKENS

CDATA

El tipus CDATA (character data o cadena de caràcters) és un dels tipus més utilitzats en la declaració dels atributs. Amb el tipus CDATA estem especificant que el valor associat a l'atribut podrà ser qualsevol conjunt de caràcters.


<?xml version="1.0" ?>
<!DOCTYPE imatge
[
<!ELEMENT imatge (#PCDATA)>
       <!ATTLIST imatge width CDATA #IMPLIED
                        height CDATA #IMPLIED
                        alt CDATA #REQUIRED
>
]>
<imatge alt=""/>

Enumerated

Utilitzem el tipus enumerated o enumeration quan l'atribut només pot pendre una sèrie de valors possibles.


<?xml version="1.0" ?>
<!DOCTYPE article
[
    <!ELEMENT article (nom,preu)?>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT preu (#PCDATA)>
    <!ATTLIST preu pagat (S | Si | Y | Yes | N | No) #REQUIRED>
]>
<article>
    <nom>pc</nom>
    <preu pagat="S">600</preu>
</article>

ID

Definim un atribut de tipus ID quan aquest no pot tenir valors repetits en el document. D'aquesta forma els atributs de tipus ID identifiquen l'element.

Per tal que un atribut de tipus ID sigui vàlid:

  • El valor de l'atribut ha de començar per una lletra
  • El valor d'un atribut ID ha de ser únic

<?xml version="1.0" ?>
<!DOCTYPE llibre
[
        <!ELEMENT llibre (titol,autor,rentto)>
        <!ELEMENT titol (#PCDATA)>
        <!ATTLIST titol isbn ID #REQUIRED>
        <!ELEMENT autor (#PCDATA)>
        <!ELEMENT rentto (#PCDATA)>
        <!ATTLIST rentto num ID #REQUIRED>
]>
<llibre>
        <titol isbn="X300"></titol>
        <autor></autor>
        <rentto num="A383"></rentto>
</llibre>

En l'exemple anterior, tenim un DTD on es defineixen dos atributs de tipus ID: isbn i num.

En la definició "el valor d'un atribut ID ha de ser únic" es podria pensar que el un atribut ID no pot tenir dues vegades assignat el mateix valor. Aquesta definició cal ampliar-la a: dos atributs de tipus ID no poden tenir el mateix valor associat. Així, per exemple, si en l'exemple anterior, l'atribut isbn i num tenen el mateix valor, el document XML no serà vàlid.

IDREF

El tipus d'atribut IDREF es fa per a relacionar un atribut ID d'un altre element.

Si el valor assignat a l'atribut de tipus IDREF no existeix en el document XML, el parser ens mostrarà un error, tal i com es mostra en la següent imatge.

Els atributs de tipus IDREF només ens garanteixen que el valor de l'atribut de tipus IDREF existeix en el document XML. Tot i això, no hi ha una validació de la lògica de la relació, ja que realment no s'està establint una relació sintàtica. Així, el següent XML és vàlid respecte a la definició del seu DTD, tot i que no és lògic ja que s'ha utilitzat l'identificador isbn de llibre com a identificador de la persona que lloga el llibre!

IDREFS

S'utilitza el tipus d'atribut IDREFS quan un atribut enlloc de referenciar a un únic element ho fa a múltiples elements. En el document XML separarem cada una de les referències mitjançant un espai.

ENTITY

Les entitats tenen diverses funcionalitats:

  • Possibilitat de realitzar abreviatures que podem aplicar al nostre document XML.

Així, per exemple, com podem veure en la imatge enlloc d'escriure tot el text de l'abreviatura XML podem utilitzar una entitat i utilitzar el nom de l'entitat per a definir el contingut.

  • Reutilització de paràgrafs extensos

En aquest cas es guarda el paràgraf en un fitxer extern que podem reutilitzar en múltiples fitxers XML. Utilitzem l'entitat per associar un nom al fitxer.

  • Per a simplificar les declaracions dels propis DTD.

NMTOKEN

El tipus d'atribut MNTOKEN s'utlitza quan es vol limitar el valor d'un atribut a aquells caràcters que són vàlids per a una etiqueta XML. Així, per exemple, amb l'atribut NMTOKEN el caracter d'espai en blanc no estarà permès.

La següent imatge és un exemple de funcionament del tipus NMTOKEN . Quan es vol especificar una data podem utilitzar com a separador el símbol "-" o la "/". Donat que la "/" no és un caràcter permès en una etiqueta XML tampoc podrem tenir aquest caràcter associat a un atribut de tipus NMTOKEN.

En canvi, si s'utilitza la "/" per a separar el dia, mes i any el parser ens obsequia amb un error.

NMTOKENS

Utilitzem el tipus d'atribut NMTOKENS quan un atribut de tipus NMTOKEN pot contenir múltiples valors. Caldrà separar cada un dels valors utilitzant un espai en blanc " ".

results matching ""

    No results matching ""