<rng:element name="node">
 <rng:ref name="att.global.attributes"/>
 <rng:optional>
  <rng:attribute name="value">
   <rng:ref name="data.pointer"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="type">
   <rng:choice>
    <rng:value>initial</rng:value>
    <rng:value>final</rng:value>
    <rng:data type="Name"/>
   </rng:choice>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="adjTo">
   <rng:list>
    <rng:oneOrMore>
     <rng:ref name="data.pointer"/>
    </rng:oneOrMore>
   </rng:list>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="adjFrom">
   <rng:list>
    <rng:oneOrMore>
     <rng:ref name="data.pointer"/>
    </rng:oneOrMore>
   </rng:list>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="adj">
   <rng:list>
    <rng:oneOrMore>
     <rng:ref name="data.pointer"/>
    </rng:oneOrMore>
   </rng:list>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="inDegree">
   <rng:ref name="data.count"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="outDegree">
   <rng:ref name="data.count"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="degree">
   <rng:ref name="data.count"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:ref name="label"/>
  <rng:optional>
   <rng:ref name="label"/>
  </rng:optional>
 </rng:optional>
</rng:element>
element node
{
   att.global.attributes,
   attribute value { data.pointer }?,
   attribute type { "initial" | "final" | xsd:Name }?,
   attribute adjTo { list { data.pointer+ } }?,
   attribute adjFrom { list { data.pointer+ } }?,
   attribute adj { list { data.pointer+ } }?,
   attribute inDegree { data.count }?,
   attribute outDegree { data.count }?,
   attribute degree { data.count }?,
   ( label, label? )?
}