What is Schema2XMI?

Schema2XMI is a generator that will read a database schema and write your schema into an XMI model. This is useful for a couple of reasons:

  • Your company wants your DBA(s) to design your schema.
  • Your application already has an existing schema.
  • You want to move a legacy application to AndroMDA.

What kind of models will it produce?

The produced XMI model will possess the following attributes:

  • Associations will contain correct multiplicities based on foreign key relations.
  • Correct multiplicities on attributes that are nullable vs. non-nullable (0..1 and 1).
  • Composite aggregation will be created on relationships marked with cascade deletes.
  • Configurable stereotypes will be added to classes and identifiers.
  • Optional configurable tagged values for column names and table names can be added to attributes and tables respectively.

How do I use Schema2XMI?

Schema2XMI is a command line utility that you'll pass arguments to and then execute the main Schema2XMI class. The usage is defined below:

usage: org.andromda.schema2xmi.Schema2XMI [options] ...]]

Options:
 -C,--classStereotypes <arg>        Comma separated list of stereotype
                                    names to add to the created class
 -I,--identifierStereotypes <arg>   Comma separated list of stereotype
                                    names to add to any class identifiers
 -P,--package <arg>                 The package to output classifiers
 -V,--tableTaggedValue <arg>        The tagged value to use for storing
                                    the table name
 -a,--columnPattern <arg>           The column name pattern of columns to
                                    process (regular expression)
 -c,--connectionUrl <arg>           JDBC connection URL
 -d,--driver <arg>                  JDBC driver class
 -h,--help                          Display help information
 -i,--input <arg>                   Input model file (to which model
                                    elements will be added)
 -m,--mappings <arg>                The type mappings URI (i.e.
                                    file:${basedir}/DataypeMappings.xml)
 -o,--output <arg>                  Output location to which the result of
                                    the transformation will be written
 -p,--password <arg>                Schema user password
 -s,--schema <arg>                  The name of the schema where the
                                    tables can be found
 -t,--tablePattern <arg>            The table name pattern of tables to
                                    process (regular expression)
 -u,--user <arg>                    Schema user name
 -v,--columnTaggedValue <arg>       The tagged value to use for storing
                                    the column name
 -x,--xmi <arg>                     Specifies the XMI version that will be
                                    produced

Here's an example of how you could use Schema2XMI with an Oracle schema from Ant with the java task .

<java classname="org.andromda.schema2xmi.Schema2XMI" fork="true">
    <classpath>
        <path refid="schema2xmi.classpath"/>
    </classpath>
    <arg value="-i"/>
    <arg value="jar:file:${src.dir}/test/uml/SomeModel.xml.zip!/SomeModel.xml"/>
    <arg value="-u"/>
    <arg value="someuser"/>
    <arg value="-p"/>
    <arg value="somepassword"/>
    <arg value="-c"/>
    <arg value="jdbc:oracle:oci:@yoursid"/>
    <arg value="-d"/>
    <arg value="oracle.jdbc.driver.OracleDriver"/>
    <arg value="-m"/>
    <arg value="file:${conf.dir}/mappings/DatatypeMappings.xml"/>
    <arg value="-o"/>
    <arg value="${build.dir}/schema2xmi/transformed.xmi"/>
    <arg value="-t"/>
    <arg value="[\p{Lower}\p{Upper}[_]]*"/>
    <arg value="-P"/>
    <arg value="org::andromda::sample"/>
    <arg value="-C"/>
    <arg value="entity,persistent"/>
    <ant value="-I"/>
    <arg value="identifier"/>
    <arg value="-V"/>
    <arg value="andromda_persistence_table"/>
    <arg value="-v"/>
    <arg value="andromda_persistence_column"/>
</java>

IMPORTANT: The datatype mappings file that you specify with the -m argument, must be structured like the example directly below:

<!--
  This is used to map SQL Types to
  model datatypes for Schema2XMI
-->
<mappings name="DatatypeMappings">
    <mapping>
        <from>DECIMAL</from>
        <to>datatype::Decimal</to>
    </mapping>
    <mapping>
        <from>VARCHAR</from>
        <to>datatype::String</to>
    </mapping>
    <mapping>
        <from>TIMESTAMP</from>
        <to>datatype::Timestamp</to>
    </mapping>
    <mapping>
        <from>BLOB</from>
        <to>datatype::Blob</to>
    </mapping>
</mappings>