<!--
    Propel XML database schema DTD
    $Id: database.dtd,v 1.7 2005/03/30 11:38:18 hlellelid Exp $

    This is based very closely on the schema DTD for Torque, but
    some differences do exist.
-->

<!--

defaultPhpNamingMethod determines how a table or column name,
from the name attribute in the xml database file, is converted to a
PHP class or method name.

     nochange   - indicates not change is performed.
     underscore - Underscores are removed, First letter is
              capitalized, first letter after an underscore
              is capitalized, the rest of the letters are
              converted to lowercase.
     phpname   - same as underscore, but no letters are converted
              to lowercase.
-->

<!ELEMENT database (external-schema*, table+)>
<!ATTLIST database
  name CDATA #IMPLIED
  defaultIdMethod (native|none) "none"
  defaultTranslateMethode CDATA #IMPLIED
  package CDATA #IMPLIED
  baseClass CDATA #IMPLIED
  basePeer CDATA #IMPLIED
  defaultPhpNamingMethod (nochange|underscore|phpname) "underscore"
  heavyIndexing (true|false) "false"
>

<!ELEMENT external-schema EMPTY>
<!ATTLIST external-schema
  filename CDATA #REQUIRED
>

<!--
     note: the interface="true", requires that useManagers=true in the
     properties file.
-->
<!ELEMENT table (column+,(foreign-key|index|unique|id-method-parameter|validator|vendor)*)>
<!ATTLIST table
  name CDATA #REQUIRED
  phpName CDATA #IMPLIED
  idMethod (native|autoincrement|sequence|none|null) "null"
  skipSql (true|false) "false"
  readOnly (true|false) "false"
  abstract (true|false) "false"
  treeMode (MaterializedPath|NestedSet|AdjacencyList) "AdjacencyList"
  package CDATA #IMPLIED
  baseClass CDATA #IMPLIED
  basePeer CDATA #IMPLIED
  alias CDATA #IMPLIED
  interface CDATA #IMPLIED
  phpNamingMethod (nochange|underscore|phpname) #IMPLIED
  heavyIndexing (true|false) #IMPLIED
  description CDATA #IMPLIED
>

<!ELEMENT id-method-parameter EMPTY>
<!ATTLIST id-method-parameter
  name CDATA "default"
  value CDATA #REQUIRED
>

<!ELEMENT column ((inheritance|vendor)*)>
<!ATTLIST column
  name CDATA #REQUIRED
  phpName CDATA #IMPLIED
  peerName CDATA #IMPLIED
  primaryKey (true|false) "false"
  required (true|false) "false"
  type
    (
          BIT  | TINYINT | SMALLINT    | INTEGER    | BIGINT    | FLOAT
        | REAL | NUMERIC | DECIMAL     | CHAR       | VARCHAR   | LONGVARCHAR
        | DATE | TIME    | TIMESTAMP   | BINARY     | VARBINARY | LONGVARBINARY
        | NULL | OTHER   | PHP_OBJECT  | DISTINCT   | STRUCT    | ARRAY
        | BLOB | CLOB    | REF         | BOOLEANINT | BOOLEANCHAR
        | DOUBLE | BOOLEAN
    ) "VARCHAR"
  phpType CDATA #IMPLIED
  sqlType CDATA #IMPLIED
  size CDATA #IMPLIED
  scale CDATA #IMPLIED
  default CDATA #IMPLIED
  defaultValue CDATA #IMPLIED
  defaultExpr CDATA #IMPLIED
  autoIncrement (true|false) "false"
  inheritance (single|false) "false"
  inputValidator CDATA #IMPLIED
  phpNamingMethod (nochange|underscore|phpname) #IMPLIED
  description CDATA #IMPLIED
  lazyLoad (true|false) "false"
>

<!ELEMENT inheritance EMPTY>
<!ATTLIST inheritance
  key CDATA #REQUIRED
  class CDATA #REQUIRED
  package CDATA #IMPLIED
  extends CDATA #IMPLIED
>

<!ELEMENT foreign-key (reference+, vendor*)>
<!ATTLIST foreign-key
  foreignTable CDATA #REQUIRED
  name CDATA #IMPLIED
  phpName CDATA #IMPLIED
  refPhpName CDATA #IMPLIED
  onUpdate (CASCADE|cascade|SETNULL|setnull|RESTRICT|restrict|NONE|none) "none"
  onDelete (CASCADE|cascade|SETNULL|setnull|RESTRICT|restrict|NONE|none) "none"
>

<!ELEMENT reference EMPTY>
<!ATTLIST reference
  local CDATA #REQUIRED
  foreign CDATA #REQUIRED
>

<!ELEMENT index (index-column+)>
<!ATTLIST index
  name CDATA #IMPLIED
>

<!ELEMENT index-column (vendor*)>
<!ATTLIST index-column
  name CDATA #REQUIRED
  size CDATA #IMPLIED
>

<!ELEMENT unique (unique-column+)>
<!ATTLIST unique
  name CDATA #IMPLIED
>

<!ELEMENT unique-column (vendor*)>
<!ATTLIST unique-column
  name CDATA #REQUIRED
>

<!ELEMENT validator (rule+)>
<!ATTLIST validator
  column CDATA #REQUIRED
  translate CDATA #IMPLIED
>

<!ELEMENT rule EMPTY>
<!ATTLIST rule
  name (mask|maxLength|maxValue|minLength|minValue|required|unique|validValues|class) #REQUIRED
  class CDATA #IMPLIED
  value CDATA #IMPLIED
  size ID #IMPLIED
  message CDATA #IMPLIED
>

<!ELEMENT vendor (parameter+)>
<!ATTLIST vendor
  type CDATA #REQUIRED
>

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