<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE erkka [<!ELEMENT erkka (configuration,drawing*)>
<!ELEMENT drawing ((object|join)*)>
<!ELEMENT object (id,field+)>
<!ELEMENT join (id,idref*,field*)>
<!ELEMENT idref (#PCDATA)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT field (#PCDATA)>
<!ATTLIST object name CDATA #REQUIRED>
<!ATTLIST idref name CDATA #REQUIRED>
<!ATTLIST field name CDATA #REQUIRED>
<!ATTLIST join name CDATA #REQUIRED>
<!ELEMENT configuration (selectionbox*,objectC+)>
<!ELEMENT selectionbox (choice+)>
<!ELEMENT choice (extra_data_field*)>
<!ELEMENT extra_data_field (#PCDATA)>
<!ATTLIST selectionbox name ID #REQUIRED>
<!ATTLIST selectionbox type (combobox|checkbox) #REQUIRED>
<!ATTLIST choice name CDATA #REQUIRED>
<!ATTLIST extra_data_field name CDATA #REQUIRED>
<!ATTLIST extra_data_field default CDATA #REQUIRED>
<!ELEMENT objectC (fieldC+,rules?)>
<!ELEMENT fieldC (#PCDATA)>
<!ELEMENT rules (rule+)>
<!--      element includes 1- rule-elements      --><!ELEMENT rule (#PCDATA)>
<!ATTLIST objectC color CDATA #IMPLIED>
<!ATTLIST objectC contains (Attribute) #IMPLIED>
<!ATTLIST objectC name ID #REQUIRED>
<!ATTLIST objectC type (Box|Doublebox|Diamond|Circle|Doublecircle|Line|BoxContainer) #REQUIRED>
<!ATTLIST objectC height CDATA #REQUIRED>
<!ATTLIST objectC width CDATA #REQUIRED>
<!ATTLIST fieldC name CDATA #REQUIRED>
<!ATTLIST fieldC select IDREF #IMPLIED>
<!ATTLIST rule friend IDREF #REQUIRED>
<!ATTLIST rule min CDATA #IMPLIED>
<!ATTLIST rule max CDATA #REQUIRED>
]>
<!-- DTD-file for ERKKA -->
<!-- This is configuration file which defines used cases in program.
At first definition of choices of combobox.
Here is defined also syntax of each tag.
If you use combobox you have to use follow syntax.
Combobox definition order you select one of choices.
This case is compulsory. -->
<!-- Then is defined used objects with data
which include itself or other objects -->
<erkka>
    <configuration>
        <selectionbox name="datatypes" type="combobox">
            <choice name="VARCHAR">
                <extra_data_field default="100" name="length"/>
            </choice>
            <choice name="CHAR">
                <extra_data_field default="10" name="length"/>
            </choice>
            <choice name="INTEGER"/>
            <choice name="NUMERIC">
                <extra_data_field default="5" name="length"/>
            </choice>
            <choice name="DATE"/>
            <choice name="TIME"/>
            <choice name="BOOLEAN"/>
        </selectionbox>
        <selectionbox name="compulsion" type="combobox">
            <choice name="NOT NULL"/>
            <choice name="NULL"/>
            <choice name="DEFAULT">
                <extra_data_field default="0" name="value"/>
            </choice>
        </selectionbox>
        <selectionbox name="boolean" type="checkbox">
            <choice name="true"/>
        </selectionbox>
        <selectionbox name="cardinality" type="combobox">
            <choice name=" "/>
            <choice name="1"/>
            <choice name="M"/>
        </selectionbox>
        <objectC height="50" name="Entity" type="Box" width="100">
            <fieldC name="name">Entity</fieldC>
            <fieldC name="comment"/>
            <rules>
                <rule friend="attribute" max="*"/>
                <rule friend="relationship" max="*"/>
            </rules>
        </objectC>
        <objectC height="50" name="Relationship" type="Diamond" width="100">
            <fieldC name="name">Relationship</fieldC>
            <fieldC name="comment"/>
            <rules>
                <!--Must join at least 2 entity -->
                <rule friend="attribute" max="*"/>
                <rule friend="entity" max="*"/>
            </rules>
        </objectC>
        <objectC height="40" name="Attribute" type="Circle" width="70">
            <fieldC name="name">Attribute</fieldC>
            <fieldC name="primarykey" select="boolean"/>
            <fieldC name="type" select="datatypes"/>
            <fieldC name="length">64</fieldC>
            <!-- Program creates
                     combobox in which datatypes
		     of choice of inner-elements
		     (look above datatypes-element) -->
            <fieldC name="compulsion" select="compulsion"/>
            <fieldC name="comment"/>
            <rules>
                <!--Rule tell where attribute can join -->
                <rule friend="relationship" max="1"/>
                <rule friend="entity" max="1"/>
            </rules>
        </objectC>
        <objectC height="4" name="Line" type="Line" width="4">
            <fieldC name="cardinality" select="cardinality"/>
            <fieldC name="comment"/>
        </objectC>
    </configuration>
    <drawing>
        <object name="Entity">
            <id>id5</id>
            <field name="coordinate_x">60</field>
            <field name="coordinate_y">117</field>
            <field name="name">Henkilö</field>
        </object>
        <object name="Attribute">
            <id>id7</id>
            <field name="coordinate_x">98</field>
            <field name="coordinate_y">21</field>
            <field name="name">Nimi</field>
            <field name="type">VARCHAR</field>
            <field name="length">100</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id9</id>
            <field name="coordinate_x">15</field>
            <field name="coordinate_y">61</field>
            <field name="name">HenkilöID</field>
            <field name="primarykey">true</field>
            <field name="type">INTEGER</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Relationship">
            <id>id1334</id>
            <field name="coordinate_x">60</field>
            <field name="coordinate_y">217</field>
            <field name="name">Tekee</field>
        </object>
        <object name="Entity">
            <id>id3572</id>
            <field name="coordinate_x">276</field>
            <field name="coordinate_y">335</field>
            <field name="name">Tavara</field>
        </object>
        <object name="Attribute">
            <id>id5244</id>
            <field name="coordinate_x">317</field>
            <field name="coordinate_y">407</field>
            <field name="name">Nimi</field>
            <field name="type">VARCHAR</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id5246</id>
            <field name="coordinate_x">218</field>
            <field name="coordinate_y">406</field>
            <field name="name">TavaraID</field>
            <field name="primarykey">true</field>
            <field name="type">INTEGER</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Entity">
            <id>id5278</id>
            <field name="coordinate_x">58</field>
            <field name="coordinate_y">332</field>
            <field name="name">Lainaus</field>
        </object>
        <object name="Attribute">
            <id>id5280</id>
            <field name="coordinate_x">4</field>
            <field name="coordinate_y">397</field>
            <field name="name">LainausID</field>
            <field name="type">INTEGER</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id5282</id>
            <field name="coordinate_x">65</field>
            <field name="coordinate_y">434</field>
            <field name="name">Lainausaika</field>
            <field name="type">TIME</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id5284</id>
            <field name="coordinate_x">114</field>
            <field name="coordinate_y">397</field>
            <field name="name">Palautusaika</field>
            <field name="type">TIME</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Relationship">
            <id>id5306</id>
            <field name="coordinate_x">162</field>
            <field name="coordinate_y">334</field>
            <field name="name">Lainataan</field>
        </object>
        <object name="Entity">
            <id>id5545</id>
            <field name="coordinate_x">273</field>
            <field name="coordinate_y">112</field>
            <field name="name">Tyyppi</field>
        </object>
        <object name="Relationship">
            <id>id5547</id>
            <field name="coordinate_x">269</field>
            <field name="coordinate_y">208</field>
            <field name="name">Kuuluu</field>
        </object>
        <object name="Attribute">
            <id>id6431</id>
            <field name="coordinate_x">216</field>
            <field name="coordinate_y">60</field>
            <field name="name">TyyppiID</field>
            <field name="primarykey">true</field>
            <field name="type">INTEGER</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id6433</id>
            <field name="coordinate_x">300</field>
            <field name="coordinate_y">18</field>
            <field name="name">TyyppiNimi</field>
            <field name="type">VARCHAR</field>
            <field name="length">64</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id6435</id>
            <idref name="idref1">id9</idref>
            <idref name="idref2">id5</idref>
        </join>
        <join name="normal">
            <id>id6437</id>
            <idref name="idref1">id7</idref>
            <idref name="idref2">id5</idref>
        </join>
        <join name="normal">
            <id>id6439</id>
            <idref name="idref1">id5</idref>
            <idref name="idref2">id1334</idref>
            <field name="cardinality">1</field>
        </join>
        <join name="normal">
            <id>id6441</id>
            <idref name="idref1">id3572</idref>
            <idref name="idref2">id5246</idref>
        </join>
        <join name="normal">
            <id>id6443</id>
            <idref name="idref1">id3572</idref>
            <idref name="idref2">id5244</idref>
        </join>
        <join name="normal">
            <id>id6445</id>
            <idref name="idref1">id5278</idref>
            <idref name="idref2">id5280</idref>
        </join>
        <join name="normal">
            <id>id6447</id>
            <idref name="idref1">id5278</idref>
            <idref name="idref2">id5282</idref>
        </join>
        <join name="normal">
            <id>id6449</id>
            <idref name="idref1">id5278</idref>
            <idref name="idref2">id5284</idref>
        </join>
        <join name="normal">
            <id>id6451</id>
            <idref name="idref1">id1334</idref>
            <idref name="idref2">id5278</idref>
            <field name="cardinality">M</field>
        </join>
        <join name="normal">
            <id>id6453</id>
            <idref name="idref1">id5278</idref>
            <idref name="idref2">id5306</idref>
            <field name="cardinality">M</field>
        </join>
        <join name="normal">
            <id>id6455</id>
            <idref name="idref1">id5306</idref>
            <idref name="idref2">id3572</idref>
            <field name="cardinality">M</field>
        </join>
        <join name="normal">
            <id>id6457</id>
            <idref name="idref1">id5547</idref>
            <idref name="idref2">id3572</idref>
            <field name="cardinality">M</field>
        </join>
        <join name="normal">
            <id>id6459</id>
            <idref name="idref1">id5545</idref>
            <idref name="idref2">id5547</idref>
            <field name="cardinality">1</field>
        </join>
        <join name="normal">
            <id>id6461</id>
            <idref name="idref1">id6431</idref>
            <idref name="idref2">id5545</idref>
        </join>
        <join name="normal">
            <id>id6463</id>
            <idref name="idref1">id6433</idref>
            <idref name="idref2">id5545</idref>
        </join>
    </drawing>
</erkka>
