<?xml version="1.0" encoding="UTF-8"?>
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
             xmlns:a="http://relaxng.org/ns/annotation/1.0"
             datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <!-- Handling of element overloading when inheriting from a base
         template
    -->
    <rng:include href="common.rng"/>
    <rng:define name="diagram">
        <rng:element name="diagram">
            <rng:optional><rng:attribute name="create" /></rng:optional>
            <rng:optional><rng:attribute name="string"/></rng:optional>
            <rng:ref name="node"/>
            <rng:ref name="arrow"/>
            <rng:zeroOrMore>
                <rng:ref name="label"/>
            </rng:zeroOrMore>
        </rng:element>
    </rng:define>

    <rng:define name="node">
        <rng:element name="node">
            <rng:attribute name="object"/>
            <rng:optional><rng:attribute name="shape"/></rng:optional>
            <rng:optional><rng:attribute name="bgcolor"/></rng:optional>
            <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
            <rng:zeroOrMore>
                <rng:ref name="field"/>
            </rng:zeroOrMore>
        </rng:element>
    </rng:define>

    <rng:define name="arrow">
        <rng:element name="arrow">
            <rng:attribute name="object" />
            <rng:attribute name="source" />
            <rng:attribute name="destination" />
            <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
            <rng:optional><rng:attribute name="label"/></rng:optional>
            <rng:zeroOrMore>
                <rng:ref name="field"/>
            </rng:zeroOrMore>
        </rng:element>
    </rng:define>
    <rng:start>
        <rng:choice>
            <rng:ref name="diagram" />
        </rng:choice>
    </rng:start>
</rng:grammar>
