The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<model name="testmodel" package="org.intermine.model.testmodel">
    <class name="Broke" is-interface="true">
        <attribute name="debt" type="int"/>
        <reference name="bank" referenced-type="Bank" reverse-reference="debtors"/>
    </class>
    <class name="Thing" is-interface="true"></class>
    <class name="Employable" extends="Thing" is-interface="true">
        <attribute name="name" type="java.lang.String"/>
    </class>
    <class name="HasAddress" is-interface="true">
        <reference name="address" referenced-type="Address"/>
    </class>
    <class name="HasSecretarys" is-interface="true">
        <collection name="secretarys" referenced-type="Secretary"/>
    </class>
    <class name="Contractor" extends="Employable ImportantPerson" is-interface="false">
        <reference name="personalAddress" referenced-type="Address"/>
        <reference name="businessAddress" referenced-type="Address"/>
        <collection name="companys" referenced-type="Company" reverse-reference="contractors"/>
        <collection name="oldComs" referenced-type="Company" reverse-reference="oldContracts"/>
    </class>
    <class name="Manager" extends="Employee ImportantPerson" is-interface="false">
        <attribute name="title" type="java.lang.String"/>
    </class>
    <class name="Employee" extends="Employable HasAddress" is-interface="false">
        <attribute name="fullTime" type="boolean"/>
        <attribute name="age" type="int"/>
        <attribute name="end" type="java.lang.String"/>
        <reference name="department" referenced-type="Department" reverse-reference="employees"/>
        <reference name="departmentThatRejectedMe" referenced-type="Department" reverse-reference="rejectedEmployee"/>
        <collection name="simpleObjects" referenced-type="SimpleObject" reverse-reference="employee"/>
    </class>
    <class name="Department" extends="RandomInterface" is-interface="false">
        <attribute name="name" type="java.lang.String"/>
        <reference name="company" referenced-type="Company" reverse-reference="departments"/>
        <reference name="manager" referenced-type="Manager"/>
        <collection name="employees" referenced-type="Employee" reverse-reference="department"/>
        <collection name="rejectedEmployees" referenced-type="Employee" reverse-reference="departmentThatRejectedMe"/>
    </class>
    <class name="Company" extends="RandomInterface HasAddress HasSecretarys" is-interface="true">
        <attribute name="name" type="java.lang.String"/>
        <attribute name="vatNumber" type="int"/>
        <reference name="CEO" referenced-type="CEO" reverse-reference="company"/>
        <collection name="departments" referenced-type="Department" reverse-reference="company"/>
        <collection name="contractors" referenced-type="Contractor" reverse-reference="companys"/>
        <collection name="oldContracts" referenced-type="Contractor" reverse-reference="oldComs"/>
    </class>
    <class name="Address" extends="Thing" is-interface="false">
        <attribute name="address" type="java.lang.String"/>
    </class>
    <class name="RandomInterface" is-interface="true"></class>
    <class name="CEO" extends="Manager HasSecretarys" is-interface="false">
        <attribute name="salary" type="int"/>
        <reference name="company" referenced-type="Company" reverse-reference="CEO"/>
    </class>
    <class name="ImportantPerson" is-interface="true">
        <attribute name="seniority" type="java.lang.Integer"/>
    </class>
    <class name="Secretary" is-interface="false">
        <attribute name="name" type="java.lang.String"/>
    </class>
    <class name="Types" is-interface="false">
        <attribute name="name" type="java.lang.String"/>
        <attribute name="booleanType" type="boolean"/>
        <attribute name="floatType" type="float"/>
        <attribute name="doubleType" type="double"/>
        <attribute name="shortType" type="short"/>
        <attribute name="intType" type="int"/>
        <attribute name="longType" type="long"/>
        <attribute name="booleanObjType" type="java.lang.Boolean"/>
        <attribute name="floatObjType" type="java.lang.Float"/>
        <attribute name="doubleObjType" type="java.lang.Double"/>
        <attribute name="shortObjType" type="java.lang.Short"/>
        <attribute name="intObjType" type="java.lang.Integer"/>
        <attribute name="longObjType" type="java.lang.Long"/>
        <attribute name="bigDecimalObjType" type="java.math.BigDecimal"/>
        <attribute name="dateObjType" type="java.util.Date"/>
        <attribute name="stringObjType" type="java.lang.String"/>
    </class>
    <class name="Bank" is-interface="false">
        <attribute name="name" type="java.lang.String"/>
        <collection name="debtors" referenced-type="Broke" reverse-reference="bank"/>
    </class>
    <class name="SimpleObject" is-interface="false" extends="java.lang.Object">
        <attribute name="name" type="java.lang.String"/>
        <reference name="employee" referenced-type="Employee" reverse-reference="simpleObjects"/>
    </class>
    <class name="Range" is-interface="false">
        <attribute name="rangeStart" type="int"/>
        <attribute name="rangeEnd" type="int"/>
        <attribute name="name" type="java.lang.String"/>
        <reference name="parent" referenced-type="Company"/>
    </class>
</model>