<tree>

<tree> encodes a tree, which is made up of a root, internal nodes, leaves, and arcs from root to leaves. 19.2 Trees
Modulenets — 19 Graphs, Networks, and Trees
AttributesIn addition to global attributes
aritygives the maximum number of children of the root and internal nodes of the tree.
Status Optional
Datatype

<rng:ref name="data.count"/>
data.count
Values A nonnegative integer.
ord(ordered) indicates whether or not the tree is ordered, or if it is partially ordered.
Status Required
Legal values are:
true
indicates that all of the branching nodes of the tree are ordered. [Default]
partial
indicates that some of the branching nodes of the tree are ordered and some are unordered.
false
indicates that all of the branching nodes of the tree are unordered.
ordergives the order of the tree, i.e., the number of its nodes.
Status Optional
Datatype

<rng:ref name="data.count"/>
data.count
Values A nonnegative integer.
Note
The size of a tree is always one less than its order, hence there is no need for both a size and order attribute.
Used by
May contain
core: label
nets: iNode leaf root
Declaration

<rng:element name="tree">
<rng:ref name="att.global.attributes"/>
<rng:optional>
 <rng:attribute name="arity">
  <rng:ref name="data.count"/>
 </rng:attribute>
</rng:optional>
<rng:attribute name="orda:defaultValue="true">
 <rng:choice>
  <rng:value>true</rng:value>
  <rng:value>partial</rng:value>
  <rng:value>false</rng:value>
 </rng:choice>
</rng:attribute>
<rng:optional>
 <rng:attribute name="order">
  <rng:ref name="data.count"/>
 </rng:attribute>
</rng:optional>
<rng:group>
 <rng:optional>
  <rng:ref name="label"/>
 </rng:optional>
 <rng:group>
  <rng:zeroOrMore>
   <rng:choice>
    <rng:ref name="leaf"/>
    <rng:ref name="iNode"/>
   </rng:choice>
  </rng:zeroOrMore>
  <rng:ref name="root"/>
  <rng:zeroOrMore>
   <rng:choice>
    <rng:ref name="leaf"/>
    <rng:ref name="iNode"/>
   </rng:choice>
  </rng:zeroOrMore>
 </rng:group>
</rng:group>
</rng:element>
element tree
{
   att.global.attributes,
   attribute arity { data.count }?,
   attribute ord { "true" | "partial" | "false" },
   attribute order { data.count }?,
   ( label?, ( ( leaf | iNode )*, root, ( leaf | iNode )* ) )
}
Example
<tree
  n="ex2"
  arity="2"
  ord="partial"
  order="13">

 <root xml:id="G-div1children="#G-plu1 #G-exp1ord="true">
  <label>/</label>
 </root>
 <iNode
   xml:id="G-plu1"
   children="#G-exp2 #G-exp3"
   parent="#G-div1"
   ord="false">

  <label>+</label>
 </iNode>
 <iNode
   xml:id="G-exp1"
   children="#G-plu2 #G-num2.3"
   parent="#G-div1"
   ord="true">

  <label>**</label>
 </iNode>
 <iNode
   xml:id="G-exp2"
   children="#G-vara1 #G-num2.1"
   parent="#G-plu1"
   ord="true">

  <label>**</label>
 </iNode>
 <iNode
   xml:id="G-exp3"
   children="#G-varb1 #G-num2.2"
   parent="#G-plu1"
   ord="true">

  <label>**</label>
 </iNode>
 <iNode
   xml:id="G-plu2"
   children="#G-vara2 #G-varb2"
   parent="#G-exp1"
   ord="false">

  <label>+</label>
 </iNode>
 <leaf xml:id="G-vara1parent="#G-exp2">
  <label>a</label>
 </leaf>
 <leaf xml:id="G-num2.1parent="#G-exp2">
  <label>2</label>
 </leaf>
 <leaf xml:id="G-varb1parent="#G-exp3">
  <label>b</label>
 </leaf>
 <leaf xml:id="G-num2.2parent="#G-exp3">
  <label>2</label>
 </leaf>
 <leaf xml:id="G-vara2parent="#G-plu2">
  <label>a</label>
 </leaf>
 <leaf xml:id="G-varb2parent="#G-plu2">
  <label>b</label>
 </leaf>
 <leaf xml:id="G-num2.3parent="#G-exp1">
  <label>2</label>
 </leaf>
</tree>
Note
A root, and zero or more internal nodes and leaves, but if there is an internal node, there must also be at least one leaf.