En este capítulo hablaremos sobre los atributos de la definición del tipo de documento o DTD (siglas en inglés de 'document type definition'). Los atributos dan más información sobre un elemento o para ser más precisos, define una propiedad de un elemento. Un atributo del lenguaje de marcas extensible o XML (de sus siglas en inglés para 'eXtensible Markup Language') siempre lo encontramos en forma de 'name-value pair'. Un elemento puede tener muchos o pocos atributos únicos.
La declaración de atributos es muy similar a la declaración de elementos en muchos sentidos, excepto en uno; en vez de declarar contenido permitido para elementos, se declara una lista de atributos permitidos para cada elemento. Estas listas se denominan declaración 'ATTLIST' (de lista de atributos).
La sintaxis básica de la declaración de atributos DTD debe ser como se explicita a continuación:
<!ATTLIST element-name attribute-name attribute-type attribute-value>
En la sintaxis de la parte superior
Los atributos DTD empiezan con <!ATTLIST palabra claves si el elemento contiene el atributo.
nombre del elemento especifica el nombre del elemento al que se aplica el atributo.
nombre del atributo especifica el nombre del atributo que se incluye con el nombre del elemento.
tipo de atributo define el tipo de atributo. Hablaremos de este apartado en las siguientes secciones.
valor del atributo toma un valor fijo que el atributo debe definir. Hablaremos más sobre este asunto en las siguientes secciónes.
Debajo podran encontrar un ejemplo sencillo para la declaración de atributo en DTD:
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id="123">Tanmay Patil</name> </address>
Vayamos por medio del código que veremos a continuación:
Empiece con la declaración XML con lo siguiente:
<?xml version = "1.0"?>
Immediatamente siguiendo el encabezado de XML encontrará la declaración del tipo de documento, generalmente referido as el tipo de documento:
<!DOCTYPE address [
El tipo de documento (DOCTYPE) informa al analizador (parser) ique el DTD está asociado a este documento XML. La declaración DOCTYPE tiene un signo de exclamación (!) al inicio del nombre del elemento.
A continuación está el cuerpo del DTD. Se han declarado elementos y atributos:
<!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )>
Atributo identificación para el elemento nombre se define como:
<!ATTLIST name id CDATA #REQUIRED>
Aquí el tipo de atributo es CDATA (datos formados por caracteres) y su valor es #REQUERIDO.
Todos los atributos que se usan en un documento XML deben declararse en el documento DTD usando una declaración de lista de tributos (Attribute-List Declaration).
Los atributos puede que solo aparezcan al inicio o en una etiqueta vacía.
La lista de atributos claves debe especificarse en mayúsculas
No se permitirán nombres de atributos repetidos en la lista de atributos para un elemento determinado.
Cuando se declaran los atributos, se puede especificar cómo el procesador usará los datos que aparezcan en el valor. Se puede dividir la tipología de atributos en tres categorías:
Tipo de cadena
Tipología de caso (en inglés token)
Tipos enumerados
La tabla siguiente aporta una síntesis de los diferentes tipos de atributos:
Tipo | Descripción |
---|---|
CDATA | CDATA es un caracter de datos (texto y no revisión). Es un tipo de atributo de cadena. |
Identificación (ID) | Es el único identificador del atributo. No debe aparecer más de una vez. Es un Tipo de atributo de caso . |
IDREF | Se usa para hacer referencia a la identidad de otro elemento. Se utiliza para establecer conexiones entre los elementos. Es un Tipo de atributo de caso. |
IDREFS | Se usa para referenciar múltiples identidades. Es un Tipo de aributo de caso. |
ENTIDAD | Representa un entidad externa en el documento. Es un Tipo de atributo de caso. |
ENTIDADES | Representa una lista de entidades externas en el documento. Es un Tipo de atributo de caso. |
NMTOKEN | Es similar al CDATA y el valor del atributo consiste de un nombre XML válido. Es un Tipo de atributo de caso. |
NMTOKENS | Es similar al CDATA y el valor del atributo consiste en una lista nombres XML válidos. Es unTipo de atributo de caso. |
ANOTACIÓN | Un elemento será referenciado a una anotación declarada en el documento DTD. Es un Tipo de atributo enumerado. |
Enumeración | Permite definir un aspecto de la lista de valores donde uno de los valores debe coincidir. Es un Tipo de atributo enumerado. |
En cada declaración de atributo, se debe especificar cómo aparecerá el valor en el documento. Se puede especificar si un atributo:
pueden tener un valor predeterminado
un valor fijo
se requiere
se asume
Contiene un valor predeterminado. Los valores se pueden rodear con comillas independientes (') o dobles(")
SintaxisA continación se muestra el valor sintáctico:
<!ATTLIST element-name attribute-name attribute-type "default-value">
donde el valor predeterminado el valor del atributo es definido.
EjemploA continuación se expone un sencillo ejemplo de una declaración de atributo con valor predeterminado:
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA "0"> ]> <address> <name id="123"> Tanmay Patil </name> </address>
En este ejemplo tenemos nombre elemento con atributo id el valor predeterminado del cual es 0. El valor predeterminado se envuele con doble comilla.
#palabras clave fijas seguidas del valor fijo se usan cuando se quiere especificar que el valor del atributo es constante y no se puede cambiar. Un uso común de atributos fijos se da especificando números de versión.
SintaxisA continuación se muestra la sintaxis de los valores fijos:
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
dnde #FIXED (fijo) es un valor definido del atributo.
EjemploA continuación tenemos un sencillo ejemplo de declaración de atributo con valor fijo:
<?xml version="1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "howcodex"> ]> <address> <company name="howcodex">we are a free online teaching faculty</company> </address>
En este ejemplo hemos utilizado la palabra clave #FIXED donde se indica que el valor "howcodex" es el único valor para el atributo nombre de elemento <company>. Si intentamos cambiar el valor del atributo nos da error.
A continuación tenemos un DTD inválido:
<?xml version="1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "howcodex"> ]> <address> <company name="abc">we are a free online teaching faculty</company> </address>
Cuando se quiera especificar la necesidad de un atributo, se debe usar la palabra clave #REQUIRED.
SintaxisA continuación se encuentra la sintaxis de #REQUIRED:
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
donde #REQUIRED es un tipo de atributo definido.
EjemploA continuación vemos un simple ejemplo de declaración de atributo de DTD con palabra clave #REQUIRED:
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id="123"> Tanmay Patil </name> </address>
En este ejemplo hemos usado la palabra clave #REQUIRED para especificar que el atributo identidad se debe aportard para el nombre del elemento nombre
Cuando se declaran los atributos siempre se debe especificar una declaración de valor. Si el atributo que se declara no tiene un valor predeterminado, no tiene valor fijo, ni es requerido, entonces hay que declarar el atributo como sobreentendido. La palabra clave #IMPLIED se usa para especificar un atributo como sobreentendido.
SintaxisA continuación se muestra la sintaxis de #IMPLIED:
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
donde #IMPLIED es un tipo de atributo definido.
EjemploA continuación encontramos un simple ejemplo de #IMPLIED
<?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address ( name )> <!ELEMENT name ( #PCDATA )> <!ATTLIST name id CDATA #IMPLIED> ]> <address> <name /> </address>
En este ejemplo hemos usado la palabra clave #IMPLIED ya que no nos interesa especificar ningún atributos para ser incluido en elemento nombre. Es opcional.