<?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
	type	(combobox|checkbox)  #REQUIRED>
<!ATTLIST choice 		
	name 	CDATA 	#REQUIRED>
<!ATTLIST extra_data_field
	name	 CDATA 	#REQUIRED
	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
	contains (Attribute) #IMPLIED
	name 	ID 	#REQUIRED
        type 	(Box|Doublebox|Diamond|Circle|Doublecircle|Line|BoxContainer) #REQUIRED
	height	CDATA	#REQUIRED
	width	CDATA	#REQUIRED>
<!ATTLIST fieldC 
	name	CDATA	#REQUIRED
	select 	IDREF	#IMPLIED>
<!ATTLIST rule 		
	friend 	IDREF 	#REQUIRED
        min 	CDATA	#IMPLIED
	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="20" name="length"/>
            </choice>
            <choice name="CHAR">
                <extra_data_field default="20" name="length"/>
            </choice>
            <choice name="INTEGER"/>
            <choice name="NUMERIC">
                <extra_data_field default="5,2" name="length"/>
            </choice>
            <choice name="DATE"/>
            <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">Laitos</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">Opiskelee</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">Nimi</fieldC>
            <fieldC name="primarykey" select="boolean"/>
            <fieldC name="index" select="boolean"/>
            <fieldC name="type" select="datatypes"/>
            <fieldC name="length">20</fieldC>
            <!-- Program creates 
                     combobox in which datatypes 
		     of choice of inner-elements 
		     (look above datatypes-element) -->
            <fieldC name="range"/>
            <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">143</field>
            <field name="coordinate_y">54</field>
            <field name="name">Resepti</field>
        </object>
        <object name="Entity">
            <id>id7</id>
            <field name="coordinate_x">408</field>
            <field name="coordinate_y">55</field>
            <field name="name">Ruokalaji</field>
        </object>
        <object name="Entity">
            <id>id9</id>
            <field name="coordinate_x">419</field>
            <field name="coordinate_y">200</field>
            <field name="name">Aine</field>
        </object>
        <object name="Entity">
            <id>id13</id>
            <field name="coordinate_x">298</field>
            <field name="coordinate_y">307</field>
            <field name="name">Yksikkö</field>
        </object>
        <object name="Relationship">
            <id>id19</id>
            <field name="coordinate_x">285</field>
            <field name="coordinate_y">57</field>
            <field name="name">Kuuluu</field>
        </object>
        <object name="Relationship">
            <id>id21</id>
            <field name="coordinate_x">297</field>
            <field name="coordinate_y">202</field>
            <field name="name">Liittyy</field>
        </object>
        <join name="normal">
            <id>id25</id>
            <idref name="idref1">id5</idref>
            <idref name="idref2">id19</idref>
        </join>
        <join name="normal">
            <id>id39</id>
            <idref name="idref1">id19</idref>
            <idref name="idref2">id7</idref>
        </join>
        <join name="normal">
            <id>id83</id>
            <idref name="idref1">id5</idref>
            <idref name="idref2">id21</idref>
        </join>
        <join name="normal">
            <id>id129</id>
            <idref name="idref1">id21</idref>
            <idref name="idref2">id9</idref>
        </join>
        <join name="normal">
            <id>id481</id>
            <idref name="idref1">id21</idref>
            <idref name="idref2">id13</idref>
        </join>
        <object name="Attribute">
            <id>id593</id>
            <field name="coordinate_x">9</field>
            <field name="coordinate_y">7</field>
            <field name="name">Nimi</field>
            <field name="primarykey">true</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id599</id>
            <idref name="idref1">id593</idref>
            <idref name="idref2">id5</idref>
        </join>
        <object name="Attribute">
            <id>id883</id>
            <field name="coordinate_x">532</field>
            <field name="coordinate_y">26</field>
            <field name="name">Nimi</field>
            <field name="primarykey">true</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id885</id>
            <field name="coordinate_x">299</field>
            <field name="coordinate_y">144</field>
            <field name="name">Määrä</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id891</id>
            <idref name="idref1">id883</idref>
            <idref name="idref2">id7</idref>
        </join>
        <object name="Entity">
            <id>id1221</id>
            <field name="coordinate_x">125</field>
            <field name="coordinate_y">241</field>
            <field name="name">Ohje</field>
        </object>
        <join name="normal">
            <id>id1779</id>
            <idref name="idref1">id885</idref>
            <idref name="idref2">id21</idref>
        </join>
        <object name="Relationship">
            <id>id4061</id>
            <field name="coordinate_x">124</field>
            <field name="coordinate_y">156</field>
            <field name="name">Tehdään</field>
        </object>
        <join name="normal">
            <id>id4065</id>
            <idref name="idref1">id5</idref>
            <idref name="idref2">id4061</idref>
        </join>
        <join name="normal">
            <id>id4773</id>
            <idref name="idref1">id4061</idref>
            <idref name="idref2">id1221</idref>
        </join>
        <object name="Attribute">
            <id>id5593</id>
            <field name="coordinate_x">532</field>
            <field name="coordinate_y">77</field>
            <field name="name">Kuvaus</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id5595</id>
            <idref name="idref1">id7</idref>
            <idref name="idref2">id5593</idref>
        </join>
        <object name="Attribute">
            <id>id5789</id>
            <field name="coordinate_x">24</field>
            <field name="coordinate_y">54</field>
            <field name="name">Kuvaus</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id5793</id>
            <idref name="idref1">id5789</idref>
            <idref name="idref2">id5</idref>
        </join>
        <object name="Attribute">
            <id>id6991</id>
            <field name="coordinate_x">529</field>
            <field name="coordinate_y">169</field>
            <field name="name">Nimi</field>
            <field name="primarykey">true</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id6993</id>
            <field name="coordinate_x">533</field>
            <field name="coordinate_y">223</field>
            <field name="name">Kuvaus</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id6995</id>
            <idref name="idref1">id9</idref>
            <idref name="idref2">id6991</idref>
        </join>
        <join name="normal">
            <id>id7263</id>
            <idref name="idref1">id9</idref>
            <idref name="idref2">id6993</idref>
        </join>
        <object name="Attribute">
            <id>id7937</id>
            <field name="coordinate_x">428</field>
            <field name="coordinate_y">307</field>
            <field name="name">Nimi</field>
            <field name="primarykey">true</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id7939</id>
            <idref name="idref1">id13</idref>
            <idref name="idref2">id7937</idref>
        </join>
        <object name="Attribute">
            <id>id8843</id>
            <field name="coordinate_x">79</field>
            <field name="coordinate_y">330</field>
            <field name="name">Vaihenro</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <object name="Attribute">
            <id>id8845</id>
            <field name="coordinate_x">169</field>
            <field name="coordinate_y">333</field>
            <field name="name">Ohjeteksti</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id8849</id>
            <idref name="idref1">id1221</idref>
            <idref name="idref2">id8843</idref>
        </join>
        <join name="normal">
            <id>id9685</id>
            <idref name="idref1">id1221</idref>
            <idref name="idref2">id8845</idref>
        </join>
        <object name="Attribute">
            <id>id10015</id>
            <field name="coordinate_x">112</field>
            <field name="coordinate_y">2</field>
            <field name="name">Henkilömäärä</field>
            <field name="type">VARCHAR</field>
            <field name="length">20</field>
            <field name="compulsion">NOT NULL</field>
        </object>
        <join name="normal">
            <id>id10017</id>
            <idref name="idref1">id10015</idref>
            <idref name="idref2">id5</idref>
        </join>
    </drawing>
</erkka>
