<?xml version='1.0' encoding='utf-8'?>

<!-- DTD per file XML di progetto -->

<!ELEMENT project (import-prj, file-XML*, divide?, divide-multifiles?, before-import?, after-import?, user-parameters?, controls?)>

<!-- Dichiarazione prefisso applicazione, nome progetto, descrizione import e se il progetto -->
<!-- viene laciato periodicamente o meno -->
<!ELEMENT import-prj EMPTY>
  <!ATTLIST import-prj prefix CDATA #REQUIRED>
  <!ATTLIST import-prj name CDATA #REQUIRED>
  <!ATTLIST import-prj description-import CDATA #REQUIRED>
  <!ATTLIST import-prj note CDATA #IMPLIED>
  <!ATTLIST import-prj wkf-class CDATA #IMPLIED>
  <!ATTLIST import-prj selection-file (true|false) #IMPLIED>
  <!ATTLIST import-prj import-block (true|false) #IMPLIED>
  <!ATTLIST import-prj block-size CDATA #IMPLIED>
  <!ATTLIST import-prj table-block-size CDATA #IMPLIED>
  <!ATTLIST import-prj min-block-size CDATA #IMPLIED>
  <!ATTLIST import-prj id-object-prefix-in-block CDATA #IMPLIED>
  <!ATTLIST import-prj auto-selection-files (true|false) #IMPLIED>
  <!ATTLIST import-prj deprecated (true|false) #IMPLIED>
  <!ATTLIST import-prj date-modify CDATA #IMPLIED>

<!-- Dichiarazione file XML che devono essere chiamati per l'importazione -->
<!ELEMENT file-XML EMPTY>
  <!ATTLIST file-XML name CDATA #REQUIRED>

<!-- Definisce la classe per eseguire i controlli prima di iniziare l'importazione  -->
<!ELEMENT before-import (#PCDATA)>

<!-- Definisce la classe per eseguire i controlli finita l'importazione  -->
<!ELEMENT after-import (#PCDATA)>

<!-- Definisce la classe per dividere il file di importazione -->
<!ELEMENT divide (#PCDATA)>

<!-- Definisce la classe per dividere piĆ¹ files di importazione -->
<!ELEMENT divide-multifiles (divide-file*)>
  <!ATTLIST divide-multifiles class-name CDATA #REQUIRED>

<!ELEMENT divide-file EMPTY>
  <!ATTLIST divide-file name-file-import CDATA #IMPLIED>
  <!ATTLIST divide-file description-file-import CDATA #REQUIRED>
  <!ATTLIST divide-file mandatory-file-import (true|false) #IMPLIED>


<!ELEMENT user-parameters (#PCDATA)>

<!-- Controlli semantici tra piu tabelle e controlli di esistenza -->
<!ELEMENT controls (control-exist*, query*)>

<!-- Controlli di esistenza -->
<!ELEMENT control-exist (tables*, temp-join?, final-join?, filter?)>

<!ELEMENT tables (table*)>

<!ELEMENT table (column-exist|column-compare)+>
  <!ATTLIST table temp CDATA #REQUIRED>
  <!ATTLIST table final CDATA #REQUIRED>

<!-- DEPRECATO column-exist e sostituito da column-compare -->
<!ELEMENT column-exist (#PCDATA)>

<!ELEMENT column-compare EMPTY>
  <!ATTLIST column-compare name CDATA #REQUIRED>
  <!ATTLIST column-compare nullable (true|false) #REQUIRED>

<!ELEMENT temp-join (#PCDATA)>
<!ELEMENT final-join (#PCDATA)>
<!ELEMENT filter (#PCDATA)>

<!-- Controlli semantici tra piu tabelle -->

<!ELEMENT query (columns*, from, where?)>
  <!ATTLIST query name CDATA #REQUIRED>
  <!ATTLIST query description CDATA #REQUIRED>
  <!ATTLIST query mandatory (true|false) #REQUIRED>

<!ELEMENT columns (column*)>

<!ELEMENT column EMPTY>
  <!ATTLIST column name CDATA #REQUIRED>
  <!ATTLIST column alias CDATA #REQUIRED>
  <!ATTLIST column type CDATA #REQUIRED>
  <!ATTLIST column update (true|false) #REQUIRED>

<!ELEMENT from (#PCDATA)>
<!ELEMENT where (#PCDATA)>