<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:ref name="data.pointer"/>
<rng:zeroOrMore>
<rng:ref name="data.pointer"/>
</rng:zeroOrMore>
</rng:list>
</rng:attribute>
</rng:optional>
<rng:optional>
<rng:attribute name="adjFrom">
<rng:list>
<rng:ref name="data.pointer"/>
<rng:zeroOrMore>
<rng:ref name="data.pointer"/>
</rng:zeroOrMore>
</rng:list>
</rng:attribute>
</rng:optional>
<rng:optional>
<rng:attribute name="adj">
<rng:list>
<rng:ref name="data.pointer"/>
<rng:zeroOrMore>
<rng:ref name="data.pointer"/>
</rng:zeroOrMore>
</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, data.pointer* } }?,
attribute adjFrom { list { data.pointer, data.pointer* } }?,
attribute adj { list { data.pointer, data.pointer* } }?,
attribute inDegree { data.count }?,
attribute outDegree { data.count }?,
attribute degree { data.count }?,
( label, label? )?
}