<!ENTITY % format.dtd PUBLIC "-//Peace Technology, Inc.//dtd/com/peacetech/xmap/format.dtd//EN" "format.dtd">

<!ELEMENT xmap-schema (default-formats?,datasources,type+)>
<!ATTLIST xmap-schema
 default-datasource IDREF #IMPLIED
>

%format.dtd;

<!ELEMENT datasources (datasource+)>
<!ELEMENT datasource EMPTY>
<!ATTLIST datasource
 name ID #REQUIRED
 jndi-name CDATA #REQUIRED
 sql-dialect (oracle|sybase|mssql) #IMPLIED
 sql-dialect-class CDATA #IMPLIED
>

<!ELEMENT variant (case*)>
<!ATTLIST variant
 id NMTOKEN #REQUIRED
 expression CDATA #REQUIRED
>
<!ELEMENT case ((attribute*,element*,container*)+)>
<!ATTLIST case
 id CDATA #REQUIRED
>

<!ELEMENT type ((variant*,attribute*,element*,composite-element*,container*)*,security?)>
<!ATTLIST type
 name ID #IMPLIED
 base IDREF #IMPLIED
 datasource IDREF #IMPLIED
 abstract (true|false) "false"
 descr CDATA #IMPLIED
>

<!ELEMENT attribute (security?,dataset?,format?)>
<!ATTLIST attribute
 name NMTOKEN #REQUIRED
 cardinality (0-1|1) #IMPLIED
 column CDATA #IMPLIED
 expression CDATA #IMPLIED
 descr CDATA #IMPLIED
>

<!ELEMENT element (type?,security?,dataset?,format?)>
<!ATTLIST element
 name NMTOKEN #REQUIRED
 cardinality (0-1|1|0-N) #IMPLIED
 column CDATA #IMPLIED
 expression CDATA #IMPLIED
 type IDREF #IMPLIED
 output-cdata (true|false) "false"
 descr CDATA #IMPLIED
>

<!ELEMENT composite-element (element-instance+,security?,dataset?)>
<!ATTLIST composite-element
 name NMTOKEN #REQUIRED
 type IDREF #IMPLIED
 output-cdata (true|false) "false"
 descr CDATA #IMPLIED
>

<!ELEMENT element-instance (type?,dataset?,format?)>
<!ATTLIST element-instance
 cardinality (0-1|1|0-N) #IMPLIED
 column CDATA #IMPLIED
 expression CDATA #IMPLIED
>

<!ELEMENT container (type?,security?,dataset?)>
<!ATTLIST container
 name NMTOKEN #REQUIRED
 type IDREF #IMPLIED
 cardinality (0-1|1) #IMPLIED
>

<!ELEMENT security (roles?,callback?)>
<!ELEMENT roles (role*)>
<!ELEMENT role (#PCDATA)>
<!ELEMENT callback (parameter*)>
<!ATTLIST callback
 name CDATA #IMPLIED
>

<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
 name CDATA #REQUIRED
 expression CDATA #REQUIRED
>

<!ELEMENT dataset (sql-opt?,link)>
<!ATTLIST dataset
 name CDATA #REQUIRED
 datasource IDREF #IMPLIED
>
<!ELEMENT sql-opt EMPTY>
<!ATTLIST sql-opt
 distinct (true|false) "false"
 group-by CDATA #IMPLIED
 order-by CDATA #IMPLIED
>
<!ELEMENT link (key+ | sql-where)>
<!ATTLIST link
 method (join|subquery|cache) #REQUIRED
>
<!ELEMENT key EMPTY>
<!ATTLIST key
 column CDATA #REQUIRED
 parameter CDATA #REQUIRED
>
<!ELEMENT sql-where (#PCDATA)>

