SGML: Groves (in DSSSL)

SGML: Groves (in DSSSL)

See the canonical source, preferably: http://occam.sjf.novell.com:8080/dsssl/dsssl96/8659


9. Groves

A grove is a set of nodes constructed according to a grove plan. Every node in the grove belongs to a named class in the grove plan. A node is a set of property assignments, each consisting of a property name and a property value.

A grove plan defines a set of classes and, for each class, an ordered set of properties.

For each property assignment of a node, there is a unique corresponding property of the node's class whose name is the same as the name part of the property assignment. This is referred to as the property of the property assignment. The value part of a property assignment is referred to as a value of the property of the property assignment. A node is said to exhibit a value v for a property p if there is a property assignment of the node whose property is p and whose value part is v. The properties for which the node exhibits a value are referred to as the properties of the node.

The ordering of the properties of a class determines for nodes of that class the ordering of the corresponding property assignments.

Every property value has a data type. The definition of a property declares a certain data type to be possible for values of the property. This data type is referred to as the declared data type of the property.

In addition to simple abstract data types such as boolean or string, there are three special data types called the nodal data types, whose values are nodes or lists of nodes. These are described in "Data Type Definition".

The definition of a property may also allow that property to have a null value in certain circumstances, instead of a value having the declared data type. This null value is the unique object of the null data type. The null data type can never be used as a declared data type.


9.1 Nodal Properties

A property of a class may be a subnode property. The declared data type of a subnode property shall be nodal. When a node exhibits a value for a subnode property, all the nodes in the value of the property are in the same grove as the node exhibiting the value. The values of subnode properties of nodes in the grove can be viewed as connecting all the nodes in the grove into a single tree with labeled branches. More precisely,

This tree is referred to as the subnode tree. It is often useful for applications to deal with certain subtrees of the subnode tree in which all the children of a node occur as part of the value of a single property of the node. For this purpose, one property of the class can be distinguished as the children property for the class. This is done indirectly by making one property the content property for the class. If the data type of this property is nodal, then this is the children property, otherwise the primitive data type of the data type shall be char or string and the property is the data property of the node. The term children as applied to a node refers to the nodes occurring as the value of the children property. The data of a node that has a children property is the data of each of its children separated by the value of the data separator property, if any, of the class. A node has a parent if its origin has a children property which includes that node in its value; if a node does have a parent, its parent will be the same as its origin. The term tree without qualification refers to the tree formed using these parent/children relationships. The ancestors of a node comprise the parent of the node, if any, together with the ancestors of the parent of the node. The tree root of a node, x, is x if x has no ancestors or otherwise is the node that is an ancestor of x and that has no ancestors. The siblings of a node are an empty set for the grove root and are otherwise the nodes in the value of the origin-to-subnode relationship property of the node's origin other than the node itself.

NOTE 21: A node can have siblings even if it does not have a parent because its origin-to-subnode relationship property need not be the children property of its origin.

The subtree of a node is the node together with the subtrees of its children. The descendants of a node are the subtrees of children of the node. A total ordering called tree order is defined on the set of nodes in the subtree of any node: this ordering corresponds to a pre-order traversal of the subtree in which a node is visited before its children.

There are two possibilities for properties with a declared data type that is nodal but which are not subnode properties:



9.2 Grove Plans

A grove plan specifies a selection of classes and properties from a property set. A property set is defined by a property set definition expressed in SGML as described in "Property Set Definition".

For any source for the grove, the property set determines the complete grove that would be built using a grove plan that selected all the classes and properties from the property set.

NOTE 22: The complete grove contains all the information that the parser is capable of making available about the source of the grove. For any particular application, much of this information may be irrelevant. The grove plan provides a way for an application to get a grove that contains just the information it requires.

The grove to be constructed from the grove plan shall be the same as a grove obtained by modifying the complete grove in the following manner:



9.3 Property Set Definition

Property set definitions are described fully in the Property Set Definition Requirements of ISO/IEC 10744. This clause presents a simplified version that includes only those details necessary for the understanding of this International Standard.

The top-level element is a propset element. The psn and fullnm attributes specify a short SGML name and a long descriptive name. At various places within the property set, the following elements are allowed:

9.3.1 Common Attributes

9.3.1.1 Component Names

The name of a class, property, or enumerator is not a simple string but a triple of strings, each appropriate for use as a name in a different context:

A three-part name of this kind is called a component name.

These three names are specified by attributes as follows:

9.3.1.2 Specification Documents

Various elements occurring in a property set define components by referencing them in a specification document. These elements use the following common attributes:

9.3.2 Modules

A property set definition is divided into named modules each described by a psmodule element. The attributes have the following meaning:

Including a module in a grove plan is equivalent to including in the grove plan:

In addition to modules defined in property sets, there are a number of intrinsic modules defined in this International Standard that are automatically part of every property set. Properties defined in intrinsic modules are called intrinsic properties. Intrinsic modules are treated as occurring before all non-intrinsic modules.

9.3.3 Data Type Definition

Every data type is defined by a datadef element. The attributes have the following meaning:

The primitive data type of a data type is the data type itself if the data type has no super type, and otherwise is the primitive data type of the super type.

Some data types are defined in the following intrinsic module:

<psmodule rcsnm=intrdt fullnm="intrinsic data types" required>
<datadef rcsnm=node nodal>
<desc>
A single node.

<datadef rcsnm=nodelist listof=node nodal>
<desc>
An ordered list of zero or more nodes.

<datadef rcsnm=nmndlist fullnm="named node list" super=nodelist nodal>
<desc>
This is a node list in which each node is uniquely identified within
the node-list by a name, which is the value of one of its properties.
A named node list identifies, for each class of node that occurs in
it, a property of that class, which has data type string, whose value
serves as the name of nodes of that class within that named node list.
In addition, a named node-list also identifies, for each class of node
that occurs in it, a normalization rule to be applied to a
string before it is compared against the name of a node of that class
in the process of name space addressing.

<datadef rcsnm=enum fullnm=enumeration>
<desc>
This is used for a data type that represents one of an enumerated set
of values, called enumerators.  The possible enumerators are
defined in each context in which the enum data type is used.

<datadef rcsnm=char fullnm=character>

<datadef rcsnm=string listof=char>

<datadef rcsnm=integer>

<datadef rcsnm=intlist fullnm="integer list" listof=integer>

<datadef rcsnm=strlist fullnm="string list" listof=string>

<datadef rcsnm=compname fullnm="component name">
<desc>
A component name, that is, a name with three variants, an RCS name,
an application name, and a full name.

<datadef rcsnm=cnmlist fullnm="component name list" listof=compname>

</psmodule>

9.3.4 Class Definition

A class is defined by a classdef element. In addition to the component name attributes and specification document attributes, the following attributes are allowed:

9.3.5 Property Definition

A property is defined by a propdef element. In addition to the component name attributes and specification document attributes, the following attributes are allowed:

A propdef can have subelements of the following types in addition to desc and note elements:

9.3.6 Normalization Rule Definition

A string normalization rule is defined by a normdef element. It has an rcsnm attribute and the specification document attributes.



9.4 Intrinsic Properties

The following module defines the intrinsic properties of all nodes:

<psmodule rcsnm=intrbase fullnm="intrinsic base" required>
<propdef rcsnm=classnm appnm="class name" datatype=compname>
<desc>
The name of the node's class.
<propdef cn="#all" rcsnm=grovroot appnm="grove root" datatype=node irefnode>

<propdef cn="#all" rcsnm=subpns appnm="subnode property names" datatype=cnmlist>
<desc>
The names of all the subnode properties exhibited by the node.

<propdef cn="#all" rcsnm=allpns appnm="all property names" datatype=cnmlist>
<desc>
The names of all the properties exhibited by the node.

<propdef cn="#all" rcsnm=childpn appnm="children property name" datatype=compname>
<desc>
The name of the children property.
<when>
The class has a children property.

<propdef cn="#all" rcsnm=datapn appnm="data property name" datatype=compname>
<when>
The class has a data property.

<propdef cn="#all" rcsnm=dseppn appnm="data sep property name"
fullnm="data separator property name" datatype=compname>
<when>
The class has a data separator property.

<propdef cn="#all" rcsnm=parent datatype=node irefnode>
<when>
The node has a parent.

<propdef cn="#all" rcsnm=treeroot appnm="tree root" datatype=node irefnode>
<note>
The value of this property for a node shall be the node itself
if the node has no parent.
</note>

<propdef cn="#all" rcsnm=origin datatype=node irefnode>
<when>
The node is not the grove root.

<propdef cn="#all" rcsnm=otsrelpn appnm="origin-to-subnode rel property name"
fullnm="origin-to-subnode relationship property name" datatype=compname>
<when>
The node is not the grove root.
</psmodule>

<psmodule rcsnm=intrhy fullnm="intrinsic hytime">

<datadef rcsnm=grovepos appnm="grove position" strlex=GROVEPOS>
<desc>
A list each of whose members is either (a) an integer, (b) a pair
consisting of a component name and a string, (c) a pair consisting of
a component name and an integer, or (d) a component name

<propdef cn="#all" rcsnm=grovepos appnm="grove position" sd=GenFac datatype=grovepos>
<desc>
The position of a node in a grove.

<propdef cn="#all" rcsnm=treepos appnm="tree position" sd=GenFac datatype=intlist
strlex="marker+">
<desc>
The position of a node in its tree in treeloc format.

<propdef cn="#all" rcsnm=pathpos appnm="path position" sd=GenFac datatype=intlist
strlex="(marker,marker)+">
<desc>
The position of a node in its tree in pathloc format.
</psmodule>

<propdef cn="#grove" rcsnm=ptreert appnm="principal tree root" sd=GenFac
datatype=node
irefnode>



9.5 Auxiliary Groves

It is sometimes convenient to group nodes in a grove in an application-dependent manner. This is done by using nodes in the grove as the source for a further parse, called an auxiliary parse. A grove created by an auxiliary parse is called an auxiliary grove. The grove parsed to create the auxiliary grove is called the source grove of the auxiliary grove. Each node in an auxiliary grove has an intrinsic urefnode property, source, that points to those nodes in the source grove from which it was derived.

<propdef cn="#all" rcsnm=source datatype=nodelist urefnode sd=DSSSL>



9.6 SGML Property Set

The property set for SGML is:

<!-- SGML Property Set -->
<!doctype propset public "ISO/IEC 10744:1993/DTD Property Set//EN"
"sgmlprop.dtd">
<propset psn="sgmlprop" fullnm="SGML Property Set">
<desc>
Defines the classes and properties to be used in the construction of
groves from the parsing of SGML documents.

Classes and properties are classified as follows:
  o Abstract or SGML document string (SDS)
  o SGML declaration, document prolog, or document instance
  o Required only for support of datatag, rank, shortref, link, subdoc,
    formal.

ESIS corresponds roughly to the combination of baseabs (base abstract),
prlgabs0, and instabs (instance abstract).
</desc>
<!--Note: Clause numbering conforms to the rules specified in Clause 6.3
          of ISO/IEC 13673, which defines how the components of
          ISO/IEC 8879 should be identified within conformance tests.
          The first number/letter represents the clause number (letters
          can be treated as hexadecimal in this document), the second
          number identifies the sub-clause, the third the
          sub-sub-clause, and the fourth the
          sub-sub-sub-clause (if any) with the final number/letter
          identifying the paragraph number. (Productions,
          notes and items in a list are counted as separate paragraphs.)
          Where figures are referred to, the clause, sub-clause, and
          sub-sub-clause numbers are replaced by FIG and the
          sub-sub-sub-clause number is replaced by the figure number.
          As an extension to ISO/IEC 13673, subclauses in clause 4
          are referred to using numbers of the form 4xxxy where xxx
          is the decimal subclause number and y is the paragraph number
          as normal.
-->

<!-- Base abstract classes and properties -->

<psmodule rcsnm=baseabs fullnm="base abstract">

<classdef rcsnm=sgmldoc appnm="sgml document" clause="62001">
<desc>
The parsed SGML document or subdocument.  The root of the grove.

<propdef subnode rcsnm=sgmlcsts appnm="sgml constants" datatype=node
ac=sgmlcsts clause="41170 41180">

<propdef rcsnm=appinfo appnm="application info"
fullnm="application information" datatype=string strlex=mindata
clause="d6001">
<desc>
Application information provided by the SGML declaration.
<when>
A literal was specified as the value of the APPINFO parameter
of the SGML declaration applicable to the document/subdocument.

<propdef subnode rcsnm=prolog datatype=nodelist
ac="doctpdcl lktpdcl comdcl pi ssep" cn=sgmldoc clause="71001">

<propdef subnode rcsnm=epilog datatype=nodelist ac="comdcl pi ssep"
cn=sgmldoc clause="71002">
<desc>
Other prolog following the document instance.

<classdef rcsnm=sgmlcsts appnm="sgml constants" clause="b6004 c2101">
<desc>
A holding pen for selected nodes intrinsic to all SGML documents,
which may be needed as irefnodes elsewhere.
<note>
This has no properties unless the srabs (shortref abstract)
or linkabs (link abstract) modules are included.

<classdef rcsnm=attasgn appnm="attribute assignment"
conprop=value dsepprop=tokensep clause="79002">
<desc>
An attribute assignment, whether specified or defaulted.
<note>
In the base module because of data attributes.

<propdef subnode rcsnm=value datatype=nodelist
ac="attvaltk datachar sdata intignch entstart entend" clause="79401">
<note>
If the attribute value is tokenized, the children are of type attvaltk;
otherwise, they are of the other allowed types.
<when>
The attribute is not an impliable attribute for which there is no
attribute specification.

<propdef rcsnm=name datatype=string strlex=name strnorm=general
clause="93001">

<propdef rcsnm=implied datatype=boolean clause="b3407">
<desc>
True if and only if the attribute is an impliable attribute
for which there is no attribute specification.

<propdef rcsnm=tokensep appnm="token sep" fullnm="token separator"
datatype=char clause="79400">
<desc>
The separator between the tokens of the value. Always equal
to the SPACE character in the concrete syntax.
<when>
The node has two or more children of class attvaltk.

<classdef rcsnm=attvaltk appnm="attribute value token" conprop=token
clause="79305">

<propdef rcsnm=token datatype=string strlex=nmtoken clause="93003">

<classdef rcsnm=datachar appnm="data char" fullnm="data character"
conprop=char clause="92002">

<propdef rcsnm=char fullnm=character datatype=char clause="92003">
<desc>
The character returned by the parser to the application.

<classdef rcsnm=sdata
fullnm="internal specific character data entity reference result"
conprop=char clause="92101">

<propdef rcsnm=sysdata appnm="system data" datatype=string clause="43041">
<note>
The replacement text of a specific character data entity is treated
as system data when referenced.

<propdef rcsnm=char fullnm=character datatype=char sd=DSSSL>
<desc>
The character associated with the SDATA entity by the map-sdata-entity
architectural form.
<when>
A character has been associated with the SDATA entity by the
map-sdata-entity architectural form.

<classdef rcsnm=pi fullnm="processing instruction" clause="80000">
<desc>
Processing instruction.

<propdef rcsnm=sysdata appnm="system data" datatype=string clause="80002">

</psmodule>

<!-- Prolog-related abstract classes and properties, level 0 -->

<psmodule rcsnm=prlgabs0 fullnm="prolog abstract level 0" dependon=baseabs>

<propdef irefnode rcsnm=govdt appnm="governing doctype" datatype=node
ac=doctype
cn=sgmldoc clause="71004">
<desc>
The document type that governs the parse.  When there are more than one
"active" document types specified, each active document type gives rise
to a separate parse, which, in turn, creates a separate sgmldoc grove.

<propdef subnode rcsnm=dtlts appnm="doctypes and linktypes"
fullnm="document types and link types"
datatype=nmndlist ac="doctype linktype" acnmprop="name name" cn=sgmldoc
clause="71001">
<desc>
The document types and link types declared in the prolog, in declaration
order.

<classdef rcsnm=doctype appnm="document type" clause="b1000">
<desc>
The abstraction of a document type declaration.
<note>
It includes entities declared in that declaration's DTD,
entities treated as being declared therein because they
occur in a link type for which that DTD is the source DTD,
and entities declared in the base declaration which may be
referenced when this document type is active.

<propdef rcsnm=name datatype=string strlex=name strnorm=general clause="b1002">
<desc>
The name associated with the DTD by the document type declaration;
necessarily also the name of the type of the outermost element.

<propdef rcsnm=govrning appnm=governing datatype=boolean clause="71005">
<desc>
True if either this was the active document type or there was
no active document type and this is the base document type.
<note>
The "governing" document type governs the parsing process.
If more than one document type is specified as "active",
each active document type gives rise to a separate parse,
for which it is the governing document type, and thereby
produces a separate grove.

<propdef subnode rcsnm=genents appnm="general entities" datatype=nmndlist
ac=entity acnmprop=name clause="b1004">
<desc>
The general entities of the document or subdocument declared in the DTD.
<note>
Includes entities not explicitly declared, as discussed above
in the description of this class.
<note>
If the DTD provides a default declaration for undeclared
general entity names, there is no entry in the list
corresponding to this declaration, nor any entry for any
such undeclared name.  (But such entities are in the
entities property of the sgmldoc class.)  See dfltent following.

<propdef subnode rcsnm=nots appnm=notations datatype=nmndlist ac=notation
acnmprop=name clause="b1005">

<classdef rcsnm=entity clause="60000">

<propdef rcsnm=name datatype=string strlex=name strnorm=entity clause="93001">

<propdef rcsnm=enttype appnm="entity type" datatype=enum clause="a5502">

<enumdef rcsnm=text fullnm="SGML text">
<enumdef rcsnm=cdata>
<enumdef rcsnm=sdata>
<enumdef rcsnm=ndata>
<enumdef rcsnm=subdoc appnm=subdocument>
<enumdef rcsnm=pi>

<propdef rcsnm=text fullnm="replacement text" datatype=string clause="92101">
<when>
The entity is an internal entity.

<propdef subnode rcsnm=extid appnm="external id" fullnm="external identifier"
datatype=node ac=extid clause="a1601">
<when>
The entity is an external entity.

<propdef subnode rcsnm=atts appnm=attributes
datatype=nmndlist ac=attasgn acnmprop=name clause="b4120">
<desc>
A list of data attribute assignments, one for each declared attribute of
the entity in the order in which they were declared in the attribute
definition list declaration.
<when>
The entity is an external data entity.

<propdef rcsnm=notname appnm="notation name" datatype=string strlex=name
strnorm=general clause="79408">
<when>
The entity is an external data entity.

<propdef irefnode rcsnm=notation datatype=node ac=notation clause="b4001">
<when>
The entity is an external data entity.

<classdef rcsnm=notation fullnm="data content notation" clause="b4000">

<propdef rcsnm=name datatype=string strlex=name strnorm=general clause="79441">

<propdef subnode rcsnm=extid appnm="external id" fullnm="external identifier"
datatype=node ac=extid clause="a1601">

<classdef rcsnm=extid appnm="external id" fullnm="external identifier"
clause="a1600">

<propdef rcsnm=pubid appnm="public id" fullnm="public identifier"
datatype=string strlex=mindata clause="a1602">
<when>
The external identifier contained an explicit public identifier.

<propdef rcsnm=sysid appnm="system id" fullnm="system identifier"
datatype=string clause="a1603">
<when>
The external identifier contained an explicit system identifier.

<propdef optional rcsnm=gensysid appnm="generated system id"
fullnm="generated system identifier"
datatype=string>
<desc>
The system identifier generated by the system from the external
identifier and other information available to the system.
<when>
The external identifier is not the external identifier of
the default entity.
</psmodule>

<!-- Document instance related abstract classes and properties -->

<psmodule rcsnm=instabs fullnm="instance abstract" dependon=baseabs>

<propdef subnode rcsnm=docelem appnm="document element" datatype=node
ac=element cn=sgmldoc clause="72003">
<desc>
The document element for the governing document type.

<propdef irefnode rcsnm=elements datatype=nmndlist ac=element acnmprop=id
cn=sgmldoc clause="73001">
<desc>
All the elements in the document which have unique identifiers in the
order in which they are detected by the parser: parents occur
before children; siblings occur in left-to-right order.

<propdef irefnode rcsnm=entities datatype=nmndlist ac=entity acnmprop=name
cn=sgmldoc clause="94410">
<desc>
The explicitly declared general entities from the governing document
type, followed by the defaulted entities.
<note>
This includes both internal and external entities. It does not
include unnamed entities.

<propdef subnode rcsnm=dfltents appnm="defaulted entities" datatype=nmndlist
ac=entity acnmprop=name cn=sgmldoc clause="94412">
<desc>
An entity for each entity name in the document that referenced
the default entity in the governing document type.

<!-- Attribute value token -->

<propdef irefnode rcsnm=entity datatype=node ac=entity cn=attvaltk
clause="79401">
<when>
Declared value of attribute is ENTITY or ENTITIES.

<propdef irefnode rcsnm=notation datatype=node ac=notation cn=attvaltk
clause="79408">
<when>
Declared value of attribute is NOTATION.

<propdef irefnode rcsnm=referent datatype=node ac=element cn=attvaltk
clause="79403">
<when>
Declared value is IDREF or IDREFS.

<classdef rcsnm=element conprop=content clause="73000">

<propdef rcsnm=gi fullnm="generic identifier" datatype=string strlex=name
strnorm=general clause="78001">
<desc>
Generic identifier (element type name) of element.

<propdef derived rcsnm=id fullnm="unique identifier" datatype=string
strlex=name strnorm=general clause="79403">
<when>
A unique identifier was specified for the element.

<propdef subnode rcsnm=atts appnm=attributes
datatype=nmndlist ac=attasgn acnmprop=name clause="79301">
<desc>
A list of attribute assignments, one for each declared attribute
of the element in the order in which they were declared in the
attribute definition list declaration.

<propdef subnode rcsnm=content datatype=nodelist
ac="datachar sdata element extdata subdoc pi msignch ignrs ignre repos
    usemap uselink entstart entend ssep comdcl msstart msend ignmrkup"
clause="76001">

<classdef rcsnm=extdata appnm="external data"
fullnm="reference to external data" clause="a5500">
<desc>
The result of referencing an external data entity.

<propdef rcsnm=entname appnm="entity name" datatype=string strlex=name
strnorm=entity clause="a5101">

<propdef irefnode rcsnm=entity datatype=node ac=entity clause="94410">

</psmodule>

<!-- Base SDS classes and properties -->

<psmodule rcsnm=basesds0 fullnm="base SGML document string level 0"
dependon=baseabs>

<!-- Sdata -->

<propdef optional rcsnm=entname appnm="entity name" datatype=string
strlex=name strnorm=entity cn=sdata clause="a5101">

<propdef irefnode rcsnm=entity datatype=node ac=entity cn=sdata
clause="94410">

<!-- Processing instruction -->

<propdef rcsnm=entname appnm="entity name" datatype=string strlex=name
strnorm=entity cn=pi clause="a5101">
<when>
The processing instruction resulted from referencing a PI entity.

<propdef irefnode rcsnm=entity datatype=node ac=entity cn=pi
clause="94410">
<when>
The processing instruction resulted from referencing a PI entity.

<!-- Entity -->

<propdef rcsnm=dflted appnm=defaulted datatype=boolean cn=entity
clause="94412">
<desc>
True if this was created because of a reference to the default entity.

</psmodule>

<psmodule rcsnm=basesds1 fullnm="base SGML document string level 1"
dependon=basesds0>

<propdef subnode optional rcsnm=entref appnm="entity ref"
fullnm="entity reference" datatype=nodelist
ac="gendelm name ssep entstart entend refendre shortref" cn=pi
clause="94401">
<desc>
The markup of the entity reference.
<note>
ssep, entstart, and entend may occur only in a name group in a named
entity reference.
<when>
The processing instruction resulted from referencing a PI entity with
a named entity reference or a short reference.

<propdef subnode optional rcsnm=open appnm="open delim"
fullnm="open delimiter" datatype=node ac=gendelm cn=pi clause="80001">
<when>
The processing instruction did not result from referencing a PI entity.

<propdef subnode optional rcsnm=close appnm="close delim"
fullnm="close delimiter" datatype=node ac=gendelm cn=pi clause="80001">
<when>
The processing instruction did not result from referencing a PI entity.

<!-- Attribute -->

<propdef irefnode rcsnm=attspec appnm="attribute spec" fullnm="attribute specification"
datatype=nodelist ac="name ssep gendelm literal attvalue" cn=attasgn
clause="79002">
<when>
The attribute was specified rather than defaulted or implied.

<propdef irefnode rcsnm=attvalsp appnm="attribute value spec"
fullnm="attribute value specification" datatype=node
ac="attvalue literal" cn=attasgn clause="79301">
<when>
The attribute is not implied.

<!-- Data character -->

<propdef rcsnm=intrplch appnm="interp replaced char"
fullnm="interpretation replaced character" datatype=char cn=datachar
clause="a1704">
<desc>
The character that was replaced.
<note>
When a sequence of RE and/or SPACE characters in a minimum literal
is replaced by a single SPACE character, then the first
character is represented by a datachar possibly with an intrplch
property, and the other characters are represented by an intignch.
<when>
The data character replaced another character
when a literal was interpreted: a SPACE character that replaced a
RE or SEPCHAR in an attribute value literal or an RE in a minimum
literal.

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" cn=datachar clause="95001">
<when>
The data character was the replacement of a named character reference.

<propdef subnode optional rcsnm=numcref appnm="numeric char ref"
fullnm="numeric character reference" datatype=nodelist
ac="gendelm name crefcnum refendre" cn=datachar clause="95001">
<when>
The data character was the replacement of a numeric character reference.

<!-- Specific character data -->

<propdef subnode optional rcsnm=markup datatype=nodelist
ac="gendelm name ssep entstart entend refendre shortref" cn=sdata
clause="94401">
<note>
ssep, entstart, and entend can occur only in a name group in a named
entity reference.

<classdef rcsnm=ssep appnm="s sep" fullnm="s separator" mayadd
clause="62100">

<propdef rcsnm=char fullnm=character datatype=char clause="92003">

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" clause="95001">
<when>
The character was the replacement of a named character reference.

<classdef rcsnm=comment clause="a3002">

<propdef subnode optional rcsnm=open appnm="open delim"
fullnm="open delimiter" datatype=node ac=gendelm clause="a3002">

<propdef rcsnm=chars fullnm=characters datatype=string clause="92101">
<desc>
The characters in the comment (excluding the com delimiters).

<propdef subnode optional rcsnm=close appnm="close delim"
fullnm="close delimiter" datatype=node ac=gendelm clause="a3002">

<classdef rcsnm=comdcl appnm="comment decl" fullnm="comment declaration"
conprop=markup mayadd clause="a3001">

<propdef subnode rcsnm=markup datatype=nodelist ac="comment ssep"
clause="a3001">

<classdef rcsnm=ignmrkup appnm="ignored markup" conprop=markup
clause="77002 94405 c3007">
<desc>
Ignored markup.  Either a start-tag or end-tag that is ignored because
it contains a document type specification that contains a name group
none of the names in which is the name of an active document type, or
a general or parameter entity reference that is ignored because it
contains a name group none of the names in which is the name of an
active document or link type, or a link set use declaration that is
ignored because its link type name is not an active link type,
or a general entity reference in an attribute value literal in
a start-tag that is itself ignored markup, or an entity declaration
that is ignored because the entity was already declared.

<propdef subnode rcsnm=markup datatype=nodelist
ac="gendelm name ssep attvalue literal entstart entend refendre"
clause="74001 75001 94401 c3001">

<classdef rcsnm=entstart appnm="entity start" conprop=markup>
<desc>
The start of the replacement text of an entity.
<note>
The end shall be marked by an entend node. This is the result of an
entity reference that was replaced by the parser.

<propdef subnode optional rcsnm=markup datatype=nodelist
ac="gendelm name ssep entstart entend refendre shortref">
<desc>
The markup of the entity reference.

<propdef optional rcsnm=entname appnm="entity name" datatype=string
strlex=name strnorm=entity>

<propdef irefnode rcsnm=entity datatype=node ac=entity clause="a5201">

<classdef rcsnm=entend appnm="entity end" clause="94500">
<desc>
The end of an entity reference that was replaced by the parser.

<classdef rcsnm=msignch appnm="marked section ignored char"
fullnm="marked section ignored character" clause="a4204">
<desc>
A character that has been ignored within a marked section.

<propdef rcsnm=char fullnm=character datatype=char clause="92101">

<classdef rcsnm=intignch appnm="interp ignored char"
fullnm="interpretation ignored char" clause="79303 a1704">
<desc>
A character in a literal that was ignored when the literal was
interpreted: an RS in an attribute value literal or in a minimum literal,
an RE or SPACE character in a minimum literal that immediately
followed another RE or SPACE character in a minimum literal,
or an RE or SPACE character that was the first or last character
in a minimum literal.

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" clause="95001">
<when>
The character was the replacement of a named character reference.

<propdef rcsnm=char fullnm=character datatype=char clause="92101">

<classdef rcsnm=gendelm appnm="general delim" fullnm="general delimiter"
clause="FIG30">
<desc>
A general delimiter.

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" clause="95001">
<note>
This may happen only for a delimiter that is the first child
of its parent or the value of a close delimiter property.
<when>
The first character of the delimiter was entered with a named
character reference.

<propdef rcsnm=role datatype=string strnorm=rcsgener clause="96001 FIG30">
<desc>
The name of the delimiter role.

<propdef optional rcsnm=origdelm appnm="original delim"
fullnm="original delimiter" datatype=string clause="92102 FIG22">
<desc>
The delimiter as originally entered before any upper-case substitution.

<classdef rcsnm=name clause="93001">
<desc>
A name within markup.
<note>
Names in attribute values are represented by nodes of type attvaltk
rather than name.

<propdef rcsnm=origname appnm="original name" datatype=string clause="93005">
<desc>
The characters of the name as originally entered before
any upper-case substitution.

<classdef rcsnm=rname appnm="reserved name" clause="d4701">
<desc>
A token in markup that is recognized as a reserved name.

<propdef rcsnm=refname appnm="ref name" fullnm="reference name"
datatype=string strnorm=rcsgener clause="d4704">
<desc>
The reference reserved name.

<propdef optional rcsnm=origname appnm="original name" datatype=string
clause="93005">
<desc>
The reserved name as originally entered before any upper-case
substitution.

<classdef rcsnm=literal conprop=value clause="a1201 79302 a1701 a1603">
<desc>
A parameter literal, attribute value literal, minimum literal, or
system identifier.

<propdef subnode optional rcsnm=open appnm="open delim"
fullnm="open delimiter" datatype=node ac=gendelm clause="96100 FIG30">

<propdef subnode rcsnm=value datatype=nodelist
ac="entstart entend datachar sdata intignch"
clause="a1202 91001 a1702 80002">
<desc>
Interpreted value of literal.
<note>
If the literal is an attribute value literal for a tokenized value,
the value of the literal represents the attribute value before
tokenization but after interpretation.

<propdef subnode optional rcsnm=close appnm="close delim"
fullnm="close delimiter" datatype=node ac=gendelm clause="96100 FIG30">

<classdef rcsnm=number clause="93002">
<desc>
A number in markup that is not a character number in
a character reference.
<note>
Numbers in attribute values are represented by nodes of type attvaltk
rather than number.

<propdef rcsnm=digits datatype=string strlex=number clause="93002">

<classdef rcsnm=crefcnum appnm="char ref char number"
fullnm="character reference character number" clause="95001">
<desc>
A character number occurring in a character reference.
<note>
The numeric value of the number is determined by the char property of
the datachar node.

<propdef optional rcsnm=ndigits appnm="n digits" fullnm="number of digits"
datatype=integer clause="95003 93002">
<desc>
The number of digits used to specify the value.

<classdef rcsnm=refendre appnm="ref end re" fullnm="reference end RE"
clause="94502">
<desc>
An RE in markup that is used as a reference end.

<classdef rcsnm=attvalue appnm="attribute value" clause="79400">
<desc>
An attribute value specification that is an attribute value
rather than an attribute value literal.
<note>
Do not confuse this with the attasgn class.

<propdef rcsnm=value datatype=string clause="93005">
<desc>
The value before any upper-case substitution.

<classdef rcsnm=nmtoken appnm="name token" clause="93003">
<desc>
A name token in markup.
<note>
This is used only for name tokens in name token groups in
declared values. Name tokens in attribute values are represented by
nodes of type attvaltk rather than nmtoken.

<propdef rcsnm=origname appnm="original name token" datatype=string
clause="93005">
<desc>
The characters of the name token as originally entered before
any upper-case substitution.

<classdef rcsnm=msstart appnm="marked section start"
fullnm="marked section declaration start" conprop=markup clause="a4002">
<desc>
The part of a marked section declaration preceding the marked section.

<propdef subnode optional rcsnm=markup datatype=nodelist
ac="gendelm rname ssep entstart entend comment ignmrkup" clause="a4002">
<note>
First child will be gendelm for mdo, last will be gendelm for
dso.

<propdef rcsnm=status datatype=enum clause="a4201">
<desc>
Effective status of marked section.

<enumdef rcsnm=ignore>
<enumdef rcsnm=cdata>
<enumdef rcsnm=rcdata>
<enumdef rcsnm=include>
<enumdef rcsnm=temp>

<classdef rcsnm=msend appnm="marked section end" conprop=markup
clause="a4003">

<propdef subnode optional rcsnm=markup datatype=nodelist ac=gendelm
clause="FIG3e FIG3h">
<note>
Will be a gendelm for the msc and a gendelm for the mdc.

</psmodule>

<!-- SGML Declaration-related abstract classes and properties -->

<psmodule rcsnm=sdclabs fullnm="sgml declaration abstract" dependon=baseabs>

<propdef rcsnm=sgmlver appnm="sgml version" datatype=string strlex=mindata
cn=sgmldoc clause="d0002">
<desc>
The minimum literal specified as the first parameter of the SGML
declaration applicable to this document or subdocument.

<propdef subnode rcsnm=docchset appnm="document char set"
fullnm="document character set" datatype=node ac=charset cn=sgmldoc
clause="d1001">

<propdef subnode rcsnm=capset appnm="capacity set" datatype=node
ac=capset cn=sgmldoc clause="d2001">

<propdef rcsnm=synscope appnm="syntax scope"
fullnm="concrete syntax scope" datatype=enum cn=sgmldoc clause="d3002">

<enumdef rcsnm=instance>
<enumdef rcsnm=document>

<propdef subnode rcsnm=dclsyn appnm="decl syntax"
fullnm="declared concrete syntax" datatype=node ac=syntax cn=sgmldoc
clause="d4001">

<propdef subnode rcsnm=refsyn appnm="ref syntax"
fullnm="reference concrete syntax" datatype=node ac=syntax cn=sgmldoc
clause="d4002 e0001 FIG70">
<desc>
The reference concrete syntax used for the SGML declaration and,
if the concrete syntax scope is INSTANCE, the prolog.
<note>
Not a property of sgmlcsts because it depends on the document character
set.

<propdef irefnode rcsnm=prosyn appnm="prolog syntax"
fullnm="prolog concrete syntax" datatype=node ac=syntax cn=sgmldoc
clause="d4001">
<desc>
The concrete syntax for the prolog.

<propdef subnode rcsnm=features fullnm="feature use" datatype=node
ac=features cn=sgmldoc clause="d5001">

<classdef rcsnm=charset appnm="char set" fullnm="character set"
conprop=chdescs clause="d1000">

<propdef subnode rcsnm=chdescs appnm="char descs"
fullnm="character descriptions" datatype=nodelist ac=chardesc
clause="d1101">

<classdef rcsnm=chardesc appnm="char desc" fullnm="character description"
clause="d1122">

<propdef rcsnm=descnum appnm="desc set number"
fullnm="described set character number" datatype=integer clause="d1123">

<propdef rcsnm=nchars appnm="n chars" fullnm="number of characters"
datatype=integer clause="d1125">

<propdef rcsnm=basenum appnm="base set number"
fullnm="base set character number" datatype=integer clause="d1124">
<when>
Character description included a base set character number.

<propdef rcsnm=baseset appnm="base char set" fullnm="base character set"
datatype=string strlex=mindata clause="d1111">
<desc>
The public identifier of the base character set.
<when>
Character description included a base set character number.

<propdef rcsnm=desclit appnm="desc literal"
fullnm="description literal" datatype=string strlex=mindata
clause="a1701">
<when>
Character description not entered as base set number.

<classdef rcsnm=syntax fullnm="concrete syntax" clause="d4000">
<note>
This represents a concrete syntax bound to this document's document
character set. Characters are characters in the document character set
not in the syntax reference character set.

<propdef rcsnm=shunctrl appnm="shunchar controls" datatype=boolean
clause="d4204">
<desc>
True if SHUNCHAR included CONTROLS.

<propdef rcsnm=shunchar fullnm="shunned character numbers"
datatype=intlist clause="d4201">

<propdef subnode rcsnm=synchset appnm="syntax ref char set"
fullnm="syntax-reference character set" datatype=node ac=charset
clause="d4301">

<propdef rcsnm=re fullnm="record end" datatype=char clause="d4401">

<propdef rcsnm=rs fullnm="record start" datatype=char clause="d4401">

<propdef rcsnm=space datatype=char clause="d4401">

<propdef subnode rcsnm=addfuns appnm="added function chars"
fullnm="added function characters" datatype=nmndlist ac=addfun
acnmprop=name clause="d4401">

<propdef rcsnm=lcnmstrt datatype=string clause="d4503">

<propdef rcsnm=ucnmstrt datatype=string clause="d4504">

<propdef rcsnm=lcnmchar datatype=string clause="d4505">

<propdef rcsnm=ucnmchar datatype=string clause="d4506">

<propdef rcsnm=substgen appnm="subst general names"
fullnm="substitute general names" datatype=boolean clause="d4507">
<desc>
True if GENERAL YES is specified in NAMECASE.

<propdef rcsnm=substent appnm="subst entity names"
fullnm="substitute entity names" datatype=boolean clause="d4507">
<desc>
True if ENTITY YES is specified in NAMECASE.

<propdef subnode rcsnm=gdasns appnm="general delim assocs"
fullnm="general delimiter role associations"
datatype=nmndlist ac=dlmrlas acnmprop=role clause="d4611">
<desc>
There is a term for every general delimiter role whether or not
it is changed from that prescribed by the reference concrete syntax.
The terms occur in alphabetical order of their (abstract-syntax)
role names.

<propdef rcsnm=srdelms appnm="shortref delims"
fullnm="short reference delimiters" datatype=strlist clause="d4621">

<propdef subnode rcsnm=slitasns appnm="syntax literal assocs"
fullnm="syntax literal associations" datatype=nmndlist ac=synlitas
acnmprop=refname clause="d4701">
<desc>
The syntax literal/reserved name associations specified by the concrete
syntax. There is a term for every reserved name whether or not
it is changed from that prescribed by the reference concrete syntax.
The terms occur in alphabetical order of the syntactic literals.

<propdef rcsnm=attcnt datatype=integer clause="FIG41">
<propdef rcsnm=attsplen datatype=integer clause="FIG42">
<propdef rcsnm=bseqlen datatype=integer clause="FIG43">
<propdef rcsnm=dtaglen datatype=integer clause="FIG44">
<propdef rcsnm=dtemplen datatype=integer clause="FIG45">
<propdef rcsnm=entlvl datatype=integer clause="FIG46">
<propdef rcsnm=grpcnt datatype=integer clause="FIG47">
<propdef rcsnm=grpgtcnt datatype=integer clause="FIG48">
<propdef rcsnm=grplvl datatype=integer clause="FIG49">
<propdef rcsnm=litlen datatype=integer clause="FIG4a">
<propdef rcsnm=namelen datatype=integer clause="FIG4b">
<propdef rcsnm=normsep datatype=integer clause="FIG4c">
<propdef rcsnm=pilen datatype=integer clause="FIG4d">
<propdef rcsnm=taglen datatype=integer clause="FIG4e">
<propdef rcsnm=taglvl datatype=integer clause="FIG4f">

<classdef rcsnm=addfun appnm="added function char"
fullnm="added function character" clause="d4400">

<propdef rcsnm=name datatype=string strlex=name strnorm=general
clause="d4402">

<propdef rcsnm=class fullnm="function class" datatype=enum clause="d4403">
<enumdef rcsnm=funchar>
<enumdef rcsnm=msichar>
<enumdef rcsnm=msochar>
<enumdef rcsnm=msschar>
<enumdef rcsnm=sepchar>

<propdef rcsnm=char fullnm=character datatype=char clause="95003">
<desc>
Character assigned to function.

<classdef rcsnm=dlmrlas appnm="delim role assoc"
fullnm="delimiter role association" clause="d4610">
<desc>
The association, made by a concrete syntax, of a character string with
an abstract-syntax delimiter role.

<propdef rcsnm=role datatype=string strnorm=rcsgener clause="d4612">
<desc>
The name of the role.

<propdef rcsnm=delm appnm=delim fullnm=delimiter datatype=string
strnorm=general clause="d4611">
<desc>
The string to be used in the document.

<classdef rcsnm=synlitas appnm="syntactic literal assoc"
fullnm="syntactic literal association" clause="d4700">
<desc>
The association, made by a concrete syntax, of a reserved name with
an abstract-syntax syntactic literal.

<propdef rcsnm=synlit appnm="syntactic literal"
datatype=string strnorm=rcsgener clause="d4702">
<desc>
The syntactic literal.  (More precisely, the name which when enclosed in
double quotation marks becomes the syntactic literal.)

<propdef rcsnm=resname appnm="reserved name" datatype=string strlex=name
strnorm=general clause="d4702">
<desc>
The reserved name to be used in the document.
<note>
In the reference concrete syntax, the syntactic literal is
identical to the reserved name.

<classdef rcsnm=capset appnm="capacity set" clause="d2000">

<propdef rcsnm=totalcap datatype=integer clause="FIG51">
<propdef rcsnm=entcap datatype=integer clause="FIG52">
<propdef rcsnm=entchcap datatype=integer clause="FIG53">
<propdef rcsnm=elemcap datatype=integer clause="FIG54">
<propdef rcsnm=grpcap datatype=integer clause="FIG55">
<propdef rcsnm=exgrpcap datatype=integer clause="FIG56">
<propdef rcsnm=exnmcap datatype=integer clause="FIG57">
<propdef rcsnm=attcap datatype=integer clause="FIG58">
<propdef rcsnm=attchcap datatype=integer clause="FIG59">
<propdef rcsnm=avgrpcap datatype=integer clause="FIG5a">
<propdef rcsnm=notcap datatype=integer clause="FIG5b">
<propdef rcsnm=notchcap datatype=integer clause="FIG5c">
<propdef rcsnm=idcap datatype=integer clause="FIG5d">
<propdef rcsnm=idrefcap datatype=integer clause="FIG5e">
<propdef rcsnm=mapcap datatype=integer clause="FIG5f">
<propdef rcsnm=lksetcap datatype=integer clause="FIG5g">
<propdef rcsnm=lknmcap datatype=integer clause="FIG5h">

<classdef rcsnm=features fullnm="feature use" clause="d5000">

<propdef rcsnm=datatag datatype=boolean clause="d5101">
<desc>
True if DATATAG is YES.

<propdef rcsnm=omittag datatype=boolean clause="d5101">
<desc>
True if OMITTAG is YES.

<propdef rcsnm=rank datatype=boolean clause="d5101">
<desc>
True if RANK is YES.

<propdef rcsnm=shorttag datatype=boolean clause="d5101">
<desc>
True if SHORTTAG is YES.

<propdef rcsnm=simple datatype=integer clause="d5201">
<desc>
0 if SIMPLE is NO.

<propdef rcsnm=implicit datatype=boolean clause="d5201">
<desc>
True if IMPLICIT is YES.

<propdef rcsnm=explicit datatype=integer clause="d5201">
<desc>
0 if EXPLICIT is NO.

<propdef rcsnm=concur datatype=integer clause="d5301">
<desc>
0 if CONCUR is NO.

<propdef rcsnm=subdoc datatype=integer clause="d5301">
<desc>
0 if SUBDOC is NO.

<propdef rcsnm=formal datatype=boolean clause="d5301">
<desc>
True if FORMAL is YES.

</psmodule>

<!-- SGML Declaration-related SGML document string classes and properties -->

<psmodule rcsnm=sdclsds fullnm="SGML declaration SGML document string"
dependon=basesds1>

<propdef subnode optional rcsnm=sgmldcl appnm="sgml decl"
fullnm="SGML declaration" datatype=node ac=sgmldcl cn=sgmldoc
clause="d0001">
<when>
SGML declaration was explicitly present.

<propdef rcsnm=sdcltype appnm="sgml decl type"
fullnm="SGML declaration type" datatype=enum cn=sgmldoc clause="62300">

<enumdef rcsnm=explicit>
<desc>
The SGML declaration was explicitly specified.

<enumdef rcsnm=implied>
<desc>
The SGML declaration was implied.

<enumdef rcsnm=inherit>
<desc>
The SGML declaration comes from the SGML document of which
this is a subdocument.

<classdef rcsnm=sgmldcl appnm="sgml decl" fullnm="SGML declaration"
conprop=markup clause="d0000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="ssep comment name number rname literal gendelm" clause="d0001">
<note>
Also includes any s separators before the SGML declaration;
last child is gendelm for mdc delimiter.

</psmodule>

<!-- Prolog-related abstract classes and properties, level 1 -->

<psmodule rcsnm=prlgabs1 fullnm="prolog abstract level 1"
dependon=prlgabs0>

<propdef subnode rcsnm=attdefs appnm="attribute defs"
fullnm="attribute definitions" datatype=nmndlist ac=attdef acnmprop=name
cn=notation clause="b3002">

<propdef irefnode rcsnm=attdef appnm="attribute def"
fullnm="attribute definition" datatype=node ac=attdef cn=attasgn
clause="b3003">

<propdef irefnode rcsnm=elemtype appnm="element type" datatype=node ac=elemtype
cn=element clause="b2101">

<propdef subnode rcsnm=dfltent appnm="default entity" datatype=node ac=dfltent
clause="a5105" cn=doctype>
<when>
The DTD declared a default for undeclared entity names.  (Each such
undeclared name is associated with an entity using this node as
a pattern, but in certain cases, the system may not select the
same entity for each name.)

<propdef subnode rcsnm=elemtps appnm="element types" datatype=nmndlist
ac="elemtype rankstem" acnmprop="gi rankstem" cn=doctype clause="b2101" >
<desc>
Generic identifiers or rank stems used to name elements.

<propdef subnode rcsnm=parments appnm="parameter entities"
datatype=nmndlist ac=entity acnmprop=name cn=doctype
clause="b1004" >
<note>
Includes entities not explicitly declared, as discussed above in
the description of this class.

<classdef rcsnm=elemtype appnm="element type"
fullnm="element type definition" clause="b2000">

<propdef rcsnm=gi fullnm="generic identifier" datatype=string
strlex=name strnorm=general clause="78002">

<propdef rcsnm=omitstrt appnm="omit start tag" datatype=boolean
clause="b2202">
<desc>
True if start-tag minimization was "O".
<when>
Element type declaration specified omitted tag minimization.

<propdef rcsnm=omitend appnm="omit end tag" datatype=boolean
clause="b2203">
<desc>
True if end-tag minimization was "O".
<when>
Element type declaration specified omitted tag minimization.

<propdef rcsnm=contype appnm="content type" datatype=enum clause="b2300">

<enumdef rcsnm=cdata>
<desc>
Declared content of CDATA.

<enumdef rcsnm=rcdata>
<desc>
Declared content of RCDATA.

<enumdef rcsnm=empty>
<desc>
Declared content of EMPTY.

<enumdef rcsnm=any>
<desc>
Content model of ANY.

<enumdef rcsnm=modelgrp appnm="model group">
<desc>
Content model that is a model group.

<propdef subnode rcsnm=modelgrp appnm="model group" datatype=node
ac=modelgrp clause="b2402">
<when>
Element type declaration includes content model that has a model group.

<propdef rcsnm=excls appnm=exclusions datatype=strlist clause="b2521">
<when>
Contype is any or modelgrp.

<propdef rcsnm=incls appnm=inclusions datatype=strlist clause="b2511">
<when>
Contype is any or modelgrp.

<propdef subnode rcsnm=attdefs appnm="attribute defs"
fullnm="attribute definitions" datatype=nmndlist ac=attdef acnmprop=name
clause="b3003">

<classdef rcsnm=modelgrp appnm="model group" conprop=tokens
clause="b2402">
<desc>
A model group or a data tag group.
<note>
A data tag group is represented by a model group node with connector
equal to seq whose first token is an elemtk and whose second token
is a pcdatatk.

<propdef rcsnm=connect appnm=connector datatype=enum clause="b2410">
<desc>
Connector used within model group.

<enumdef rcsnm=and>
<enumdef rcsnm=or>
<enumdef rcsnm=seq>

<propdef rcsnm=occur appnm="occur indicator" fullnm="occurrence indicator"
datatype=enum clause="b2420">
<when>
Model group has an occurrence indicator.

<enumdef rcsnm=opt>
<enumdef rcsnm=plus>
<enumdef rcsnm=rep>

<propdef subnode rcsnm=tokens appnm="content tokens" datatype=nodelist
ac="modelgrp pcdatatk elemtk" clause="b2403">

<classdef rcsnm=pcdatatk appnm="pcdata token" clause="b2404">

<classdef rcsnm=elemtk appnm="element token" clause="b2405">

<propdef rcsnm=gi fullnm="generic identifier" datatype=string
strlex=name strnorm=general clause="b2405">

<propdef rcsnm=occur appnm="occur indicator" fullnm="occurrence indicator"
datatype=enum clause="b2405">
<when>
Element token has an occurrence indicator.

<enumdef rcsnm=opt>
<enumdef rcsnm=plus>
<enumdef rcsnm=rep>

<classdef rcsnm=attdef appnm="attribute def" fullnm="attribute definition"
conprop=dfltval clause="b3003">

<propdef rcsnm=name datatype=string strlex=name strnorm=general
clause="b3201">

<propdef rcsnm=dcltype appnm="decl value type"
fullnm="declared value prescription type" datatype=enum clause="b3301">

<enumdef rcsnm=cdata>
<enumdef rcsnm=entity>
<enumdef rcsnm=entities>
<enumdef rcsnm=id>
<enumdef rcsnm=idref>
<enumdef rcsnm=idrefs>
<enumdef rcsnm=name>
<enumdef rcsnm=names>
<enumdef rcsnm=nmtoken>
<enumdef rcsnm=nmtokens>
<enumdef rcsnm=number>
<enumdef rcsnm=numbers>
<enumdef rcsnm=nutoken>
<enumdef rcsnm=nutokens>
<enumdef rcsnm=notation>
<enumdef rcsnm=nmtkgrp appnm="name token group">
<desc>
The declared value was a name token group.

<propdef rcsnm=tokens datatype=strlist clause="b3301">
<desc>
A list of strings specifying the allowed tokens.
<when>
Declared value is a name token group or a notation.

<propdef rcsnm=dflttype appnm="default value type" datatype=enum
clause="b3401">

<enumdef rcsnm=value>
<desc>
The default value was an attribute value specification without #FIXED.

<enumdef rcsnm=fixed>
<enumdef rcsnm=required>
<enumdef rcsnm=current>
<enumdef rcsnm=conref>
<enumdef rcsnm=implied>

<propdef subnode rcsnm=dfltval appnm="default value" datatype=nodelist
ac="attvaltk datachar sdata intignch entstart entend" clause="b3409">
<when>
The default value includes an attribute value specification.

<propdef irefnode rcsnm=curgrp appnm="current group" datatype=nodelist
ac=attdef clause="b3001">
<desc>
All the attdef nodes that represent the same attribute definition
and which will therefore share the same current value.
<note>
There will be as many members as there were associated element types
in the attribute definition list declaration
that declared this attribute definition.
<when>
The default value type is CURRENT.

<propdef rcsnm=curattix appnm="current attribute index" datatype=integer
clause="b3001">
<desc>
The number of preceding attribute definitions in the document type
declaration with a default value type of CURRENT.
<note>
All the attdef nodes in the value of the curgrp property of an attdef
node will exhibit the same value for the curattix property.
Two attdef nodes will share the same current value just in case they
exhibit the same value for the curattix property.
<when>
The default value type is CURRENT.

<classdef rcsnm=dfltent appnm="default entity">

<propdef rcsnm=enttype appnm="entity type" datatype=enum clause="a5502">

<enumdef rcsnm=text fullnm="SGML text">
<enumdef rcsnm=cdata>
<enumdef rcsnm=sdata>
<enumdef rcsnm=ndata>
<enumdef rcsnm=subdoc appnm=subdocument>
<enumdef rcsnm=pi>

<propdef rcsnm=text datatype=string fullnm="replacement text"
clause="92101">
<when>
The default entity declaration declares an internal entity.

<propdef subnode rcsnm=extid appnm="external id"
fullnm="external identifier" datatype=node ac=extid clause="a1601">
<when>
The default entity declaration declares an external entity.

<propdef subnode rcsnm=atts appnm=attributes
datatype=nmndlist ac=attasgn acnmprop=name clause="b4120">
<desc>
A list of data attribute assignments, one for each declared attribute of the
entity in the order in which they were declared in the attribute
definition list declaration.
<when>
The default entity declaration declares an external entity.

<propdef rcsnm=notname appnm="notation name" datatype=string strlex=name
strnorm=general clause="79408">
<when>
The default entity declaration declares an external entity.

<propdef irefnode rcsnm=notation datatype=node ac=notation clause="b4001">
<when>
The default entity declaration declares an external entity.

</psmodule>

<!-- Prolog-related SDS classes and properties -->

<psmodule rcsnm=prlgsds fullnm="prolog SGML document string"
dependon=basesds1>

<propdef irefnode rcsnm=entdcl appnm="entity decl"
fullnm="entity declaration" datatype=node ac=entdcl cn=entity
clause="a5001">

<propdef irefnode rcsnm=entdcl appnm="entity decl"
fullnm="entity declaration" datatype=node ac=entdcl cn=dfltent
clause="a5001">

<propdef irefnode rcsnm=notdcl appnm="notation decl"
fullnm="notation declaration" datatype=node ac=notdcl cn=notation
clause="b4001">

<propdef irefnode rcsnm=attdldcl appnm="attribute def list decl"
fullnm="attribute definition list declaration" datatype=node ac=attdldcl
cn=notation clause="b4111">
<when>
The notation has an associated ATTLIST.

<propdef irefnode rcsnm=eltpdcl appnm="element type decl"
fullnm="element type declaration" datatype=node ac=eltpdcl cn=elemtype
clause="b2001">

<propdef irefnode rcsnm=attdldcl appnm="attribute def list decl"
fullnm="attribute definition list declaration"
datatype=node ac=attdldcl cn=elemtype clause="b3001">
<when>
The element type has an associated ATTLIST declaration.

<propdef irefnode rcsnm=doctpdcl fullnm="document type declaration"
datatype=node ac=doctpdcl cn=doctype clause="b1001">

<propdef irefnode rcsnm=attvalsp appnm="attribute value spec"
fullnm="attribute value specification"
datatype=node ac="attvalue literal" cn=attdef clause="79002">
<when>
Default value includes attribute value specification.

<classdef rcsnm=doctpdcl fullnm="document type declaration" mayadd
clause="b1000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="ssep comment name rname literal msstart msend msignch entstart entend
    comdcl pi eltpdcl entdcl notdcl attdldcl usemap srmapdcl"
    clause="b1001">
<note>
First child is gendelm for mdo delimiter; last is gendelm
for mdc delimiter. If there is an external entity, its entend node
will appear immediately before the gendelm for the dsc delimiter,
if there is one, and otherwise immediately before the gendelm node
for the mdc delimiter.

<propdef irefnode rcsnm=doctype appnm="document type" datatype=node
ac=doctype clause="b1008">

<propdef subnode rcsnm=entity datatype=node ac=entity clause="b1008">
<when>
Document type declaration includes external identifier.

<classdef rcsnm=attdldcl appnm="attribute def list decl"
fullnm="attribute definition list declaration" mayadd clause="b3000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="ssep comment entstart entend gendelm name nmtoken attvalue literal"
clause="b3001">

<propdef irefnode rcsnm=asseltps appnm="assoc element types"
fullnm="associated element types" datatype=nodelist ac=elemtype
clause="b3001">
<desc>
The element types to which the attribute definition list is applicable,
ordered as their names occur in the attribute definition
list declaration. This does not include undefined element types.

<propdef irefnode rcsnm=assnots appnm="assoc notations"
fullnm="associated notations" datatype=nodelist ac=notation clause="b3001">

<classdef rcsnm=eltpdcl appnm="element type decl"
fullnm="element type declaration" mayadd clause="b2000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="ssep comment entstart entend gendelm name number" clause="b2001">

<propdef irefnode rcsnm=elemtype appnm="element type"
fullnm="element type" datatype=node ac=elemtype clause="b2101">

<classdef rcsnm=entdcl appnm="entity decl" fullnm="entity declaration"
mayadd clause="a5000">
<desc>
An entity declaration that is not ignored.

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment gendelm name rname literal attvalue"
clause="a5001">

<propdef subnode rcsnm=entity datatype=node ac=entity clause="a5201">
<desc>
The entity declared by the entity declaration.

<classdef rcsnm=notdcl appnm="notation decl"
fullnm="notation declaration" mayadd clause="b4000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment literal name rname" clause="b4001">

<propdef irefnode rcsnm=notation datatype=node ac=notation clause="b4001">
<desc>
The declared notation.

</psmodule>

<!-- Document instance-related SDS classes and properties -->

<psmodule rcsnm=instsds0 fullnm="instance SGML document string level 0">

<propdef derived rcsnm=included datatype=boolean cn=element>
<desc>
True if and only if the element was an included subelement.

<propdef derived rcsnm=momitend appnm="must omit end tag" datatype=boolean
cn=element clause="b2209">
<desc>
True if and only if the end tag for the element had to be omitted
because the element had a declared content of empty or
an explicit content reference.

</psmodule>

<psmodule rcsnm=instsds1 fullnm="instance SGML document string level 1"
dependon="instsds0 basesds1">

<!-- Element -->

<propdef subnode optional rcsnm=starttag appnm="start tag" datatype=nodelist
ac="gendelm name ssep entstart entend literal attvalue" cn=element
clause="74001">
<note>
First child is gendelm for stago.
Nodes of type entstart and entend can occur only
in the document type specification.
<when>
A start-tag was specified for the element.

<propdef subnode optional rcsnm=endtag appnm="end tag" datatype=nodelist
ac="gendelm name ssep entstart entend ignmrkup" cn=element clause="75001">
<note>
First child is gendelm for etago or net. Nodes of type entstart,
entend, and ignmrkup can occur only in the document type specification.
<when>
An end-tag (not a data tag) was specified for the element.

<!-- Data character -->

<propdef rcsnm=movedre appnm="moved re" datatype=boolean cn=datachar
clause="7610a">
<desc>
True if and only if this character is an RE that was deemed to occur
at a point other than that at which it in fact occurred.
<note>
A node of type repos will indicate the position at which
it in fact occurred.

<propdef irefnode rcsnm=repos appnm="re position" datatype=node cn=datachar
ac=repos clause="7610a">
<desc>
The position at which this RE character in fact occurred.
<when>
This character is an RE that was deemed to occur at a point other
than that at which it in fact occurred.

<propdef subnode optional rcsnm=markup datatype=nodelist
ac="gendelm name ssep entstart entend refendre shortref" cn=extdata
clause="94401 94402">
<desc>
The markup of the entity reference.
<note>
ssep, entstart, and entend can occur only in a name group in a named
entity reference.

<classdef rcsnm=ignrs appnm="ignored rs" clause="76101">
<desc>
An RS that was ignored because of the rules in 7.6.1 of ISO 8879.

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" clause="95001">
<when>
The character was the replacement of a named character reference.

<classdef rcsnm=ignre appnm="ignored re" clause="76100">
<desc>
An RE in content that was ignored because of the rules in 7.6.1 of ISO
8879.
<note>
This occurs at the point where the RE originally occurred rather
than at the point it was determined that the RE should be ignored.

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" clause="95001">
<when>
The character was the replacement of a named character reference.

<classdef rcsnm=repos appnm="re position" clause="7610a">
<desc>
The original position of an RE that was deemed by the rules of clause
7.6.1 of ISO 8879 to occur at some point other than that at which it
in fact occurred.
<note>
For each node of type repos, there will be a node of type datachar
with a property movedre that is true.

<propdef irefnode rcsnm=re appnm="record end" datatype=node ac=datachar
clause="7610a">
<desc>
The character for which this is the repos.

</psmodule>

<!-- Datatag-related abstract classes and properties -->
<psmodule rcsnm=dtgabs fullnm="datatag abstract" dependon=baseabs>

<propdef derived rcsnm=datatag datatype=boolean cn=element clause="73201">
<desc>
True if and only if a data tag served as the end tag of the element.
<note>
The data characters comprising the data tag will follow the element in
the content of the containing element.

<propdef rcsnm=dtgtemps appnm="data tag templates" datatype=strlist
cn=elemtype clause="b2444">
<when>
The model group was a data tag group.

<propdef rcsnm=dtgptemp appnm="data tag padding template" datatype=string
cn=elemtype clause="b2445">
<when>
The model group was a data tag group whose data tag pattern included a
data tag padding template.

</psmodule>

<!-- Rank-related abstract classes and properties -->
<psmodule rcsnm=rankabs fullnm="rank abstract" dependon=prlgabs1>

<propdef derived rcsnm=ranksuff appnm="rank suffix" datatype=string
cn=elemtype clause="b2114">
<when>
The element type in the element type declaration included a rank suffix.

<propdef rcsnm=rankstem appnm="rank stem" datatype=string cn=elemtype
clause="b2113">
<when>
The element type in the element type declaration used a ranked element
or ranked group.

<propdef rcsnm=rankgrp appnm="rank group" datatype=strlist cn=elemtype
clause="b2112">
<desc>
The rank stems in the ranked group.
<when>
The element type declaration included a ranked group.

<classdef rcsnm=rankstem appnm="rank stem" clause="b2113">

<propdef rcsnm=stem datatype=string strlex=name strnorm=general
clause="b2113">
<desc>
Name of rank stem.

<propdef irefnode rcsnm=elemtps appnm="element types"
datatype=nodelist ac=elemtype clause="b2112">
<desc>
The element types for which this is a rank stem.

</psmodule>

<!-- Shortref-related abstract classes and properties -->
<psmodule rcsnm=srabs fullnm="shortref abstract" dependon=prlgabs0>

<propdef subnode rcsnm=emptymap appnm="empty short ref map"
fullnm="empty short reference map" datatype=node ac=srmap cn=sgmlcsts
clause="b6004">
<desc>
The empty short reference map.

<propdef subnode rcsnm=srmaps appnm="short ref maps"
fullnm="short reference maps" datatype=nmndlist ac=srmap acnmprop=name
cn=doctype clause="b1006">
<note>
Does not include #EMPTY map.

<propdef rcsnm=srmapnm appnm="short ref map name"
fullnm="short reference map name" datatype=string strlex=rniname
strnorm=general cn=elemtype clause="b6004">
<when>
The element type has an associated short reference map.

<propdef irefnode rcsnm=srmap appnm="short ref map"
fullnm="short reference map" datatype=node ac=srmap cn=elemtype
clause="b6101">
<when>
The element type has an associated short reference map.

<classdef rcsnm=srmap appnm="short ref map" fullnm="short reference map"
clause="b5000">

<propdef rcsnm=name datatype=string strlex=name strnorm=general clause="b5002">
<when>
Map is not the implicitly declared #EMPTY map.

<propdef subnode rcsnm=map datatype=nmndlist ac=srassoc acnmprop=shortref
clause="b5004">

<classdef rcsnm=srassoc appnm="short ref assoc"
fullnm="short reference association" clause="b5004">

<propdef rcsnm=shortref appnm="short ref"
fullnm="short reference delimiter" datatype=string strnorm=general
clause="b5004">

<propdef rcsnm=entname appnm="entity name" datatype=string strlex=name
strnorm=entity clause="b5004">

<propdef irefnode rcsnm=entity datatype=node ac=entity clause="b5001">

</psmodule>

<!-- Shortref-related SDS classes and properties -->
<psmodule rcsnm=srsds fullnm="shortref SGML document string"
dependon=basesds1>

<classdef rcsnm=usemap appnm="short ref use decl"
fullnm="short reference use declaration" conprop=markup clause="b6000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment gendelm name rname ignmrkup"
clause="b6001">
<note>
First child is gendelm for mdo delimiter; last is gendelm for mdc
delimiter.

<propdef irefnode rcsnm=asseltps appnm="assoc element types"
fullnm="associated element types" datatype=nodelist ac=elemtype
clause="a1501">
<note>
SGML specifies that this does not include element types which had
already been associated with a map.
<when>
The short reference use declaration includes an associated element
type.

<propdef irefnode rcsnm=srmap datatype=node ac=srmap clause="b6002">

<classdef rcsnm=shortref appnm="short ref"
fullnm="short reference delimiter" clause="e4620">

<propdef rcsnm=origdelm appnm="original delim"
fullnm="original delimiter" datatype=string clause="96601">
<desc>
The short reference delimiter as originally entered.

<propdef subnode optional rcsnm=namecref appnm="named char ref"
fullnm="named character reference" datatype=nodelist
ac="gendelm name refendre" clause="95001">
<when>
The first character of the delimiter was entered with a named
character reference.

<classdef rcsnm=srmapdcl appnm="short ref map decl"
fullnm="short reference mapping declaration" mayadd clause="b5000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment gendelm name rname literal"
clause="b5001">
<note>
First child is gendelm for mdo delimiter; last is gendelm for mdc
delimiter.

<propdef irefnode rcsnm=map datatype=node ac=srmap clause="b5001">

</psmodule>

<!-- Link-related abstract classes and properties -->
<psmodule rcsnm=linkabs fullnm="link abstract" dependon=prlgabs0>

<propdef subnode rcsnm=emptylks appnm="empty link set" datatype=node ac=linkset
cn=sgmlcsts clause="c3004">
<desc>
Empty link set used to disable current link set.

<propdef subnode optional rcsnm=simplelk appnm="simple link info"
fullnm="simple link information" datatype=nmndlist ac=simplelk
acnmprop=linkset cn=element clause="c1431">
<when>
Element is the document element and there are active simple link
processes.

<propdef irefnode rcsnm=linkatts appnm="link attributes"
datatype=nmndlist ac=attasgn acnmprop=name cn=element clause="c1402">
<desc>
A list of attribute assignments, one for each declared link attribute
of the element.
<note>
The origin of the link attributes will be the link rule.

<propdef derived rcsnm=rsltgi appnm="result gi"
fullnm="result element generic identifier" datatype=string strlex=name
strnorm=general cn=element clause="c2202">
<when>
There is an applicable link rule which is an explicit link rule whose
result element is not implied.

<propdef irefnode rcsnm=rsltelem appnm="result element type"
datatype=node ac=elemtype cn=element clause="c2202">
<when>
There is an applicable link rule which is an explicit link rule whose
result element is not implied.

<propdef irefnode rcsnm=rsltatts appnm="result attributes"
datatype=nmndlist ac=attasgn acnmprop=name cn=element clause="c2203">
<note>
The origin of the attributes will be the link rule.
<when>
There is an applicable link rule which is an explicit link rule whose
result element is not implied.

<propdef irefnode rcsnm=lksetinf appnm="link set info"
fullnm="link set information" datatype=nodelist ac=linkrule cn=element
clause="c2205">
<desc>
Link rules in the current link set whose source element type is implied.
<when>
There is an active explicit link process.

<propdef irefnode rcsnm=lksetinf appnm="link set info"
fullnm="link set information" datatype=nodelist ac=linkrule cn=datachar>
<desc>
Link rules in the current link set whose source element type is implied.
<when>
There is an active explicit link process and the character occurs
in content.

<classdef rcsnm=simplelk appnm="simple link info"
fullnm="simple link information" clause="c1430">

<propdef rcsnm=linktype appnm="link type" datatype=string strlex=name
strnorm=general clause="c1001">
<desc>
The link type name of the simple link process.

<propdef subnode rcsnm=atts appnm=attributes
datatype=nmndlist ac=attasgn acnmprop=name clause="c1402">

<classdef rcsnm=linktype appnm="link type">

<propdef rcsnm=name datatype=string strlex=name strnorm=general
clause="c1002">

<propdef rcsnm=active datatype=boolean>
<desc>
True if and only if link type is active.

<propdef rcsnm=ltkind appnm="link type kind"
fullnm="kind of link type" datatype=enum clause="c1001">
<enumdef rcsnm=simple>
<enumdef rcsnm=implicit>
<enumdef rcsnm=explicit>

<propdef rcsnm=srcname appnm="source document type name" datatype=string
strlex=name strnorm=general clause="c1302">

<propdef irefnode rcsnm=source appnm="source document type" datatype=node
ac=doctype clause="c1305 c1306">
<note>
For a simple link type, this will always be the base document type.

<propdef rcsnm=rsltname appnm="result document type name" datatype=string
strlex=name strnorm=general clause="c1303">

<propdef irefnode rcsnm=result appnm="result document type" datatype=node
ac=doctype clause="c1306">
<when>
The link type is an explicit link type.

<propdef subnode rcsnm=inilkset appnm="initial link set" datatype=node
ac=linkset clause="c2004">
<when>
The link type is not simple.

<propdef subnode rcsnm=idlkset appnm="id link set" datatype=node ac=linkset
clause="c2300">
<when>
The link type declaration subset includes an ID link set declaration.

<propdef subnode rcsnm=linksets appnm="link sets" datatype=nmndlist
ac=linkset acnmprop=name clause="c1401">
<note>
Does not include #INITIAL or #EMPTY or ID link set.

<classdef rcsnm=linkset appnm="link set" conprop=lkrules clause="c2000">

<propdef rcsnm=name datatype=string strlex=name strnorm=general
clause="c2003">
<when>
Link set is not #INITIAL nor #EMPTY nor the ID link set.

<propdef subnode rcsnm=lkrules appnm="link rules" datatype=nodelist
ac=linkrule clause="c2002">

<classdef rcsnm=linkrule appnm="link rule" clause="c2002">

<propdef rcsnm=assgis appnm="assoc gis"
fullnm="associated generic identifiers" datatype=strlist strlex=name
clause="c2101">
<desc>
The names of the associated element types.
<when>
The link rule is not an explicit link rule whose source element type
is implied.

<propdef irefnode rcsnm=asseltps appnm="assoc element types"
fullnm="associated element types" datatype=nodelist ac=elemtype
clause="c2101">
<when>
The link rule is not an explicit link rule whose source element type
is implied.

<propdef rcsnm=id fullnm="unique identifier" datatype=string strlex=name
strnorm=general clause="c2301">
<when>
Link rule occurs in ID link set declaration.

<propdef irefnode rcsnm=uselink datatype=node ac=linkset clause="c2104">
<when>
The link rule includes a USELINK parameter.

<propdef rcsnm=uselknm appnm="uselink name" datatype=string strlex=rniname
strnorm=general clause="c2104">
<desc>
The link set named by the USELINK parameter.
<when>
The link rule includes a USELINK parameter.

<propdef derived rcsnm=postlkrs appnm="postlink restore" datatype=boolean
clause="c2101">
<desc>
True if the link rule includes a POSTLINK parameter of #RESTORE.

<propdef irefnode rcsnm=postlkst appnm="postlink set" datatype=node
ac=linkset clause="c2101">
<when>
The link set specification did not specify #RESTORE.

<propdef rcsnm=postlknm datatype=string strlex=rniname strnorm=general
clause="c2101">
<desc>
The token specified for the link set specification following POSTLINK.
<when>
The link rule includes a POSTLINK parameter.

<propdef subnode rcsnm=linkatts appnm="link attributes"
datatype=nmndlist ac=attasgn acnmprop=name clause="c2102">
<when>
The link rule is not an explicit link rule whose source element type
is implied.

<propdef rcsnm=rsltgi appnm="result gi"
fullnm="result element generic identifier" datatype=string strlex=name
strnorm=general clause="c2202">
<when>
The link rule is an explicit link rule whose result element type is
not implied.

<propdef irefnode rcsnm=rsltelem appnm="result element type" datatype=node
ac=elemtype clause="c2202">
<when>
The link rule is an explicit link rule whose result element type is
not implied.

<propdef subnode rcsnm=rsltatts appnm="result attributes"
datatype=nmndlist ac=attasgn acnmprop=name clause="c2203">
<when>
The link rule is an explicit link rule whose result element type is
not implied.

</psmodule>

<!-- Link-related SDS classes and properties -->
<psmodule rcsnm=linksds fullnm="link SGML document string"
dependon=basesds1>

<propdef irefnode rcsnm=lksetdcl appnm="link set decl"
fullnm="link set declaration" datatype=node ac="lksetdcl idlkdcl"
cn=linkset clause="c2001">
<when>
Link set is not #EMPTY.

<propdef irefnode rcsnm=lktpdcl appnm="link type decl"
fullnm="link type declaration" datatype=node ac=lktpdcl cn=linktype
clause="c1001">

<classdef rcsnm=lktpdcl appnm="link type decl" fullnm="link type declaration"
mayadd clause="c1000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="ssep comment name rname literal msstart msignch msend
    entstart entend pi comdcl entdcl attdldcl lksetdcl idlkdcl"
    clause="c1001">

<propdef irefnode rcsnm=linktype appnm="link type" datatype=node
ac=linktype>

<propdef subnode rcsnm=entity datatype=node ac=entity clause="c1004">
<when>
Link type definition includes external identifier.

<classdef rcsnm=lksetdcl appnm="link set decl" fullnm="link set declaration"
mayadd clause="c2000">

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment gendelm name rname literal attvalue"
clause="c2001">

<propdef irefnode rcsnm=linkset appnm="link set" datatype=node
ac=linkset clause="c2001">

<classdef rcsnm=idlkdcl appnm="id link set decl"
fullnm="ID link set declaration" mayadd clause="c2300">

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment gendelm name rname literal attvalue"
clause="c2301">

<propdef irefnode rcsnm=linkset appnm="link set" datatype=node ac=linkset
clause="c2301">

<classdef rcsnm=uselink appnm="link set use decl"
fullnm="link set use declaration" conprop=markup clause="c3000">
<desc>
A link set use declaration that is not ignored.

<propdef subnode rcsnm=markup datatype=nodelist
ac="entstart entend ssep comment gendelm name rname ignmrkup"
clause="c3001">
<note>
First child is gendelm for mdo delimiter; last is gendelm
for mdc delimiter.

<propdef derived rcsnm=restore datatype=boolean clause="c3002">
<desc>
True if the link set specification specified #RESTORE.

<propdef irefnode rcsnm=linkset datatype=node ac=linkset clause="c3002">
<when>
The link set specification did not specify #RESTORE.

<propdef rcsnm=lksetnm datatype=string strlex=rniname strnorm=general
clause="c3002">
<desc>
The token specified for the link set specification.

<propdef rcsnm=linktpnm appnm="link type name" datatype=string
strlex=name strnorm=general clause="c3001">

<propdef irefnode rcsnm=linktype appnm="link type" datatype=node
ac=linktype clause="c3001">

</psmodule>

<!-- Subdoc-related abstract classes and properties -->
<psmodule rcsnm=subdcabs fullnm="subdoc abstract" dependon=baseabs>

<classdef rcsnm=subdoc appnm=subdocument fullnm="reference to subdocument">
<desc>
The result of referencing a subdocument entity.

<propdef rcsnm=entname appnm="entity name" datatype=string strlex=name
strnorm=entity clause="a5101">

<propdef irefnode rcsnm=entity datatype=node ac=entity clause="c5501">

</psmodule>

<!-- Subdoc-related SDS classes and properties -->
<psmodule rcsnm=subdcsds fullnm="subdoc SGML document string"
dependon="basesds1 subdabs">

<propdef subnode optional rcsnm=markup datatype=nodelist
ac="gendelm name ssep entstart entend refendre shortref" cn=subdoc
clause="94401">
<desc>
The markup of the entity reference.
<note>
ssep, entstart, and entend can occur only in a name group in a named
entity reference.

</psmodule>

<!-- Formal public identifier-related abstract classes and properties -->
<psmodule rcsnm=fpiabs fullnm="formal public identifier abstract"
dependon=baseabs>

<propdef subnode optional rcsnm=fpi appnm="formal public id"
fullnm="formal public identifier" datatype=node ac=fpi cn=extid
clause="a2001">
<when>
FORMAL YES was specified in the SGML declaration.

<classdef rcsnm=fpi appnm="formal public id" fullnm="formal public identifier"
clause="a2000">
<note>
The string which is the value of each of the string-valued properties
provided by this class is the minimum data specified as such in the
governing productions, without any accompanying "//", "-//", "+//"
or s characters.

<propdef rcsnm=ownertp appnm="owner type" datatype=enum clause="a2100">
<desc>
Type of owner identifier.

<enumdef rcsnm=iso>
<enumdef rcsnm=regist appnm=registered>
<enumdef rcsnm=unregist appnm=unregistered>

<propdef rcsnm=ownerid appnm="owner id" fullnm="owner identifier"
datatype=string strlex=mindata clause="a2100">

<propdef rcsnm=textclas appnm="text class" fullnm="public text class"
datatype=enum clause="a2210">
<enumdef rcsnm=capacity>
<enumdef rcsnm=charset>
<enumdef rcsnm=document>
<enumdef rcsnm=dtd>
<enumdef rcsnm=elements>
<enumdef rcsnm=entities>
<enumdef rcsnm=lpd>
<enumdef rcsnm=nonsgml>
<enumdef rcsnm=notation>
<enumdef rcsnm=shortref>
<enumdef rcsnm=subdoc>
<enumdef rcsnm=syntax>
<enumdef rcsnm=text>

<propdef rcsnm=unavail appnm=unavailable datatype=boolean clause="a2202">
<desc>
True if and only if unavailable text indicator was specified.

<propdef rcsnm=textdesc appnm="text description"
fullnm="public text description" datatype=string strlex=mindata clause="a2221">

<propdef rcsnm=textlang appnm="text language"
fullnm="public text language" datatype=string clause="a2231">
<when>
The text identifier included a public text language.

<propdef rcsnm=textdseq appnm="text designating sequence"
fullnm="public text designating sequence" datatype=string clause="a2241">
<when>
The text identifier included a public text designating sequence.

<propdef rcsnm=textdver appnm="text display version"
fullnm="public text display version" datatype=string clause="a2251">
<when>
The text identifier included a public text display version
(that is, there was a // following the public text language
or public text designating sequence).

</psmodule>

                 <!-- String Normalization Rules -->
<normdef rcsnm=general sd=SGML clause="d4506">
<desc>
Declared concrete syntax general namecase substitution.
<normdef rcsnm=entity  sd=SGML clause="d4506">
<desc>
Declared concrete syntax entity namecase substitution.
<normdef rcsnm=rcsgener sd=SGML clause="d4506">
<desc>
Reference concrete syntax general namecase substitution.

<datadef rcsnm=integer lextype=integer>
<datadef rcsnm=boolean lextype=boolean>
<datadef rcsnm=strlist fullnm="string list" listof=string lextype=strlist>
<datadef rcsnm=intlist fullnm="integer list" listof=int lextype=intlist>

                        <!-- Lexical Types -->
<!-- Datatypes -->
<lexdef ltn=boolean   norm model="[01]">
<lexdef ltn=integer  unorm model="'0'|marker">
<lexdef ltn=intlist  norm model="integer+">
<lexdef ltn=literal   spec sd=SGML clause="96107">
<desc>
Delimited literal as in declared concrete syntax. Character reference
can be used to enter delimiter string within literal, as in SGML
documents.
<lexdef ltn=strlist  norm model="literal,(',',literal)*">
<desc>
String list in so-called "comma-delimited ASCII" format supported by
data base and spreadsheet programs. The literals, exclusive of their
delimiters, shall conform to the applicable lexical type of the
individual strings.

<!-- Other lexical types -->
<lexdef ltn=mindata spec sd=SGML clause="a1702">
<desc>Minimum data.
<lexdef ltn=NAME spec sd=SGML clause="93001">
<desc>Name in declared concrete syntax.
<lexdef ltn=NMTOKEN spec sd=SGML clause="93004">
<desc>Name token in declared concrete syntax.
<lexdef ltn=number spec sd=SGML clause="93002">
<desc>Number in declared concrete syntax.
<lexdef ltn=nmchar spec sd=SGML clause="92103">
<desc>Name character in declared concrete syntax.
<lexdef ltn=ATTNAME nmsp provider=element property=atts sd=SGML clause="b3201">
<desc>Name of attribute of an element.
<lexdef ltn=attspecs spec sd=SGML clause="79001">
<desc>Attribute specification list.
<lexdef ltn=ENTITY nmsp provider=sgmldoc property=entities sd=SGML
clause="a5101">
<desc>General entity name.
<lexdef ltn=IDREF nmsp provider=sgmldoc property=elements sd=SGML
clause="79403">
<desc>ID of an element (specified in document).
<lexdef ltn=GI nmsp provider=dtd property=elemtps sd=SGML clause="78001">
<desc>Element type name (if dtd:effective is true).
<lexdef ltn=rniname spec sd=SGML>
<desc>A name optionally preceded by an RNI delimiter.


9.7 DSSSL SGML Grove Plan

A DSSSL specification has a single grove plan specified by the sgml-grove-plan architectural form in the DSSSL specification. See "SGML Grove Plan".