首页 > 代码库 > DTD - Attributes

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 attribute-value>DTD example:<!ATTLIST payment type CDATA "check">XML example:<payment type="check" />

The attribute-type can be one of the following:

TypeDescription
CDATAThe value is character data
(en1|en2|..)The value must be one from an enumerated list
IDThe value is a unique id
IDREFThe value is the id of another element
IDREFSThe value is a list of other ids
NMTOKENThe value is a valid XML name
NMTOKENSThe value is a list of valid XML names
ENTITYThe value is an entity
ENTITIESThe value is a list of entities
NOTATIONThe value is a name of a notation
xml:The value is a predefined xml value

The attribute-value can be one of the following:

 

ValueExplanation
valueThe default value of the attribute
#REQUIREDThe attribute is required
#IMPLIEDThe attribute is optional
#FIXED valueThe attribute value is fixed

 

 

A Default Attribute Value

DTD:<!ELEMENT square EMPTY><!ATTLIST square width CDATA "0">Valid XML:<square width="100" />
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE square [<!ELEMENT square EMPTY><!ATTLIST square width CDATA "0">]><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 />
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE person [<!ELEMENT person EMPTY><!ATTLIST person number CDATA #REQUIRED>]><person number="5677"/>

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 />
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE contact [<!ELEMENT contact EMPTY><!ATTLIST contact fax CDATA #IMPLIED>]><contact fax="555-667788"/>

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" />
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sender [<!ELEMENT sender EMPTY><!ATTLIST sender company CDATA #FIXED "Microsoft">]><sender company="Microsoft"/>

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" />
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE payment [<!ELEMENT payment EMPTY><!ATTLIST payment type (check|cash) "cash">]><payment/>

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

DTD - Attributes