In a DTD, XML elements are declared with a DTD element declaration.
Declaring an Element
In the DTD, XML elements are declared with an element declaration. An element
declaration has the following syntax:
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
|
Empty elements
Empty elements are declared with the category keyword EMPTY:
<!ELEMENT element-name EMPTY>
example:
<!ELEMENT br EMPTY>
XML example:
<br />
|
Elements with only character data
Elements with only character data are declared with #PCDATA inside parentheses:
<!ELEMENT element-name (#PCDATA)>
example:
<!ELEMENT from (#PCDATA)>
|
Elements with any contents
Elements declared with the category keyword ANY, can contain any combination of
parsable data:
<!ELEMENT element-name ANY>
example:
<!ELEMENT note ANY>
|
Elements with children (sequences)
Elements with one or more children are defined with the name of the children
elements inside parentheses:
<!ELEMENT element-name
(child-element-name)>
or
<!ELEMENT element-name
(child-element-name,child-element-name,.....)>
example:
<!ELEMENT note (to,from,heading,body)>
|
When children are declared in a sequence separated by commas, the children must
appear in the same sequence in the document. In a full declaration, the
children must also be declared, and the children can also have children. The
full declaration of the "note" element will be:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
|
Declaring only one occurrence of the same element
<!ELEMENT element-name (child-name)>
example:
<!ELEMENT note (message)>
|
The example declaration above declares that the child element message must occur
once, and only once inside the "note" element.
Declaring minimum one occurrence of the same element
<!ELEMENT element-name (child-name+)>
example:
<!ELEMENT note (message+)>
|
The + sign in the example above declares that the child element message must
occur one or more times inside the "note" element.
Declaring zero or more occurrences of the same element
<!ELEMENT element-name (child-name*)>
example:
<!ELEMENT note (message*)>
|
The * sign in the example above declares that the child element message can
occur zero or more times inside the "note" element.
Declaring zero or one occurrences of the same element
<!ELEMENT element-name (child-name?)>
example:
<!ELEMENT note (message?)>
|
The ? sign in the example above declares that the child element message can
occur zero or one times inside the "note" element.
Declaring either/or content
example:
<!ELEMENT note (to,from,header,(message|body))>
|
The example above declares that the "note" element must contain a "to" element,
a "from" element, a "header" element, and either a "message" or a "body"
element.
Declaring mixed content
example:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
|
The example above declares that the "note" element can contain zero or more
occurrences of parsed character, "to", "from", "header", or "message" elements. |