DTD Attributes

From http://www.w3schools.com (Copyright Refsnes Data)

# DTD - Attributes

In a DTD, attributes are declared with an ATTLIST declaration.

## Declaring Attributes

An attribute declaration has the following syntax:

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

    DTD example:

    <!ATTLIST payment type CDATA "check">

    XML example:

    <payment type="check" />

The attribute-type can be one of the following:

Type | Description
--- | ---
CDATA | The value is character data
(en1|en2|..) | The value must be one from an enumerated list
ID | The value is a unique id
IDREF | The value is the id of another element
IDREFS | The value is a list of other ids
NMTOKEN | The value is a valid XML name
NMTOKENS | The value is a list of valid XML names
ENTITY | The value is an entity
ENTITIES | The value is a list of entities
NOTATION | The value is a name of a notation
xml: | The value is a predefined xml value

The default-value can be one of the following:

Value | Explanation
--- | ---
value | The default value of the attribute
#REQUIRED | The attribute is required
#IMPLIED | The attribute is not required
#FIXED value | The attribute value is fixed

## A Default Attribute Value

    DTD:
    <!ELEMENT square EMPTY>
    <!ATTLIST square width CDATA "0">

    Valid XML:
    <square width="100" />

In the example above, the "square" element is defined to be an empty element with a "width" attribute of type CDATA. If no width is specified, it has a default value of 0.

## #REQUIRED

### Syntax

    <!ATTLIST element-name attribute-name attribute-type #REQUIRED>

### Example

    DTD:
    <!ATTLIST person number CDATA #REQUIRED>

    Valid XML:
    <person number="5677" />

    Invalid XML:
    <person />

Use the #REQUIRED keyword if you don't have an option for a default value, but still want to force the attribute to be present.

## #IMPLIED

### Syntax

    <!ATTLIST element-name attribute-name attribute-type #IMPLIED>

### Example

    DTD:
    <!ATTLIST contact fax CDATA #IMPLIED>

    Valid XML:
    <contact fax="555-667788" />

    Valid XML:
    <contact />

Use the #IMPLIED keyword if you don't want to force the author to include an attribute, and you don't have an option for a default value.

## #FIXED

### Syntax

    <!ATTLIST element-name attribute-name attribute-type #FIXED "value">

### Example

    DTD:
    <!ATTLIST sender company CDATA #FIXED "Microsoft">

    Valid XML:
    <sender company="Microsoft" />

    Invalid XML:
    <sender company="W3Schools" />

Use the #FIXED keyword when you want an attribute to have a fixed value without allowing the author to change it. If an author includes another value, the XML parser will return an error.

## Enumerated Attribute Values

### Syntax

    <!ATTLIST element-name attribute-name (en1|en2|..) default-value>

### Example

    DTD:
    <!ATTLIST payment type (check|cash) "cash">

    XML example:
    <payment type="check" />
    or
    <payment type="cash" />

Use enumerated attribute values when you want the attribute value to be one of a fixed set of legal values.

From http://www.w3schools.com (Copyright Refsnes Data)