Structural and domain vocabulary modules have the same coding requirements for element type declarations. Each RELAX NG vocabulary module consists of a single module file.
A structural or element-domain vocabulary module must contain a declaration for each specialized element type that is named in the module. While the XML standard allows content models to refer to undeclared element types, all element types that are named in content models or attribute list declarations within a vocabulary module must have a RELAX NG element declaration. The RELAX NG element declaration can occur in one of the following:
The element type patterns are organized into the following sections:
<div> <a:documentation>ELEMENT TYPE NAME PATTERNS</a:documentation> <define name="b"> <ref name="b.element"/> </define> <!-- ... --> </div>
The element-type name pattern provides a layer of abstraction that facilitates redefinition. The element-type name patterns are referenced from content model and domain extension patterns. Specialization modules can re-declare the patterns to include specializations of the type, allowing the specialized types in all contexts where the base type is allowed.
The declarations can occur in any order.
<div>
element
for clarity.@class
and the attributes provided by the
global-atts pattern. The attribute list declaration can be overridden in constraint modules to further constrain
the attribute list for the element type.@combine
attribute set to the value
"interleave". This pattern contains only a reference to the
tagname.attributes pattern.<element>
element whose
@name
value is the element type name and whose content is a
reference to the tagname.content and
tagname.attlist patterns. In OASIS grammar
files, the @longName
attribute in the DITA architecture namespace is
also used to help enable generation of DTD and XSD grammar files.The following example shows the
declaration for the <topichead>
element, including the
definition for each pattern described
above.
<div> <a:documentation>LONG NAME: Topic Head</a:documentation> <define name="topichead.content"> <optional> <ref name="topicmeta"/> </optional> <zeroOrMore> <choice> <ref name="anchor"/> <ref name="data.elements.incl"/> <ref name="navref"/> <ref name="topicref"/> </choice> </zeroOrMore> </define> <define name="topichead.attributes"> <optional> <attribute name="navtitle"/> </optional> <optional> <attribute name="outputclass"/> </optional> <optional> <attribute name="keys"/> </optional> <optional> <attribute name="copy-to"/> </optional> <ref name="topicref-atts"/> <ref name="univ-atts"/> </define> <define name="topichead.element"> <element name="topichead" ditaarch:longName="Topic head"> <a:documentation>The <topichead> element provides a title-only entry in a navigation map, as an alternative to the fully-linked title provided by the <topicref> element. Category: Mapgroup elements</a:documentation> <ref name="topichead.attlist"/> <ref name="topichead.content"/> </element> </define> <define name="topichead.attlist" combine="interleave"> <ref name="topichead.attributes"/> </define> </div>
@id
attribute as type "ID", including
all topic and map element types, must provide a declaration for the
idElements pattern. This is needed to correctly configure the "any"
pattern override in document-type shells and avoid errors from RELAX NG parsers. The
declaration is specified with a @combine
attribute set to the value
"choice". For
example:<div> <a:documentation>LONG NAME: Map</a:documentation> <!-- ... --> <define name="idElements" combine="choice"> <ref name="map.element"/> </define> </div>
@class
attribute for every
specialized element. This is done in a section at the end of each module that includes
a tagname.attlist pattern for each element type
that is defined in the module. The declarations can occur in any order.
The tagname.attlist pattern for each element
defines that element's @class
attribute, and also includes a reference
to the global-atts attribute list pattern. @class
is
declared as an optional attribute; the default value is declared using the
@a:defaultValue
attribute, and the value of the attribute is
constructed according to the rules in class attribute rules and syntax.
<define name="anchorref.attlist" combine="interleave"> <ref name="global-atts"/> <optional> <attribute name="class" a:defaultValue="+ map/topicref mapgroup-d/anchorref " /> </optional> </define>
Return to main page.
dita-v1.3-os-part2-tech-content Standards Track Work Product | Copyright © OASIS Open 2015. All Rights Reserved. | 17 December 2015 |