Step 2-3. Declare Elements and Attributes
<!-- ==================================================== XML Construct Domain Module Author: your name here Copyright (c) 2011 copyright holder license to use or not use or whatever ==================================================== --> <!ENTITY % xmlelem "xmlelem" > <!-- LONG NAME: XML Element --> <!ENTITY % xmlelem.content " (#PCDATA)* " > <!ENTITY % xmlelem.attributes ' %univ-atts; keyref CDATA #IMPLIED outputclass CDATA #IMPLIED ' > <!ELEMENT xmlelem %xmlelem.content; > <!ATTLIST xmlelem %xmlelem.attributes; >
Note that the content model for each element type must be at least as restrictive
as the content model of the specialization base (in this case, <keyword>
, although we haven't declared that yet). Looking at the DITA language reference (or
the declaration in commonElements.mod), we see that the content model for <keyword>
includes both #PCDATA as well as all other phrase-level elements. Since the XML component
mentions don't need or want any subelements, we've reduced the content model down
to just #PCDATA (just text), which is consistent with the content model of the <keyword>
element.
Note also that the content model and attribute lists are defined as parameter entities that are then used in the actual ELEMENT and ATTLIST declarations. (This is a change from DITA 1.1 to DITA 1.2 made to enable overriding of individual element's content models and attribute lists through constraint modules. ) In this case the only content model more restrictive than "(#PCDATA)*" is "EMPTY".)