For a document that contains XLinks to be valid, all the XLink attributes that the document uses have to be declared in a DTD just like any other attributes. In most cases some of the attributes can be declared #FIXED . For example, this DTD fragment describes the novel element seen earlier:
<!ELEMENT novel (title, author, year)> <!ATTLIST novel xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink' xlink:type (simple) #FIXED 'simple' xlink:href CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)>
Given this DTD to fill in the fixed attributes xmlns:xlink and xlink:type , a novel element only needs an xlink:href attribute to be a complete simple XLink:
<novel xlink:href = "urn:isbn:0688069444"> <title>The Wonderful Wizard of Oz</title> <author>L. Frank Baum</author> <year>1900</year> </novel>
Documents that contain many XLink elements often use parameter entity references to define the common attributes. For example, suppose novel , anthology , and nonfiction are all simple XLink elements. Their XLink attributes could be declared in a DTD like this:
<!ENTITY % simplelink "xlink:type (simple) #FIXED 'simple' xlink:href CDATA #REQUIRED xmlns:xlink CDATA #FIXED 'http://www.w3.org/1999/xlink' xlink:role CDATA #IMPLIED xlink:title CDATA #IMPLIED xlink:actuate (onRequest onLoad other none) 'onRequest' xlink:show (new replace embed other none) 'new'" > <!ATTLIST anthology %simplelink;> <!ATTLIST novel %simplelink;> <!ATTLIST nonfiction %simplelink;>
Similar techniques can be applied to declarations of attributes for extended XLinks.