DTD - Atributos
En este capítulo analizaremos los atributos DTD. El atributo proporciona más información sobre un elemento o, más precisamente, define una propiedad de un elemento. Un atributo XML siempre tiene la forma de un par nombre-valor. Un elemento puede tener cualquier número de atributos únicos.
La declaración de atributos es muy similar a las declaraciones de elementos de muchas formas excepto una; en lugar de declarar contenido permitido para elementos, declaras una lista de atributos permitidos para cada elemento. Estas listas se denominan declaración ATTLIST.
Sintaxis
La sintaxis básica de la declaración de atributos DTD es la siguiente:
<!ATTLIST element-name attribute-name attribute-type attribute-value>
En la sintaxis anterior:
Los atributos DTD comienzan con la palabra clave <! ATTLIST si el elemento contiene el atributo.
element-name especifica el nombre del elemento al que se aplica el atributo.
attribute-name especifica el nombre del atributo que se incluye con el nombre del elemento.
attribute-typedefine el tipo de atributos. Discutiremos más sobre esto en las siguientes secciones.
attribute-valuetoma un valor fijo que los atributos deben definir. Discutiremos más sobre esto en las siguientes secciones.
Ejemplo
A continuación se muestra un ejemplo sencillo de declaración de atributos 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>
Repasemos el código anterior:
Comience con la declaración XML con la siguiente declaración:
<?xml version = "1.0"?>
Inmediatamente después del encabezado XML está la declaración del tipo de documento, comúnmente conocida como DOCTYPE como se muestra a continuación:
El DOCTYPE informa al analizador que un DTD está asociado con este documento XML. La declaración DOCTYPE tiene un signo de exclamación (!) Al comienzo del nombre del elemento.
<!DOCTYPE address [
A continuación se muestra el cuerpo de DTD. Aquí hemos declarado elemento y atributo:
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
La identificación del atributo para el nombre del elemento se define como se indica a continuación:
Aquí el tipo de atributo es CDATA y su valor es #REQUIRED .
<!ATTLIST name id CDATA #REQUIRED>
Declaración de reglas de atributos
Todos los atributos utilizados en un documento XML deben declararse en la Definición de tipo de documento (DTD) mediante una Declaración de lista de atributos
Los atributos solo pueden aparecer en etiquetas de inicio o vacías.
La palabra clave ATTLIST debe estar en mayúsculas
No se permitirán nombres de atributos duplicados dentro de la lista de atributos para un elemento dado.
Tipos de atributos
Al declarar atributos, puede especificar cómo el procesador debe manejar los datos que aparecen en el valor. Podemos clasificar los tipos de atributos en tres categorías principales:
Tipo de cadena
Tipos tokenizados
Tipos enumerados
La siguiente tabla proporciona un resumen de los diferentes tipos de atributos:
No Señor. | Tipo y descripción |
---|---|
1 | CDATA CDATA son datos de caracteres (texto y no marcado). Es un tipo de atributo de cadena . |
2 | ID Es un identificador único del atributo. No debería aparecer más de una vez. Es un tipo de atributo tokenizado . |
3 | IDREF Se utiliza para hacer referencia a un ID de otro elemento. Se utiliza para establecer conexiones entre elementos. Es un tipo de atributo tokenizado . |
4 | IDREFS Se utiliza para hacer referencia a múltiples ID. Es un tipo de atributo tokenizado . |
5 | ENTITY Representa una entidad externa en el documento. Es un tipo de atributo tokenizado . |
6 | ENTITIES Representa una lista de entidades externas en el documento. Es un tipo de atributo tokenizado . |
7 | NMTOKEN Es similar a CDATA y el valor del atributo consiste en un nombre XML válido. Es un tipo de atributo tokenizado . |
8 | NMTOKENS Es similar a CDATA y el valor del atributo consiste en una lista de nombres XML válidos. Es un tipo de atributo tokenizado . |
9 | NOTATION Se hará referencia a un elemento a una notación declarada en el documento DTD. Es un tipo de atributo enumerado . |
10 | Enumeration Permite definir una lista específica de valores donde uno de los valores debe coincidir. Es un tipo de atributo enumerado . |
Declaración de valor de atributo
Dentro de cada declaración de atributo, debe especificar cómo aparecerá el valor en el documento. Puede especificar si un atributo:
puede tener un valor predeterminado
puede tener un valor fijo
es requerido
está implícito
Valores predeterminados
Contiene el valor predeterminado. Los valores se pueden escribir entre comillas simples (') o comillas dobles (").
Syntax
A continuación se muestra la sintaxis de value:
<!ATTLIST element-name attribute-name attribute-type "default-value">
donde valor-predeterminado es el valor del atributo definido.
Example
A continuación se muestra un ejemplo simple de 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 un elemento de nombre con id de atributo cuyo valor predeterminado es 0 . El valor predeterminado se incluye entre comillas dobles.
Valores FIJOS
La palabra clave #FIXED seguida por el valor fijo se usa cuando desea especificar que el valor del atributo es constante y no se puede cambiar. Un uso común de los atributos fijos es especificar números de versión.
Syntax
A continuación se muestra la sintaxis de valores fijos:
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
donde #FIXED es un valor de atributo definido.
Example
A continuación se muestra un ejemplo simple 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 "tutorialspoint">
]>
<address>
<company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>
En este ejemplo hemos utilizado la palabra clave #FIXED donde indica que el valor "tutorialspoint" es el único valor para el nombre de atributo del elemento <company>. Si intentamos cambiar el valor del atributo, da un error.
A continuación se muestra un DTD no válido:
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "abc">we are a free online teaching faculty</company>
</address>
Valores REQUERIDOS
Siempre que desee especificar que se requiere un atributo, utilice la palabra clave #REQUIRED.
Syntax
A continuación se muestra la sintaxis de #REQUIRED -
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
donde #REQUIRED es un tipo de atributo definido.
Example
A continuación se muestra un ejemplo simple de declaración de atributo DTD con la 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 utilizado la palabra clave #REQUIRED para especificar que el ID de atributo debe proporcionarse para el nombre del nombre del elemento.
Valores IMPLÍCITOS
Al declarar atributos, siempre debe especificar una declaración de valor. Si el atributo que está declarando no tiene un valor predeterminado, no tiene un valor fijo y no es obligatorio, debe declarar que el atributo está implícito . La palabra clave #IMPLIED se utiliza para especificar un atributo implícito .
Syntax
A continuación se muestra la sintaxis de #IMPLIED -
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
donde #IMPLIED es un tipo de atributo definido.
Example
A continuación se muestra un ejemplo simple 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 utilizado la palabra clave #IMPLIED ya que no queremos especificar ningún atributo que se incluirá en el nombre del elemento . Es opcional.