Database abstraction layers also try to solve the problem of creating portable schemas.
MDB2_Schema example
<?xml version="1.0" encoding="ISO-8859-1" ?>
<database>

 <name><variable>database</variable></name>
 <create><variable>create</variable></create>
 <overwrite><variable>overwrite</variable></overwrite>

 <table>

  <name>ce_bad_word</name>

  <declaration>

   <field>
    <name>badword_id</name>
    <type>integer</type>
    <notnull>true</notnull>
    <default>0</default>
   </field>

   <field>
    <name>word</name>
    <type>text</type>
    <length>255</length>
    <notnull>true</notnull>
    <default> </default>
   </field>
ADOdb-xmlschema example
<?xml version="1.0" encoding="ISO-8859-1" ?>
<schema version="0.2">

  <table name="users">
    <desc>A typical users table for our application.</desc>
    <field name="userId" type="I">
      <descr>A unique ID assigned to each user.</descr>

      <KEY/>
      <AUTOINCREMENT/>
    </field>
    
    <field name="userName" type="C" size="16"><NOTNULL/></field>

    
    <index name="userName">
      <descr>Put a unique index on the user name</descr>
      <col>userName</col>
      <UNIQUE/>

    </index>
  </table>