<graph>

<graph> encodes a graph, which is a collection of nodes, and arcs which connect the nodes. 19.1 Graphs and Digraphs
Module nets — 19 Graphs, Networks, and Trees
In addition to global attributes In addition to global attributes
type describes the type of graph.
Status Recommended
Datatype

<rng:ref name="data.enumerated"/>
data.enumerated
Suggested values include:
undirected
undirected graph
directed
directed graph
transitionNetwork
a directed graph with distinguished initial and final nodes
transducer
a transition network with up to two labels on each arc
Note
If type is specified as undirected, then the distinction between the to and from attributes of the arc tag is neutralized. Also, the adj attribute, rather than the adjFrom and adjTo attributes, should be used to encode pointers to the ends of the arcs. If type is specified as directed (or any other value which implies directionality), then the adjFrom and adjTo attributes should be used, instead of the adj attribute.
order states the order of the graph, i.e., the number of its nodes.
Status Optional
Datatype

<rng:ref name="data.count"/>
data.count
Values A positive integer.
size states the size of the graph, i.e., the number of its arcs.
Status Optional
Datatype

<rng:ref name="data.count"/>
data.count
Values A non-negative integer.
Used by
May contain
Declaration

<rng:element name="graph">
 <rng:ref name="att.global.attributes"/>
 <rng:optional>
  <rng:attribute name="type">
   <rng:choice>
    <rng:value>undirected</rng:value>
    <rng:value>directed</rng:value>
    <rng:value>transitionNetwork</rng:value>
    <rng:value>transducer</rng:value>
    <rng:data type="Name"/>
   </rng:choice>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="order">
   <rng:ref name="data.count"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="size">
   <rng:ref name="data.count"/>
  </rng:attribute>
 </rng:optional>
 <rng:group>
  <rng:optional>
   <rng:ref name="label"/>
   <rng:zeroOrMore>
    <rng:ref name="model.global"/>
   </rng:zeroOrMore>
  </rng:optional>
  <rng:choice>
   <rng:group>
    <rng:oneOrMore>
     <rng:ref name="node"/>
     <rng:zeroOrMore>
      <rng:ref name="model.global"/>
     </rng:zeroOrMore>
    </rng:oneOrMore>
    <rng:zeroOrMore>
     <rng:ref name="arc"/>
     <rng:zeroOrMore>
      <rng:ref name="model.global"/>
     </rng:zeroOrMore>
    </rng:zeroOrMore>
   </rng:group>
   <rng:group>
    <rng:oneOrMore>
     <rng:ref name="arc"/>
     <rng:zeroOrMore>
      <rng:ref name="model.global"/>
     </rng:zeroOrMore>
    </rng:oneOrMore>
    <rng:oneOrMore>
     <rng:ref name="node"/>
     <rng:zeroOrMore>
      <rng:ref name="model.global"/>
     </rng:zeroOrMore>
    </rng:oneOrMore>
   </rng:group>
  </rng:choice>
 </rng:group>
</rng:element>
element graph
{
   att.global.attributes,
   attribute type
   {
      "undirected" | "directed" | "transitionNetwork" | "transducer" | xsd:Name
   }?,
   attribute order { data.count }?,
   attribute size { data.count }?,
   (
      ( label, model.global* )?,
      (
         ( ( node, model.global* )+, ( arc, model.global* )* )
       | ( ( arc, model.global* )+, ( node, model.global* )+ )
      )
   )
}
Example
<graph
  xml:id="cug1"
  type="undirected"
  order="5"
  size="4"
  rend="LABEL-PLACE bottom center NODE-FRAME none ARC solid line">

 <label>Airline Connections in Southwestern USA</label>
 <node xml:id="lax" degree="2">
  <label>LAX</label>
 </node>
 <node xml:id="lvg" degree="2">
  <label>LVG</label>
 </node>
 <node xml:id="phx" degree="3">
  <label>PHX</label>
 </node>
 <node xml:id="tus" degree="1">
  <label>TUS</label>
 </node>
 <node xml:id="cib" degree="0">
  <label>CIB</label>
 </node>
 <arc from="#lax" to="#lvg"/>
 <arc from="#lax" to="#phx"/>
 <arc from="#lvg" to="#phx"/>
 <arc from="#phx" to="#tus"/>
</graph>
Note
One or more nodes and zero or more arcs in any order.