From: Ash Berlin Date: Sat, 7 Feb 2009 18:01:44 +0000 (+0000) Subject: Move XMI stuff to branches/xmi since no one has worked on them and the tests have... X-Git-Tag: v0.11008~242 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=47b3b29f6c023d59098cc3541bea03ffbd8cab56;p=dbsrgits%2FSQL-Translator.git Move XMI stuff to branches/xmi since no one has worked on them and the tests have failed for years, and they've been skipped from dists for an equally long time --- diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP index 30fb58b..f04ce18 100644 --- a/MANIFEST.SKIP +++ b/MANIFEST.SKIP @@ -51,23 +51,3 @@ Build$ # Test::Kwalitee cache files. ^Debian_CPANTS\.txt -# I'm not sure why these are in here... perhaps we should -# consider removal -jawnsy -lib/SQL/Translator/Parser/XML/XMI.pm -lib/SQL/Translator/Parser/XML/XMI/Rational.pm -lib/SQL/Translator/Parser/XML/XMI/SQLFairy.pm -lib/SQL/Translator/XMI/Parser.pm -lib/SQL/Translator/XMI/Parser/V10.pm -lib/SQL/Translator/XMI/Parser/V12.pm -t/data/xmi/Foo.poseidon2.xmi -t/data/xmi/Foo.poseidon2.zuml -t/data/xmi/MAGE.poseidon.xmi -t/data/xmi/MAGE.rose.xmi -t/data/xmi/OrderDB.plain.poseidon2.zuml -t/data/xmi/OrderDB.rationalprofile.poseidon2.xmi -t/data/xmi/OrderDB.rationalprofile.poseidon2.zuml -t/data/xmi/OrderDB.sqlfairy.poseidon2.xmi -t/21xml-xmi-parser.t -t/22xml-xmi-parser-visibility.t -t/23xml-xmi-parser-rational.t -t/28xml-xmi-parser-sqlfairy.t diff --git a/lib/SQL/Translator/Manual.pod b/lib/SQL/Translator/Manual.pod index 90450b5..4774437 100644 --- a/lib/SQL/Translator/Manual.pod +++ b/lib/SQL/Translator/Manual.pod @@ -129,15 +129,13 @@ comma-separated file to an SQLite database, do the following: $ sqlt -f xSV --fs ',' -t SQLite foo.csv > foo-sqlite.sql -Additionally, there are non-SQL represenations of relational schemas -such as XML and XMI. Currently the XMI support in SQLFairy is -experimental and not released. Additionally, the only XML supported -is our own version; however, it would be fairly easy to add an XML -parser for something like the TorqueDB (http://db.apache.org/torque/) -project. The actual parsing of XML should be trivial given the number -of XML parsers available, so all that would be left would be to map -the specific concepts in the source file to the Schema objects in -SQLFairy. +Additionally, there is a non-SQL represenation of relational schemas namely +XML. Additionally, the only XML supported is our own version; however, it +would be fairly easy to add an XML parser for something like the TorqueDB +(http://db.apache.org/torque/) project. The actual parsing of XML should be +trivial given the number of XML parsers available, so all that would be left +would be to map the specific concepts in the source file to the Schema objects +in SQLFairy. To convert a schema in SQLFairy's XML dialect to Oracle, do the following: diff --git a/lib/SQL/Translator/Parser/XML/XMI.pm b/lib/SQL/Translator/Parser/XML/XMI.pm deleted file mode 100644 index b70ce8f..0000000 --- a/lib/SQL/Translator/Parser/XML/XMI.pm +++ /dev/null @@ -1,229 +0,0 @@ -package SQL::Translator::Parser::XML::XMI; - -# ------------------------------------------------------------------- -# $Id$ -# ------------------------------------------------------------------- -# Copyright (C) 2003 Mark Addison , -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; version 2. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA -# ------------------------------------------------------------------- - -=head1 NAME - -SQL::Translator::Parser::XML::XMI - Parser to create Schema from UML -Class diagrams stored in XMI format. - -=cut - -use strict; - -$DEBUG = 0 unless defined $DEBUG; - -use Data::Dumper; -use Exporter; -use base qw(Exporter); -@EXPORT_OK = qw(parse); - -use base qw/SQL::Translator::Parser/; # Doesnt do anything at the mo! -use SQL::Translator::Utils 'debug'; -use SQL::Translator::XMI::Parser; - -# SQLFairy Parser -#----------------------------------------------------------------------------- - -# is_visible - Used to check visibility in filter subs -{ - my %vislevel = ( - public => 1, - protected => 2, - private => 3, - ); - - sub is_visible { - my ($nodevis, $vis) = @_; - $nodevis = ref $_[0] ? $_[0]->{visibility} : $_[0]; - return 1 unless $vis; - return 1 if $vislevel{$vis} >= $vislevel{$nodevis}; - return 0; - } -} - -my ($schema, $pargs); - -sub parse { - my ( $translator, $data ) = @_; - local $DEBUG = $translator->debug; - $schema = $translator->schema; - $pargs = $translator->parser_args; - $pargs->{classes2schema} ||= \&classes2schema; - - debug "Visibility Level:$pargs->{visibility}" if $DEBUG; - - my $xmip = SQL::Translator::XMI::Parser->new(xml => $data); - - # TODO - # - Options to set the initial context node so we don't just - # blindly do all the classes. e.g. Select a diag name to do. - - my $classes = $xmip->get_classes( - filter => sub { - return unless $_->{name}; - return unless is_visible($_, $pargs->{visibility}); - return 1; - }, - filter_attributes => sub { - return unless $_->{name}; - return unless is_visible($_, $pargs->{visibility}); - return 1; - }, - ); - debug "Found ".scalar(@$classes)." Classes: ".join(", ", - map {$_->{"name"}} @$classes) if $DEBUG; - debug "Model:",Dumper($xmip->{model}) if $DEBUG; - - # - # Turn the data from get_classes into a Schema - # - $pargs->{classes2schema}->($schema, $classes); - - return 1; -} - -1; - -# Default conversion sub. Makes all classes into tables using all their -# attributes. -sub classes2schema { - my ($schema, $classes) = @_; - - foreach my $class (@$classes) { - # Add the table - debug "Adding class: $class->{name}"; - my $table = $schema->add_table( name => $class->{name} ) - or die "Schema Error: ".$schema->error; - - # - # Fields from Class attributes - # - foreach my $attr ( @{$class->{attributes}} ) { - my %data = ( - name => $attr->{name}, - is_primary_key => $attr->{stereotype} eq "PK" ? 1 : 0, - #is_foreign_key => $stereotype eq "FK" ? 1 : 0, - ); - $data{default_value} = $attr->{initialValue} - if exists $attr->{initialValue}; - $data{data_type} = $attr->{_map_taggedValues}{dataType}{dataValue} - || $attr->{dataType}{name}; - $data{size} = $attr->{_map_taggedValues}{size}{dataValue}; - $data{is_nullable}=$attr->{_map_taggedValues}{nullable}{dataValue}; - - my $field = $table->add_field( %data ) or die $schema->error; - $table->primary_key( $field->name ) if $data{'is_primary_key'}; - } - - } # Classes loop -} - -1; - -__END__ - -=pod - -=head1 SYNOPSIS - - use SQL::Translator; - use SQL::Translator::Parser::XML::XMI; - - my $translator = SQL::Translator->new( - from => 'XML-XMI', - to => 'MySQL', - filename => 'schema.xmi', - show_warnings => 1, - add_drop_table => 1, - ); - - print $obj->translate; - -=head1 DESCRIPTION - -Translates XMI (UML models in XML format) into Schema. This basic parser -will just pull out all the classes as tables with fields from their attributes. - -For more detail you will need to use a UML profile for data modelling. These are -supported by sub parsers. See their docs for details. - -=over 4 - -=item XML::XMI::Rational - -The Rational Software UML Data Modeling Profile - -=back - -=head1 ARGS - -=over 4 - -=item visibility - - visibilty=public|protected|private - -What visibilty of stuff to translate. e.g when set to 'public' any private -and package Classes will be ignored and not turned into tables. Applies -to Classes and Attributes. - -If not set or false (the default) no checks will be made and everything is -translated. - -=back - -=head1 XMI Format - -Uses either XMI v1.0 or v1.2. The version to use is detected automatically -from the tag in the source file. - -The parser has been built using XMI 1.2 generated by PoseidonUML 2, which -says it uses UML 2. So the current conformance is down to Poseidon's idea -of XMI! 1.0 support is based on a Rose file, is less complete and has little -testing. - - -=head1 BUGS - -Seems to be slow. I think this is because the XMI files can get pretty -big and complex, especially all the diagram info, and XPath needs to load the -whole tree. - -Deleting the diagrams from an XMI1.2 file (make a backup!) will really speed -things up. Remove tags and all their contents. - -=head1 TODO - -More profiles. - -=head1 AUTHOR - -Mark D. Addison Emark.addison@itn.co.ukE. - -=head1 SEE ALSO - -perl(1), SQL::Translator, XML::XPath, SQL::Translator::Producer::XML::SQLFairy, -SQL::Translator::Schema. - -=cut - - diff --git a/lib/SQL/Translator/Parser/XML/XMI/Rational.pm b/lib/SQL/Translator/Parser/XML/XMI/Rational.pm deleted file mode 100644 index 16fc049..0000000 --- a/lib/SQL/Translator/Parser/XML/XMI/Rational.pm +++ /dev/null @@ -1,267 +0,0 @@ -package SQL::Translator::Parser::XML::XMI::Rational; - -# ------------------------------------------------------------------- -# $Id$ -# ------------------------------------------------------------------- -# Copyright (C) 2003 Mark Addison , -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; version 2. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA -# ------------------------------------------------------------------- - -=head1 NAME - -SQL::Translator::Parser::XML::XMI::Rational - Create Schema using Rational's UML -Data Modeling Profile. - -=cut - -use strict; - -use vars qw[ $DEBUG @EXPORT_OK ]; -$DEBUG = 0 unless defined $DEBUG; -use Exporter; -use base qw(Exporter); -@EXPORT_OK = qw(parse); - -use SQL::Translator::Parser::XML::XMI; -use SQL::Translator::Utils 'debug'; - -# Set the parg for the conversion sub then use the XMI parser -sub parse { - my ( $translator ) = @_; - local $DEBUG = $translator->debug; - my $pargs = $translator->parser_args; - $pargs->{classes2schema} = \&classes2schema; - return SQL::Translator::Parser::XML::XMI::parse(@_); -} - -sub _parameters_in { - my $params = shift; - return grep {$_->{kind} ne "return"} @$params; -} - -sub classes2schema { - my ($schema, $classes) = @_; - - foreach my $class (@$classes) { - next unless $class->{stereotype} eq "Table"; - - # Add the table - debug "Adding class: $class->{name}"; - my $table = $schema->add_table( name => $class->{name} ) - or die "Schema Error: ".$schema->error; - - # - # Fields from Class attributes - # - foreach my $attr ( @{$class->{attributes}} ) { - next unless $attr->{stereotype} eq "Column" - or $attr->{stereotype} eq "PK" - or $attr->{stereotype} eq "FK" - or $attr->{stereotype} eq "PFK"; - - my $ispk = - $attr->{stereotype} eq "PK" or $attr->{stereotype} eq "PFK" - ? 1 : 0; - my %data = ( - name => $attr->{name}, - data_type => $attr->{datatype}, - is_primary_key => $ispk, - ); - $data{default_value} = $attr->{initialValue} - if exists $attr->{initialValue}; - $data{data_type} = $attr->{_map_taggedValues}{dataType}{dataValue} - || $attr->{datatype}; - $data{size} = $attr->{_map_taggedValues}{size}{dataValue}; - $data{is_nullable}=$attr->{_map_taggedValues}{nullable}{dataValue}; - - my $field = $table->add_field( %data ) or die $schema->error; - $table->primary_key( $field->name ) if $data{'is_primary_key'}; - } - - # - # Constraints and indexes from Operations - # - foreach my $op ( @{$class->{operations}} ) { - next unless my $stereo = $op->{stereotype}; - my @fields = map {$_->{name}} grep {$_->{kind} ne "return"} @{$op->{parameters}}; - my %data = ( - name => $op->{name}, - type => "", - fields => [@fields], - ); - - # Work out type and any other data - if ( $stereo eq "Unique" ) { - $data{type} = "UNIQUE"; - } - elsif ( $stereo eq "PK" ) { - $data{type} = "PRIMARY_KEY"; - } - # Work out the ref table - elsif ( $stereo eq "FK" ) { - $data{type} = "FOREIGN_KEY"; - _add_fkey_refs($class,$op,\%data); - } - - # Add the constraint or index - if ( $data{type} ) { - $table->add_constraint( %data ) or die $schema->error; - } - elsif ( $stereo eq "Index" ) { - $data{type} = "NORMAL"; - $table->add_index( %data ) or die $schema->error; - } - - } # Ops loop - - } # Classes loop -} - -use Data::Dumper; -sub _add_fkey_refs { - my ($class,$op,$data) = @_; - - # Find the association ends - my ($end) = grep { $_->{name} eq $op->{name} } @{$class->{associationEnds}}; - return unless $end; - # Find the fkey op - my ($refop) = grep { $_->{name} eq $end->{otherEnd}{name} } - @{$end->{otherEnd}{participant}{operations}}; - return unless $refop; - - $data->{reference_table} = $end->{otherEnd}{participant}{name}; - $data->{reference_fields} = [ map("$_->{name}", _parameters_in($refop->{parameters})) ]; - return $data; -} - -1; #--------------------------------------------------------------------------- - -__END__ - -=pod - -=head1 SYNOPSIS - - use SQL::Translator; - use SQL::Translator::Parser::XML::XMI; - - my $translator = SQL::Translator->new( - from => 'XML-XMI-Rational', - to => 'MySQL', - filename => 'schema.xmi', - show_warnings => 1, - add_drop_table => 1, - ); - - print $obj->translate; - -=head1 DESCRIPTION - -Translates Schema described using Rational Software's UML Data Modeling Profile. -Finding good information on this profile seems to be very difficult so this -is based on a vague white paper and notes in vendors docs! - -Below is a summary of what this parser thinks the profile looks like. - -B Are classes marked with <> stereotype. - -B Attributes stereotyped with <> or one of the key stereotypes. -Additional info is added using tagged values of C, C and -C. Default value is given using normal UML default value for the -attribute. - -B Key fields are marked with <>, <> or <>. Note that this is -really to make it obvious on the diagram, you must still add the constraints. -(This parser will also automatically add the constraint for single field pkeys -for attributes marked with PK but I think this is out of spec.) - -B Stereotyped operations, with the names of the parameters -indicating which fields it applies to. Can use <>, <>, <> or -<>. - -B You can model the relationships in the diagram and have the -translator add the foreign key constraints for you. The forign keys are defined -as <> operations as show above. To show which table they point to join the -class to the taget classwith an association where the role names are the names -of the constraints to join. - -e.g. - - +------------------------------------------------------+ - | <
> | - | Foo | - +------------------------------------------------------+ - | <> fooID { dataType=INT size=10 nullable=0 } | - | <> name { dataType=VARCHAR size=255 } | - | <> description { dataType=TEXT } | - +------------------------------------------------------+ - | <> pkcon( fooID ) | - | <> con2( name ) | - +------------------------------------------------------+ - | - | pkcon - | - | - | - | - | fkcon - | - +------------------------------------------------------+ - | <
> | - | Bar | - +------------------------------------------------------+ - | <> barID { dataType=INT size=10 nullable=0 } | - | <> fooID { dataType=INT size=10 nullable=0 } | - | <> name { dataType=VARCHAR size=255 } | - +------------------------------------------------------+ - | <> pkcon( barID ) | - | <> fkcon( fooID ) | - +------------------------------------------------------+ - - CREATE TABLE Foo ( - fooID INT(10) NOT NULL, - name VARCHAR(255), - description TEXT, - PRIMARY KEY (fooID), - UNIQUE con2 (name) - ); - - CREATE TABLE Bar ( - barID INT(10) NOT NULL, - fooID INT(10) NOT NULL, - name VARCHAR(255), - PRIMARY KEY (fooID), - FOREIGN KEY fkcon (fooID) REFERENCES Foo (fooID) - ); - -=head1 ARGS - -=head1 BUGS - -=head1 TODO - -The Rational profile also defines ways to model stuff above tables such as the -actuall db. - -=head1 AUTHOR - -Mark D. Addison Emark.addison@itn.co.ukE. - -=head1 SEE ALSO - -perl(1), SQL::Translator::Parser::XML::XMI - -=cut diff --git a/lib/SQL/Translator/Parser/XML/XMI/SQLFairy.pm b/lib/SQL/Translator/Parser/XML/XMI/SQLFairy.pm deleted file mode 100644 index 9540f61..0000000 --- a/lib/SQL/Translator/Parser/XML/XMI/SQLFairy.pm +++ /dev/null @@ -1,446 +0,0 @@ -package SQL::Translator::Parser::XML::XMI::SQLFairy; - -# ------------------------------------------------------------------- -# $Id$ -# ------------------------------------------------------------------- -# Copyright (C) 2003 Mark Addison , -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; version 2. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA -# ------------------------------------------------------------------- - -=head1 NAME - -SQL::Translator::Parser::XML::XMI::SQLFairy - Create Schema from UML Models. - -=cut - -use strict; - -use vars qw[ $DEBUG @EXPORT_OK ]; -$DEBUG = 0 unless defined $DEBUG; -use Exporter; -use base qw(Exporter); -@EXPORT_OK = qw(parse); - -use Data::Dumper; -use SQL::Translator::Parser::XML::XMI; -use SQL::Translator::Utils 'debug'; - -# Globals for the subs to use, set in parse() and classes2schema() -# -# TODO Should we be giving classes2schema the schema or should they use their -# parse() to get it. Obj parsers maybe? -#our ($schema,$pargs); -use vars qw[ $schema $pargs ]; - -# Set the parg for the conversion sub then use the XMI parser -sub parse { - my ( $translator ) = @_; - local $DEBUG = $translator->debug; - local $pargs = $translator->parser_args; - #local $schema = $translator->schema; - $pargs->{classes2schema} = \&classes2schema; - $pargs->{derive_pkey} ||= "stereotype,auto,first"; - $pargs->{auto_pkey} ||= { - name => sub { - my $class = shift; - $class->{name}."ID"; - }, - data_type => "INT", - size => 10, - is_nullable => 0, - is_auto_increment => 1, - }; - - return SQL::Translator::Parser::XML::XMI::parse(@_); -} - - - -# TODO We could make the tag names a parser arg so people can use their own. -my %TAGS; -$TAGS{data_type} = "sqlfDataType"; -$TAGS{size} = "sqlfSize"; -$TAGS{is_nullable} = "sqlfIsNullable"; -$TAGS{required} = "sqlfRequired"; -$TAGS{is_auto_increment} = "sqlfIsAutoIncrement"; -$TAGS{default_value} = "sqlfDefaultValue"; - -sub _parameters_in { - my $params = shift; - return grep {$_->{kind} ne "return"} @$params; -} - -sub _resolve_tag { - my ($tag, $things) = @_; - foreach (@$things) { - return $_->{_map_taggedValues}{$tag}{dataValue} - if exists $_->{_map_taggedValues}{$tag}{dataValue}; - } - return; -} - - -sub classes2schema { - local $schema = shift; - my $classes = shift; - - # - # Create tablles from Classes and collect their associations - # - my %associations; - foreach my $class (@$classes) { - # Add the table - debug "Adding class: $class->{name}"; - my $table = $schema->add_table( name => $class->{name} ) - or die "Schema Error: ".$schema->error; - - # Only collect the associations for classes that are tables. Use a hash - # so we only get them once - $associations{$_->{"xmi.id"}} = $_ - foreach map $_->{association}, @{$class->{associationEnds}}; - - # - # Fields from Class attributes - # - my @flds; - push @flds, attr2field($_) for @{$class->{attributes}}; - # TODO Filter this e.g no abstract attr or stereotype check - foreach (@flds) { - my $extra = delete $_->{extra}; - my $field = $table->add_field( %$_ ) or die $schema->error; - $field->extra(%$extra) if $extra; - } - - # Add a pkey - add_pkey($class,$table); - } - - # - # Relationships from Associations - # - foreach my $assoc (values %associations) { - my @end = @{$assoc->{associationEnds}}; - if ( - $end[0]->{multiplicity}{rangeUpper} == 1 - && $end[1]->{multiplicity}{rangeUpper} == 1 - ) { - # 1:1 or 0:1 - warn "Sorry, 1:1 associations not yet implimented for xmi.id=".$assoc->{"xmi.id"}."\n"; - } - elsif ( - $end[0]->{multiplicity}{rangeUpper} == 1 - || $end[1]->{multiplicity}{rangeUpper} == 1 - ) { - one2many($assoc); - } - else - { - many2many($assoc); - } - - } - -} - -# Take an attribute and return the field data for it -sub attr2field { - my $attr = shift; - my $dataType = $attr->{dataType}; - - my %data = ( name => $attr->{name} ); - - $data{data_type} - = _resolve_tag($TAGS{data_type},[$attr,$dataType]) - || $dataType->{name}; - - $data{size} = _resolve_tag($TAGS{size},[$attr,$dataType]); - - $data{default_value} - = _resolve_tag($TAGS{default_value},[$attr,$dataType]) - || $attr->{initialValue}; - - my $is_nullable = _resolve_tag($TAGS{is_nullable},[$attr,$dataType]); - my $required = _resolve_tag($TAGS{required},[$attr,$dataType]); - $data{is_nullable} - = defined $is_nullable ? $is_nullable - : ( defined $required ? ($required ? 0 : 1) : undef); - - $data{is_auto_increment} - = $attr->{_map_taggedValues}{$TAGS{is_auto_increment}}{dataValue} - || $dataType->{_map_taggedValues}{$TAGS{is_auto_increment}}{dataValue} - || undef; - - # - # Extras - # - my %tagnames; - foreach ( keys %{$attr->{_map_taggedValues}} ) {$tagnames{$_}++; } - delete @tagnames{@TAGS{qw/data_type size default_value is_nullable required is_auto_increment/}}; # Remove the tags we have already done - my %extra = map { - my $val = $attr->{_map_taggedValues}{$_}{dataValue}; - s/^sqlf//; - ($_,$val); - } keys %tagnames; - $data{extra} = \%extra; - - return \%data; -} - -# Add a pkey to a table for the class -sub add_pkey { - my ($class,$table) = @_; - - my @pkeys; - foreach ( split(",", $pargs->{derive_pkey}) ) { - if ( $_ eq "stereotype" ) { - @pkeys = map $_->{name}, - grep($_->{stereotype} eq "PK", @{$class->{attributes}}); - } - elsif( $_ eq "first" ) { - @pkeys = $class->{attributes}[0]{name} unless @pkeys; - } - elsif( $_ eq "auto" ) { - if ( my %data = %{$pargs->{auto_pkey}} ) { - $data{name} = $data{name}->($class,$table); - my $field = $table->add_field(%data) or die $table->error; - @pkeys = $field->name; - } - } - last if @pkeys; - } - - $table->add_constraint( - type => "PRIMARY KEY", - fields => [@pkeys], - ) or die $table->error; -} - -# Maps a 1:M association into the schema -sub one2many -{ - my ($assoc) = @_; - my @ends = @{$assoc->{associationEnds}}; - my ($end1) = grep $_->{multiplicity}{rangeUpper} == 1, @ends; - my $endm = $end1->{otherEnd}; - my $table1 = $schema->get_table($end1->{participant}{name}); - my $tablem = $schema->get_table($endm->{participant}{name}); - - # - # Export 1end pkey to many end - # - my $con = $table1->primary_key; - my @flds = $con->fields; - foreach (@flds) { - my $fld = $table1->get_field($_); - my %data; - $data{$_} = $fld->$_() - foreach (qw/name size data_type default_value is_nullable/); - $data{extra} = { $fld->extra }; # Copy extra hash - $data{is_unique} = 0; # FKey on many join so not unique - $data{is_nullable} = $end1->{multiplicity}{rangeLower} == 0 ? 1 : 0; - # 0:m - allow nulluable on fkey - # 1:m - dont allow nullable - - $tablem->add_field(%data) or die $tablem->error; - # Export the pkey if full composite (ie identity) relationship - $tablem->primary_key($_) if $end1->{aggregation} eq "composite"; - } - - # - # Add fkey constraint to many end - # - $tablem->add_constraint( - type => "FOREIGN_KEY", - fields => [@flds], - reference_table => $table1->{name}, - reference_fields => [@flds], - ) or die $schema->error; -} - -# Maps m:n into schema by building a link table. -sub many2many -{ - my ($assoc) = @_; - my @end = @{$assoc->{associationEnds}}; - - # Create the link table - my $name = $end[0]->{participant}{name}."_".$end[1]->{participant}{name}; - my $link_table = $schema->add_table( name => $name ) - or die "Schema Error: ".$schema->error; - - # Export the pkey(s) from the ends into the link table - my @pkeys; - foreach (@end) { - my $table = $schema->get_table($_->{participant}{name}); - my @fkeys = $table->primary_key->fields; - push @pkeys,@fkeys; - foreach ( @fkeys ) { - my $fld = $table->get_field($_); - my %data; - $data{$_} = $fld->$_() - foreach ( - qw/name size data_type default_value is_nullable is_unique/); - $data{is_auto_increment} = 0; - $data{extra} = { $fld->extra }; # Copy - $link_table->add_field(%data) or die $table->error; - } - $link_table->add_constraint( - type => "FOREIGN_KEY", - fields => [@fkeys], - reference_table => $table->{name}, - reference_fields => [@fkeys], - ) or die $schema->error; - - } - # Add pkey constraint - $link_table->add_constraint( type => "PRIMARY KEY", fields => [@pkeys] ) - or die $link_table->error; - - - # Add fkeys to our participants -} -1; #--------------------------------------------------------------------------- - -__END__ - -=pod - -=head1 SYNOPSIS - - use SQL::Translator; - use SQL::Translator::Parser::XML::XMI; - - my $translator = SQL::Translator->new( - from => 'XML-XMI-SQLFairy', - to => 'MySQL', - filename => 'schema.xmi', - ); - - print $obj->translate; - -=head1 DESCRIPTION - -Converts Class diagrams to Schema trying to use standard UML features as much -as possible, with the minimum use of extension mechanisms (tagged values and -stereotypes) for the database details. The idea is to treat the object model -like a logical database model and map that to a physical model (the sql). Also -tries to make this mapping as configurable as possible and support all the -schema features of SQLFairy. - -=head2 Tables - -Classes, all of them! (TODO More control over which tables to do.) - -=head2 Fields - -The attributes of the class will be converted to fields of the same name. - -=head3 Datatypes - -Database datatypes are modeled using tagged values; sqlfDataType, -sqlfSize, sqlfIsNullable and sqlfIsAutoIncrement added to the attribute. -The default value is the UML initial value of the attribute or can be overridden -using a sqlfDefaultValue tagged value if you want to have a different default -in the database then the object uses. - -For more advanced datatype modeling you can use UML data types by adding the -tagged values to the UML data types in your model and then giving your -attributes those datatypes. Any tagged values set on attributes will override -any they get from their datatype. This allows you to use UML datatypes like -domains. If no sqlfDataType is given then the name of the UMLDataType is used. - -=head3 Primary Keys - -If no attribute is marked explicity on the Class as a pkey then one is added. -The default is an INT(10) auto number named after the class with ID on the end. -For many cases this is enough as you don't normally need to model pkeys -explicitly in your object models as its a database thing. - -The pkey created can be controlled by setting the C parser arg to a -hash ref describing the field. The name key is a sub that gets given a ref to -the class (from the xmi) and the table it has been mapped to, and should return the pkey name. e.g. the defualt looks like; - - { - name => sub { - my $class = shift; - $class->{name}."ID"; - }, - data_type => "INT", - size => 10, - is_nullable => 0, - is_auto_increment => 1, - } - -NB You need to return a unique name for the key if it will be used to build -relationships as it will be exported to other tables (see Relationships). - -You can also set them explicitly by marking attributes with a <> stereotype. -Add to multiple attribs to make multi column keys. Usefull when your object -contains an attribute that makes a good candidate for a pkey, e.g. email. - -=head2 Relationships - -=head2 1:m - -Associations where one ends multiplicty is '1' or '0..1' and the other end's -multplicity is more than 1 e.g '*', '0..*', '1..*', '0..3', '4..42' etc. - -The pkey field from the 1 end is added to the table for the class at the many -end as a foreign key with is_unique and auto number turned off. - -If the 1 end is multiplicity '0..1' (ie a 0:m join) then the the fkey is made -nullable, if its multiplicity '1' (1:m) then its made not nullable. - -If the association is a composition then the created fkey is made part of the -many ends pkey. ie It exports the pkey to create an identity join. - -=head2 m:n - -Model using a standard m:n association and the parser will automatically create -a link table for you in the Schema by exporting pkeys from the tables at -each end. - -=head1 EXAMPLE - -TODO An example to help make sense of the above! Probably based on the test. - -=head1 ARGS - -=head1 BUGS - -=head1 TODO - -1:1 joins. - -Use Role names from associations as field names for exported keys when building -relationships. - -Generalizations. - -Support for the format_X_name subs in the Translator and format subs for -generating the link table name in m:n joins. - -Lots more... - -=head1 AUTHOR - -Mark D. Addison Emark.addison@itn.co.ukE. - -=head1 SEE ALSO - -perl(1), SQL::Translator::Parser::XML::XMI - -=cut diff --git a/lib/SQL/Translator/XMI/Parser.pm b/lib/SQL/Translator/XMI/Parser.pm deleted file mode 100644 index 57c00be..0000000 --- a/lib/SQL/Translator/XMI/Parser.pm +++ /dev/null @@ -1,469 +0,0 @@ -package SQL::Translator::XMI::Parser; - -# ------------------------------------------------------------------- -# $Id$ -# ------------------------------------------------------------------- -# Copyright (C) 2003 Mark Addison , -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; version 2. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA -# ------------------------------------------------------------------- - -=pod - -=head1 NAME - -SQL::Translator::XMI::Parser - XMI Parser class for use in SQL Fairy's XMI -parser. - -=cut - -use strict; -use 5.006_001; - -use Data::Dumper; -use XML::XPath; -use XML::XPath::XMLParser; -use Storable qw/dclone/; - -# Spec -#------ -# See SQL::Translator::XMI::Parser::V12 and SQL::Translator::XMI::Parser:V10 -# for examples. -# -# Hash ref used to describe the 2 xmi formats 1.2 and 1.0. Neither is complete! -# -# NB The names of the data keys MUST be the same for both specs so the -# data structures returned are the same. -# -# TODO -# -# * There is currently no way to set the data key name for attrib_data, it just -# uses the attribute name from the XMI. This isn't a problem at the moment as -# xmi1.0 names all these things with tags so we don't need the attrib data! -# Also use of names seems to be consistant between the versions. -# -# -# XmiSpec( $spec ) -# -# Call as class method to set up the parser from a spec (see above). This -# generates the get_ methods for the version of XMI the spec is for. Called by -# the sub-classes (e.g. V12 and V10) to create parsers for each version. -# -sub XmiSpec { - my ($me,$spec) = @_; - _init_specs($spec); - $me->_mk_gets($spec); -} - -# Build lookups etc. Its important that each spec item becomes self contained -# so we can build good closures, therefore we do all the lookups 1st. -sub _init_specs { - my $specs = shift; - - foreach my $spec ( values %$specs ) { - # Look up for kids get method - foreach ( @{$spec->{kids}} ) { - $_->{get_method} = "get_".$specs->{$_->{class}}{plural}; - } - - # Add xmi.id ti all specs. Everything we want at the moment (in both - # versions) has an id. The tags that don't seem to be used for - # structure. - my $attrib_data = $spec->{attrib_data} ||= []; - push @$attrib_data, "xmi.id"; - } - -} - -# Create get methods from spec -# -sub _mk_gets { - my ($proto,$specs) = @_; - my $class = ref($proto) || $proto; - foreach ( values %$specs ) { - # Clone from specs and sort out the lookups into it so we get a - # self contained spec to use as a proper closure. - my $spec = dclone($_); - - # Create _get_* method with get_* as an alias unless the user has - # defined it. Allows for override. Note the alias is in this package - # so we can add overrides to both specs. - no strict "refs"; - my $meth = "_get_$spec->{plural}"; - *{$meth} = _mk_get($spec); - *{__PACKAGE__."::get_$spec->{plural}"} = sub {shift->$meth(@_);} - unless $class->can("get_$spec->{plural}"); - } -} - -# -# Sets up the XML::XPath object and then checks the version of the XMI file and -# blesses its self into either the V10 or V12 class. -# -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my %args = @_; - my $me = {}; - - # Create the XML::XPath object - # TODO Docs recommend we only use 1 XPath object per application - my $xp; - foreach (qw/filename xml ioref/) { - if ($args{$_}) { - $xp = XML::XPath->new( $_ => $args{$_}); - $xp->set_namespace("UML", "org.omg.xmi.namespace.UML"); - last; - } - } - $me = { xml_xpath => $xp }; - - # Work out the version of XMI we have and return as that sub class - my $xmiv = $args{xmi_version} - || "".$xp->findvalue('/XMI/@xmi.version') - || die "Can't find XMI version"; - $xmiv =~ s/[.]//g; - $class = __PACKAGE__."::V$xmiv"; - eval "use $class;"; - die "Failed to load version sub class $class : $@" if $@; - - return bless $me, $class; -} - -# -# _mk_get -# -# Generates and returns a get_ sub for the spec given. -# So, if you want to change how the get methods (e.g. get_classes) work do it -# here! -# -# The get methods made have the args described in the docs and 2 private args -# used internally, to call other get methods from paths in the spec. -# NB: DO NOT use publicly as you will break the version independance. e.g. When -# using _xpath you need to know which version of XMI to use. This is handled by -# the use of different paths in the specs. -# -# _context => The context node to use, if not given starts from root. -# -# _xpath => The xpath to use for finding stuff. -# -sub _mk_get { - my $spec = shift; - - # get_* closure using $spec - return sub { - my ($me, %args) = @_; - my $xp = delete $args{_context} || $me->{xml_xpath}; - my $things; - - my $xpath = $args{_xpath} ||= $spec->{default_path}; -#warn "Searching for $spec->{plural} using:$xpath\n"; - - my @nodes = $xp->findnodes($xpath); -#warn "None.\n" unless @nodes; - return unless @nodes; - - for my $node (@nodes) { -#warn " Found $spec->{name} xmi.id=".$node->getAttribute("xmi.id")." name=".$node->getAttribute("name")."\n"; - my $thing = {}; - # my $thing = { xpNode => $node }; - - # Have we seen this before? If so just use the ref we have. - if ( my $id = $node->getAttribute("xmi.id") ) { - if ( my $foo = $me->{model}{things}{$id} ) { -#warn " Reffing from model **********************\n"; - push @$things, $foo; - next; - } - } - - # Get the Tag attributes -#warn " getting attribs: ",join(" ",@{$spec->{attrib_data}}),"\n"; - foreach ( @{$spec->{attrib_data}} ) { - $thing->{$_} = $node->getAttribute($_); - } -#warn " got attribs: ",(map "$_=$thing->{$_}", keys %$thing),"\n"; - - # Add the path data - foreach ( @{$spec->{path_data}} ) { -#warn " getting path data $_->{name} : $_->{path}\n"; - my @nodes = $node->findnodes($_->{path}); - $thing->{$_->{name}} = @nodes ? $nodes[0]->getData - : (exists $_->{default} ? $_->{default} : undef); -#warn " got path data $_->{name}=$thing->{$_->{name}}\n"; - } - - # Run any filters set - # - # Should we do this after the kids as we may want to test them? - # e.g. test for number of attribs - if ( my $filter = $args{filter} ) { - local $_ = $thing; - next unless $filter->($thing); - } - - # Add anything with an id to the things lookup - push @$things, $thing; - if ( exists $thing->{"xmi.id"} and defined $thing->{"xmi.id"} - and my $id = $thing->{"xmi.id"} - ) { - $me->{model}{things}{$id} = $thing; } - - # Kids - # - foreach ( @{$spec->{kids}} ) { - my $data; - my $meth = $_->{get_method}; - my $path = $_->{path}; - - # Variable subs on the path from thing - $path =~ s/\$\{(.*?)\}/$thing->{$1}/g; - $data = $me->$meth( _context => $node, _xpath => $path, - filter => $args{"filter_$_->{name}"} ); - if ( $_->{multiplicity} eq "1" ) { - $thing->{$_->{name}} = shift @$data; - } - else { - my $kids = $thing->{$_->{name}} = $data || []; - if ( my $key = $_->{"map"} ) { - $thing->{"_map_$_->{name}"} = _mk_map($kids,$key); - } - } - } - } - - if ( $spec->{isRoot} ) { - push(@{$me->{model}{$spec->{plural}}}, $_) foreach @$things; - } - return $things; -} # /closure sub - -} # /_mk_get - -sub _mk_map { - my ($kids,$key) = @_; - my $map = {}; - foreach (@$kids) { - $map->{$_->{$key}} = $_ if exists $_->{$key}; - } - return $map; -} - -sub get_associations { - my $assoc = shift->_get_associations(@_); - foreach (@$assoc) { - next unless defined $_->{associationEnds}; # Wait until we get all of an association - my @ends = @{$_->{associationEnds}}; - if (@ends != 2) { - warn "Sorry can't handle otherEnd associations with more than 2 ends"; - return $assoc; - } - $ends[0]{otherEnd} = $ends[1]; - $ends[1]{otherEnd} = $ends[0]; - } - return $assoc; -} - -1; #=========================================================================== - - -package XML::XPath::Function; - -# -# May need to look at doing deref on all paths just to be on the safe side! -# -# Will also want some caching as these calls are expensive as the whole doc -# is used but the same ref will likley be requested lots of times. -# -sub xmiDeref { - my $self = shift; - my ($node, @params) = @_; - my $nodeset; - if (@params > 1) { - die "xmiDeref() function takes one or no parameters\n"; - } - elsif (@params) { - $nodeset = shift(@params); - return $nodeset unless $nodeset->size; - $node = $nodeset->get_node(1); - } - die "xmiDeref() needs an Element node." - unless $node->isa("XML::XPath::Node::Element"); - - my $id = $node->getAttribute("xmi.idref") || return ($nodeset || $node); - return $node->getRootNode->find('//*[@xmi.id="'.$id.'"]'); - # TODO We should use the tag name to search from the source -} - - -# compile please -1; - -__END__ - -=head1 SYNOPSIS - - use SQL::Translator::XMI::Parser; - my $xmip = SQL::Translator::XMI::Parser->new( xml => $xml ); - my $classes = $xmip->get_classes(); - -=head1 DESCRIPTION - -Parses XMI files (XML version of UML diagrams) to perl data structures and -provides hooks to filter the data down to what you want. - -=head2 new - -Pass in name/value arg of either C, C or C for the XMI -data you want to parse. - -The version of XMI to use either 1.0 or 1.2 is worked out from the file. You -can also use a C arg to set it explicitley. - -=head2 get_* methods - -Doc below is for classes method, all the other calls follow this form. - -=head2 get_classes( ARGS ) - - ARGS - Name/Value list of args. - - filter => A sub to filter the node to see if we want it. Has the nodes data, - before kids are added, referenced to $_. Should return true if you - want it, false otherwise. - - e.g. To find only classes with a "Foo" stereotype. - - filter => sub { return $_->{stereotype} eq "Foo"; } - - filter_attributes => A filter sub to pass onto get_attributes. - - filter_operations => A filter sub to pass onto get_operations. - -Returns a perl data structure including all the kids. e.g. - - { - 'name' => 'Foo', - 'visibility' => 'public', - 'isActive' => 'false', - 'isAbstract' => 'false', - 'isSpecification' => 'false', - 'stereotype' => 'Table', - 'isRoot' => 'false', - 'isLeaf' => 'false', - 'attributes' => [ - { - 'name' => 'fooid', - 'stereotype' => 'PK', - 'datatype' => 'int' - 'ownerScope' => 'instance', - 'visibility' => 'public', - 'initialValue' => undef, - 'isSpecification' => 'false', - }, - { - 'name' => 'name', - 'stereotype' => '', - 'datatype' => 'varchar' - 'ownerScope' => 'instance', - 'visibility' => 'public', - 'initialValue' => '', - 'isSpecification' => 'false', - }, - ] - 'operations' => [ - { - 'name' => 'magic', - 'isQuery' => 'false', - 'ownerScope' => 'instance', - 'visibility' => 'public', - 'isSpecification' => 'false', - 'stereotype' => '', - 'isAbstract' => 'false', - 'isLeaf' => 'false', - 'isRoot' => 'false', - 'concurrency' => 'sequential' - 'parameters' => [ - { - 'kind' => 'inout', - 'isSpecification' => 'false', - 'stereotype' => '', - 'name' => 'arg1', - 'datatype' => undef - }, - { - 'kind' => 'inout', - 'isSpecification' => 'false', - 'stereotype' => '', - 'name' => 'arg2', - 'datatype' => undef - }, - { - 'kind' => 'return', - 'isSpecification' => 'false', - 'stereotype' => '', - 'name' => 'return', - 'datatype' => undef - } - ], - } - ], - } - -=head1 XMI XPath Functions - -The Parser adds the following extra XPath functions for use in the Specs. - -=head2 xmiDeref - -Deals with xmi.id/xmi.idref pairs of attributes. You give it an -xPath e.g 'UML:ModelElement.stereotype/UML:stereotype' if the the -tag it points at has an xmi.idref it looks up the tag with that -xmi.id and returns it. - -If it doesn't have an xmi.id, the path is returned as normal. - -e.g. given - - - - - ... - - Class - - -Using xmideref(//UML:ModelElement.stereotype/UML:stereotype) would return the - tag. - -Using xmideref(//UML:ModelElement.stereotype/UML:stereotype)/@name would give -"Table". - -=head1 SEE ALSO - -perl(1). - -=head1 TODO - -=head1 BUGS - -=head1 VERSION HISTORY - -=head1 AUTHOR - -grommit - -=cut diff --git a/lib/SQL/Translator/XMI/Parser/V10.pm b/lib/SQL/Translator/XMI/Parser/V10.pm deleted file mode 100644 index a168d9d..0000000 --- a/lib/SQL/Translator/XMI/Parser/V10.pm +++ /dev/null @@ -1,167 +0,0 @@ -package SQL::Translator::XMI::Parser::V10; - -# ------------------------------------------------------------------- -# $Id$ -# ------------------------------------------------------------------- -# Copyright (C) 2003 Mark Addison , -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; version 2. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA -# ------------------------------------------------------------------- - -=pod - -=head1 NAME - -SQL::Translator::XMI::Parser::V10 - Version 1.0 parser. - -=cut - -use strict; -use 5.006_001; - -use base qw(SQL::Translator::XMI::Parser); - -my $spec10 = {}; - -$spec10->{class} = { - name => "class", - plural => "classes", - isRoot => 1, - default_path => '//Foundation.Core.Class[@xmi.id]', - attrib_data => [], - path_data => [ - { - name => "name", - path => 'Foundation.Core.ModelElement.name/text()', - }, - { - name => "visibility", - path => 'Foundation.Core.ModelElement.visibility/@xmi.value', - }, - { - name => "isSpecification", - path => 'Foundation.Core.ModelElement.isSpecification/@xmi.value', - }, - { - name => "isRoot", - path => 'Foundation.Core.GeneralizableElement.isRoot/@xmi.value', - }, - { - name => "isLeaf", - path => 'Foundation.Core.GeneralizableElement.isLeaf/@xmi.value', - }, - { - name => "isAbstract", - path => 'Foundation.Core.GeneralizableElement.isAbstract/@xmi.value', - }, - { - name => "isActive", - path => 'Foundation.Core.Class.isActive/@xmi.value', - }, - ], - kids => [ - { - name => "attributes", - path => - 'Foundation.Core.Classifier.feature/Foundation.Core.Attribute', - class => "attribute", - multiplicity => "*", - }, - # { - # name => "operations", - # path => "UML:Classifier.feature/UML:Operation", - # class => "operation", - # multiplicity => "*", - # }, - ], -}; - -$spec10->{attribute} = { - name => "attribute", - plural => "attributes", - default_path => '//Foundation.Core.Attribute[@xmi.id]', - path_data => [ - { - name => "name", - path => 'Foundation.Core.ModelElement.name/text()', - }, - { - name => "visibility", - path => 'Foundation.Core.ModelElement.visibility/@xmi.value', - }, - { - name => "isSpecification", - path => 'Foundation.Core.ModelElement.isSpecification/@xmi.value', - }, - { - name => "ownerScope", - path => 'Foundation.Core.Feature.ownerScope/@xmi.value', - }, - { - name => "initialValue", - path => 'Foundation.Core.Attribute.initialValue/Foundation.Data_Types.Expression/Foundation.Data_Types.Expression.body/text()', - }, - #{ - # name => "datatype", - # path => 'xmiDeref(Foundation.Core.StructuralFeature.type/Foundation.Core.Classifier)/Foundation.Core.DataType/Foundation.Core.ModelElement.name/text()', - #}, - ], -}; - -__PACKAGE__->XmiSpec($spec10); - -#----------------------------------------------------------------------------- - -sub get_classes { - print "******************* HELLO 1.0 ********************\n"; - shift->_get_classes(@_); -} - -1; #=========================================================================== - -__END__ - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 SEE ALSO - -perl(1). - -=head1 TODO - -=head1 BUGS - -=head1 VERSION HISTORY - -=head1 AUTHOR - -grommit - -=head1 LICENSE - -This package is free software and is provided "as is" without express or -implied warranty. It may be used, redistributed and/or modified under the -terms of either; - -a) the Perl Artistic License. - -See F - -b) the terms of the GNU General Public License as published by the Free Software -Foundation; either version 1, or (at your option) any later version. - -=cut diff --git a/lib/SQL/Translator/XMI/Parser/V12.pm b/lib/SQL/Translator/XMI/Parser/V12.pm deleted file mode 100644 index 634b07b..0000000 --- a/lib/SQL/Translator/XMI/Parser/V12.pm +++ /dev/null @@ -1,323 +0,0 @@ -package SQL::Translator::XMI::Parser::V12; - -# ------------------------------------------------------------------- -# $Id$ -# ------------------------------------------------------------------- -# Copyright (C) 2003 Mark Addison , -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; version 2. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -# 02111-1307 USA -# ------------------------------------------------------------------- - -=pod - -=head1 NAME - -SQL::Translator::XMI::Parser::V12 - Version 1.2 parser. - -=cut - -use strict; -use 5.006_001; - -use base qw(SQL::Translator::XMI::Parser); - -my $spec12 = {}; - -$spec12->{taggedValue} = { - name => "taggedValue", - plural => "taggedValues", - default_path => '//UML:TaggedValue[@xmi.id]', - attrib_data => [qw/isSpecification/], - path_data => [ - { - name => "dataValue", - path => 'UML:TaggedValue.dataValue/text()', - }, - { - name => "name", - path => 'xmiDeref(UML:TaggedValue.type/UML:TagDefinition)/@name', - }, - ], -}; - -$spec12->{class} = { - name => "class", - plural => "classes", - isRoot => 1, - default_path => '//UML:Class[@xmi.id]', - attrib_data => - [qw/name visibility isSpecification isRoot isLeaf isAbstract isActive/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - ], - kids => [ - { - name => "attributes", - # name in data returned - path => "UML:Classifier.feature/UML:Attribute", - class => "attribute", - # Points to class in spec. get_attributes() called to parse it and - # adds filter_attributes to the args for get_classes(). - multiplicity => "*", - # How many we get back. Use '1' for 1 and '*' for lots. - # TODO If not set then decide depening on the return? - }, - { - name => "operations", - path => "UML:Classifier.feature/UML:Operation", - class => "operation", - multiplicity => "*", - }, - { - name => "taggedValues", - path => 'UML:ModelElement.taggedValue/UML:TaggedValue', - class => "taggedValue", - multiplicity => "*", - map => "name", - # Add a _map_taggedValues to the data. Its a hash of the name data - # which refs the normal list of kids - }, - { - name => "associationEnds", - path => '//UML:AssociationEnd.participant/UML:Class[@xmi.idref="${xmi.id}"]/../..', - # ${xmi.id} is a variable sub from the data defined for this thing. - # Not standard XPath! Done in the get sub - class => "AssociationEnd", - multiplicity => "*", - }, - ], -}; - -$spec12->{attribute} = { - name => "attribute", - plural => "attributes", - default_path => '//UML:Classifier.feature/UML:Attribute[@xmi.id]', - attrib_data => - [qw/name visibility isSpecification ownerScope/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - { - name => "initialValue", - path => 'UML:Attribute.initialValue/UML:Expression/@body', - }, - ], - kids => [ - { - name => "taggedValues", - path => 'UML:ModelElement.taggedValue/UML:TaggedValue', - class => "taggedValue", - multiplicity => "*", - map => "name", - }, - { - name => "dataType", - path => 'xmiDeref(UML:StructuralFeature.type/UML:DataType)', - class => "dataType", - multiplicity => "1", - }, - ], -}; - -$spec12->{dataType} = { - name => "datatype", - plural => "datatypes", - isRoot => 1, - default_path => '//UML:DataType[@xmi.id]', - attrib_data => - [qw/name visibility isSpecification isRoot isLeaf isAbstract/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - ], - kids => [ - { - name => "taggedValues", - path => 'UML:ModelElement.taggedValue/UML:TaggedValue', - class => "taggedValue", - multiplicity => "*", - map => "name", - }, - ], -}; - - - -$spec12->{operation} = { - name => "operation", - plural => "operations", - default_path => '//UML:Classifier.feature/UML:Operation[@xmi.id]', - attrib_data => - [qw/name visibility isSpecification ownerScope isQuery - concurrency isRoot isLeaf isAbstract/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - ], - kids => [ - { - name => "parameters", - path => "UML:BehavioralFeature.parameter/UML:Parameter", - class => "parameter", - multiplicity => "*", - }, - { - name => "taggedValues", - path => 'UML:ModelElement.taggedValue/UML:TaggedValue', - class => "taggedValue", - multiplicity => "*", - map => "name", - }, - ], -}; - -$spec12->{parameter} = { - name => "parameter", - plural => "parameters", - default_path => '//UML:Parameter[@xmi.id]', - attrib_data => [qw/name isSpecification kind/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - { - name => "datatype", - path => 'xmiDeref(UML:StructuralFeature.type/UML:DataType)/@name', - }, - ], -}; - -$spec12->{association} = { - name => "association", - plural => "associations", - isRoot => 1, - default_path => '//UML:Association[@xmi.id]', - attrib_data => [qw/name visibility isSpecification isNavigable ordering aggregation targetScope changeability/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - ], - kids => [ - { - name => "associationEnds", - path => "UML:Association.connection/UML:AssociationEnd", - class => "AssociationEnd", - multiplicity => "*", - }, - ], -}; - -$spec12->{AssociationEnd} = { - name => "End", - plural => "Ends", - default_path => '//UML:AssociationEnd', - attrib_data => [qw/name visibility isSpecification isNavigable ordering aggregation targetScope changeability/], - path_data => [ - { - name => "stereotype", - path => 'xmiDeref(UML:ModelElement.stereotype/UML:Stereotype)/@name', - default => "", - }, - { - name => "className", - path => 'xmiDeref(UML:AssociationEnd.participant/UML:Class)/@name', - default => "", - }, - ], - kids => [ - { - name => "association", - path => "../..", - class => "association", - multiplicity => "1", - }, - { - name => "participant", - path => "xmiDeref(UML:AssociationEnd.participant/UML:Class)", - class => "class", - multiplicity => "1", - }, - { - name => "multiplicity", - #path => "xmiDeref(UML:AssociationEnd.multiplicity/UML:Multiplicity)", - path => 'UML:AssociationEnd.multiplicity/UML:Multiplicity', - class => "multiplicity", - multiplicity => "1", - }, - ], -}; - -$spec12->{multiplicity} = { - name => "multiplicity", - plural => "multiplicities", - default_path => '//UML:Multiplicity[@xmi.id]', - attrib_data => [qw//], - path_data => [ - { - name => "rangeLower", - path => 'xmiDeref(UML:Multiplicity.range/UML:MultiplicityRange)/@lower', - }, - { - name => "rangeUpper", - path => 'xmiDeref(UML:Multiplicity.range/UML:MultiplicityRange)/@upper', - }, - ], -}; - -# Set the spec and have the get_* methods generated -__PACKAGE__->XmiSpec($spec12); - - -1; #=========================================================================== - -__END__ - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 SEE ALSO - -perl(1). - -=head1 TODO - -=head1 BUGS - -=head1 VERSION HISTORY - -=head1 AUTHOR - -grommit - -=cut diff --git a/t/21xml-xmi-parser.t b/t/21xml-xmi-parser.t deleted file mode 100644 index 558252e..0000000 --- a/t/21xml-xmi-parser.t +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/perl -w -# vim:filetype=perl - -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -# -# Tests basic functionality and the default xmi2schema -# - -use strict; -use FindBin qw/$Bin/; -use Data::Dumper; - -# run test with -d for debug -my %opt; -BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; } -use constant DEBUG => (exists $opt{d} ? 1 : 0); - -use Test::More; -use Test::Exception; -use Test::SQL::Translator qw(maybe_plan); -use SQL::Translator; -use SQL::Translator::Schema::Constants; - -# Usefull test subs for the schema objs -#============================================================================= - -my %ATTRIBUTES; -$ATTRIBUTES{field} = [qw/ -name -data_type -default_value -size -is_primary_key -is_unique -is_nullable -is_foreign_key -is_auto_increment -/]; - -sub test_field { - my ($fld,$test) = @_; - die "test_field needs a least a name!" unless $test->{name}; - my $name = $test->{name}; - - foreach my $attr ( @{$ATTRIBUTES{field}} ) { - if ( exists $test->{$attr} ) { - my $ans = $test->{$attr}; - if ( $attr =~ m/^is_/ ) { - if ($ans) { ok $fld->$attr, " $name - $attr true"; } - else { ok !$fld->$attr, " $name - $attr false"; } - } - else { - is $fld->$attr, $ans, " $name - $attr = '" - .(defined $ans ? $ans : "NULL" )."'"; - } - } - else { - ok !$fld->$attr, "$name - $attr not set"; - } - } -} - -sub test_table { - my $tbl = shift; - my %arg = @_; - my $name = $arg{name} || die "Need a table name to test."; - my @fldnames = map { $_->{name} } @{$arg{fields}}; - is_deeply( [ map {$_->name} $tbl->get_fields ], - [ map {$_->{name}} @{$arg{fields}} ], - "Table $name\'s fields" ); - foreach ( @{$arg{fields}} ) { - my $name = $_->{name} || die "Need a field name to test."; - test_field( $tbl->get_field($name), $_ ); - } -} - -# Testing 1,2,3,.. -#============================================================================= - -maybe_plan(103, - 'SQL::Translator::Parser::XML::XMI', - 'SQL::Translator::Producer::MySQL'); - -my $testschema = "$Bin/data/xmi/Foo.poseidon2.xmi"; -die "Can't find test schema $testschema" unless -e $testschema; - -my $obj; -$obj = SQL::Translator->new( - filename => $testschema, - from => 'XML-XMI', - to => 'MySQL', - debug => DEBUG, - show_warnings => 1, -); -my $sql = $obj->translate; -print $sql if DEBUG; - -# -# Test the schema -# -my $scma = $obj->schema; -my @tblnames = map {$_->name} $scma->get_tables; -is_deeply( \@tblnames, [qw/Foo PrivateFoo Recording CD Track ProtectedFoo/] - ,"tables"); - -# -# Tables -# -# Foo -# -test_table( $scma->get_table("Foo"), - name => "Foo", - fields => [ - { - name => "fooid", - data_type => "int", - default_value => undef, - is_nullable => 1, - is_primary_key => 1, - }, - { - name => "name", - data_type => "varchar", - default_value => "", - is_nullable => 1, - }, - { - name => "protectedname", - data_type => "varchar", - default_value => undef, - is_nullable => 1, - }, - { - name => "privatename", - data_type => "varchar", - default_value => undef, - is_nullable => 1, - }, - ], -); - -# -# Recording -# -test_table( $scma->get_table("Recording"), - name => "Recording", - fields => [ - { - name => "recordingid", - data_type => "int", - default_value => undef, - is_nullable => 1, - is_primary_key => 1, - }, - { - name => "title", - data_type => "varchar", - is_nullable => 1, - }, - { - name => "type", - data_type => "varchar", - is_nullable => 1, - }, - ], -); - -# -# Track -# -test_table( $scma->get_table("Track"), - name => "Track", - fields => [ - { - name => "trackid", - data_type => "int", - default_value => undef, - is_nullable => 1, - is_primary_key => 1, - }, - { - name => "recordingid", - data_type => "int", - default_value => undef, - is_nullable => 1, - is_primary_key => 0, - #is_foreign_key => 1, - }, - { - name => "number", - data_type => "int", - default_value => "1", - is_nullable => 1, - }, - { - name => "name", - data_type => "varchar", - is_nullable => 1, - }, - ], -); diff --git a/t/22xml-xmi-parser-visibility.t b/t/22xml-xmi-parser-visibility.t deleted file mode 100644 index 0502234..0000000 --- a/t/22xml-xmi-parser-visibility.t +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -w -# vim:filetype=perl - -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -# -# Tests the visibility arg. -# - -use strict; -use FindBin qw/$Bin/; -use Data::Dumper; - -# run test with -d for debug -my %opt; -BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; } -use constant DEBUG => (exists $opt{d} ? 1 : 0); - -use Test::More; -use Test::Exception; -use Test::SQL::Translator qw(maybe_plan); -use SQL::Translator; -use SQL::Translator::Schema::Constants; - - -maybe_plan(8, - 'SQL::Translator::Parser::XML::XMI', - 'SQL::Translator::Producer::MySQL'); - -my $testschema = "$Bin/data/xmi/Foo.poseidon2.xmi"; -die "Can't find test schema $testschema" unless -e $testschema; - -my @testd = ( - "" => [qw/Foo PrivateFoo Recording CD Track ProtectedFoo/], - [qw/fooid name protectedname privatename/], - "public" => [qw/Foo Recording CD Track/], - [qw/fooid name /], - "protected" => [qw/Foo Recording CD Track ProtectedFoo/], - [qw/fooid name protectedname/], - "private" => [qw/Foo PrivateFoo Recording CD Track ProtectedFoo/], - [qw/fooid name protectedname privatename/], -); - while ( my ($vis,$tables,$foofields) = splice @testd,0,3 ) { - my $obj; - $obj = SQL::Translator->new( - filename => $testschema, - from => 'XML-XMI', - to => 'MySQL', - debug => DEBUG, - show_warnings => 1, - parser_args => { - visibility => $vis, - }, - ); - my $sql = $obj->translate; - print $sql if DEBUG; - my $scma = $obj->schema; - - # Tables from classes - my @tblnames = map {$_->name} $scma->get_tables; - is_deeply( \@tblnames, $tables, "Tables with visibility => '$vis'"); - - # Fields from attributes - my @fldnames = map {$_->name} $scma->get_table("Foo")->get_fields; - is_deeply( \@fldnames, $foofields, "Foo fields with visibility => '$vis'"); -} diff --git a/t/23xml-xmi-parser-rational.t b/t/23xml-xmi-parser-rational.t deleted file mode 100644 index b7aa8fc..0000000 --- a/t/23xml-xmi-parser-rational.t +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/perl -w -# vim:filetype=perl - -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -use strict; -use FindBin qw/$Bin/; -use Data::Dumper; - -# run with -d for debug -my %opt; -BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; } -use constant DEBUG => (exists $opt{d} ? 1 : 0); - -use Test::More; -use Test::Exception; -use Test::SQL::Translator qw(maybe_plan); -use SQL::Translator; -use SQL::Translator::Schema::Constants; - -BEGIN { - maybe_plan(92, - 'SQL::Translator::Parser::XML::XMI::Rational', - 'SQL::Translator::Producer::MySQL'); -} - -# Usefull test subs for the schema objs -#============================================================================= - -sub test_field { - my ($f1,$test) = @_; - - is( $f1->name, $test->{name}, " Field name '$test->{name}'" ); - - is( $f1->data_type, $test->{data_type}, " Type is '$test->{data_type}'" ) - if exists $test->{data_type}; - - is( $f1->size, $test->{size}, " Size is '$test->{size}'" ) - if exists $test->{size}; - - is( $f1->default_value, $test->{default_value}, - " Default value is ".(defined($test->{default_value}) ? "'$test->{default_value}'" : "UNDEF" ) ) - if exists $test->{default_value}; - - is( $f1->is_nullable, $test->{is_nullable}, - " ".($test->{is_nullable} ? 'can' : 'cannot').' be null' ) - if exists $test->{is_nullable}; - - is( $f1->is_unique, $test->{is_unique}, - " ".($test->{is_unique} ? 'can' : 'cannot').' be unique' ) - if exists $test->{is_unique}; - - is( $f1->is_primary_key, $test->{is_primary_key}, - " is ".($test->{is_primary_key} ? '' : 'not').' a primary_key' ) - if exists $test->{is_primary_key}; - - is( $f1->is_foreign_key, $test->{is_foreign_key}, - " is ".($test->{is_foreign_key} ? '' : 'not').' a foreign_key' ) - if exists $test->{is_foreign_key}; - - is( $f1->is_auto_increment, $test->{is_auto_increment}, - " is ".($test->{is_auto_increment} ? '' : 'not').' an auto_increment' ) - if exists $test->{is_auto_increment}; -} - -sub constraint_ok { - my ($con,$test) = @_; - #$test->{name} ||= ""; - - if ( exists $test->{name} ) { - is( $con->name, $test->{name}, " Constraint '$test->{name}'" ); - } - else { - ok( $con, " Constraint" ); - } - - is( $con->type, $test->{type}, " type is '$test->{type}'" ) - if exists $test->{type}; - - is( $con->table->name, $test->{table}, " table is '$test->{table}'" ) - if exists $test->{table}; - - is( join(",",$con->fields), $test->{fields}, - " fields is '$test->{fields}'" ) - if exists $test->{fields}; - - is( $con->reference_table, $test->{reference_table}, - " reference_table is '$test->{reference_table}'" ) - if exists $test->{reference_table}; - - is( join(",",$con->reference_fields), $test->{reference_fields}, - " reference_fields is '$test->{reference_fields}'" ) - if exists $test->{reference_fields}; - - is( $con->match_type, $test->{match_type}, - " match_type is '$test->{match_type}'" ) - if exists $test->{match_type}; - - is( $con->on_delete, $test->{on_delete}, - " on_delete is '$test->{on_delete}'" ) - if exists $test->{on_delete}; - - is( $con->on_update, $test->{on_update}, - " on_update is '$test->{on_update}'" ) - if exists $test->{on_update}; -} - -sub test_table { - my $tbl = shift; - my %arg = @_; - $arg{constraints} ||= []; - my $name = $arg{name} || die "Need a table name to test."; - - my @fldnames = map { $_->{name} } @{$arg{fields}}; - is_deeply( [ map {$_->name} $tbl->get_fields ], - [ map {$_->{name}} @{$arg{fields}} ], - "Table $name\'s fields" ); - foreach ( @{$arg{fields}} ) { - my $name = $_->{name} || die "Need a field name to test."; - test_field( $tbl->get_field($name), $_ ); - } - - if ( my @tcons = @{$arg{constraints}} ) { - my @cons = $tbl->get_constraints; - is(scalar(@cons), scalar(@tcons), - "Table $name has ".scalar(@tcons)." Constraints"); - foreach ( @cons ) { - my $ans = { table => $tbl->name, %{shift @tcons}}; - constraint_ok( $_, $ans ); - } - } -} - -# Testing 1,2,3,.. -#============================================================================= - -my $testschema = "$Bin/data/xmi/OrderDB.rationalprofile.poseidon2.xmi"; -die "Can't find test schema $testschema" unless -e $testschema; - -my $obj; -$obj = SQL::Translator->new( - filename => $testschema, - from => 'XML-XMI-Rational', - to => 'MySQL', - debug => DEBUG, - show_warnings => 1, - add_drop_table => 0, -); -my $sql = $obj->translate; -print $sql if DEBUG; - -# -# Test the schema -# -my $scma = $obj->schema; -is( $scma->is_valid, 1, 'Schema is valid' ); -my @tblnames = map {$_->name} $scma->get_tables; -is(scalar(@{$scma->get_tables}), scalar(@tblnames), "Right number of tables"); -is_deeply( \@tblnames, [qw/Order OrderLine Customer/] - ,"tables"); - -test_table( $scma->get_table("Customer"), - name => "Customer", - fields => [ - { - name => "customerID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - }, - { - name => "name", - data_type => "VARCHAR", - size => 255, - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - }, - { - name => "email", - data_type => "VARCHAR", - size => 255, - default_value => undef, - is_nullable => 1, - is_primary_key => 0, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => "customerID", - }, - { - name => "UniqueEmail", - type => "UNIQUE", - fields => "email", - }, - ], -); - -test_table( $scma->get_table("Order"), - name => "Order", - fields => [ - { - name => "orderID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - }, - { - name => "customerID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - is_foreign_key => 1, - }, - { - name => "orderDate", - data_type => "DATE", - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => "orderID", - }, - { - type => "FOREIGN KEY", - fields => "customerID", - reference_table => "Customer", - reference_fields => "customerID", - }, - ], - # TODO - #indexes => [ - # { - # name => "idxOrderDate", - # type => "INDEX", - # fields => "orderDate", - # }, - #], -); - - -test_table( $scma->get_table("OrderLine"), - name => "OrderLine", - fields => [ - { - name => "lineNumber", - data_type => "INT", - size => 10, - default_value => 1, - is_nullable => 0, - is_primary_key => 1, - }, - { - name => "orderID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - is_foreign_key => 1, - }, - { - name => "quantity", - data_type => "INT", - size => 2, - default_value => 1, - is_nullable => 0, - is_primary_key => 0, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => "lineNumber,orderID", - }, - { - type => "FOREIGN KEY", - fields => "orderID", - reference_table => "Order", - reference_fields => "orderID", - }, - ], -); diff --git a/t/28xml-xmi-parser-sqlfairy.t b/t/28xml-xmi-parser-sqlfairy.t deleted file mode 100644 index bc8f616..0000000 --- a/t/28xml-xmi-parser-sqlfairy.t +++ /dev/null @@ -1,297 +0,0 @@ -#!/usr/bin/perl -w -# vim:filetype=perl - -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -use strict; -use FindBin qw/$Bin/; -use Data::Dumper; - -# run with -d for debug -my %opt; -BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; } -use constant DEBUG => (exists $opt{d} ? 1 : 0); - -use Test::More; -use Test::SQL::Translator; -use SQL::Translator; -use SQL::Translator::Schema::Constants; - -# Testing 1,2,3,.. -#============================================================================= - -BEGIN { - maybe_plan(335, - 'SQL::Translator::Parser::XML::XMI::SQLFairy', - 'SQL::Translator::Producer::MySQL'); -} - -my $testschema = "$Bin/data/xmi/OrderDB.sqlfairy.poseidon2.xmi"; -die "Can't find test schema $testschema" unless -e $testschema; - -my $obj; -$obj = SQL::Translator->new( - filename => $testschema, - from => 'XML-XMI-SQLFairy', - to => 'MySQL', - debug => DEBUG, - show_warnings => 1, -); -my $sql = $obj->translate; -ok( $sql, "Got some SQL"); -print $sql if DEBUG; -print "Translator:",Dumper($obj) if DEBUG; - - -# -# Test the schema -# -my $scma = $obj->schema; -is( $scma->is_valid, 1, 'Schema is valid' ); -my @tblnames = map {$_->name} $scma->get_tables; -is(scalar(@{$scma->get_tables}), scalar(@tblnames), "Right number of tables"); -is_deeply( \@tblnames, - [qw/Order OrderLine Customer ContactDetails ContactDetails_Customer/] -,"tables"); - -table_ok( $scma->get_table("Customer"), { - name => "Customer", - extra => { - mysql_table_type => 'InnoDB' - }, - fields => [ - { - name => "name", - data_type => "VARCHAR", - size => 255, - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - }, - { - name => "email", - data_type => "VARCHAR", - size => 255, - default_value => undef, - is_nullable => 1, - is_primary_key => 0, - }, - { - name => "CustomerID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - is_auto_increment => 1, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => ["CustomerID"], - }, - #{ - # name => "UniqueEmail", - # type => "UNIQUE", - # fields => ["email"], - #}, - ], -}); - -table_ok( $scma->get_table("ContactDetails_Customer"), { - name => "ContactDetails_Customer", - extra => { - mysql_table_type => 'InnoDB' - }, - fields => [ - { - name => "ContactDetailsID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - is_auto_increment => 0, - is_foreign_key => 1, - }, - { - name => "CustomerID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - is_auto_increment => 0, - is_foreign_key => 1, - }, - ], - constraints => [ - { - type => "FOREIGN KEY", - fields => ["ContactDetailsID"], - reference_table => "ContactDetails", - reference_fields => ["ContactDetailsID"], - }, - { - type => "FOREIGN KEY", - fields => ["CustomerID"], - reference_table => "Customer", - reference_fields => ["CustomerID"], - }, - { - type => "PRIMARY KEY", - fields => ["ContactDetailsID","CustomerID"], - }, - ], -}); - -table_ok( $scma->get_table("ContactDetails"), { - name => "ContactDetails", - extra => { - mysql_table_type => 'InnoDB' - }, - fields => [ - { - name => "address", - data_type => "VARCHAR", - size => "255", - default_value => undef, - is_nullable => 1, - is_primary_key => 0, - }, - { - name => "telephone", - data_type => "VARCHAR", - size => "255", - default_value => undef, - is_nullable => 1, - is_primary_key => 0, - }, - { - name => "ContactDetailsID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - is_auto_increment => 1, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => ["ContactDetailsID"], - }, - ], -}); - -table_ok( $scma->get_table("Order"), { - name => "Order", - extra => { - mysql_table_type => 'InnoDB' - }, - fields => [ - { - name => "invoiceNumber", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - is_auto_increment => 1, - }, - { - name => "orderDate", - data_type => "DATE", - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - }, - { - name => "CustomerID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 0, - is_foreign_key => 1, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => ["invoiceNumber"], - }, - { - type => "FOREIGN KEY", - fields => ["CustomerID"], - reference_table => "Customer", - reference_fields => ["CustomerID"], - }, - ], - # TODO - #indexes => [ - # { - # name => "idxOrderDate", - # type => "INDEX", - # fields => ["orderDate"], - # }, - #], -}); - - -table_ok( $scma->get_table("OrderLine"), { - name => "OrderLine", - extra => { - mysql_table_type => 'InnoDB' - }, - fields => [ - { - name => "lineNumber", - data_type => "INT", - size => 255, - default_value => 1, - is_nullable => 0, - is_primary_key => 0, - }, - { - name => "quantity", - data_type => "INT", - size => 255, - default_value => 1, - is_nullable => 0, - is_primary_key => 0, - }, - { - name => "OrderLineID", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 0, - is_primary_key => 1, - is_auto_increment => 1, - }, - { - name => "invoiceNumber", - data_type => "INT", - size => 10, - default_value => undef, - is_nullable => 1, - is_primary_key => 1, - }, - ], - constraints => [ - { - type => "PRIMARY KEY", - fields => ["OrderLineID","invoiceNumber"], - }, - { - type => "FOREIGN KEY", - fields => ["invoiceNumber"], - reference_table => "Order", - reference_fields => ["invoiceNumber"], - }, - ], -}); diff --git a/t/data/xmi/Foo.poseidon2.xmi b/t/data/xmi/Foo.poseidon2.xmi deleted file mode 100644 index e6f218e..0000000 --- a/t/data/xmi/Foo.poseidon2.xmi +++ /dev/null @@ -1,280 +0,0 @@ - - - - - Netbeans XMI Writer - 1.0 - - - - - - - - - - - - - - - - - - - - - - <p> - -</p> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Class - - - Class - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Attribute - - - Attribute - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/t/data/xmi/Foo.poseidon2.zuml b/t/data/xmi/Foo.poseidon2.zuml deleted file mode 100644 index 3f2bdf9..0000000 Binary files a/t/data/xmi/Foo.poseidon2.zuml and /dev/null differ diff --git a/t/data/xmi/MAGE.poseidon.xmi b/t/data/xmi/MAGE.poseidon.xmi deleted file mode 100644 index 363b5ef..0000000 --- a/t/data/xmi/MAGE.poseidon.xmi +++ /dev/null @@ -1,27550 +0,0 @@ - - - - - Netbeans XMI Writer - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/t/data/xmi/MAGE.rose.xmi b/t/data/xmi/MAGE.rose.xmi deleted file mode 100644 index 09ff9ff..0000000 --- a/t/data/xmi/MAGE.rose.xmi +++ /dev/null @@ -1,30556 +0,0 @@ - - - - - - Unisys.JCR.1 - 1.3.2 - - - - - - - MAGE-OM - - - - - - - - - ArrayDesign - - - - - - - - - - - - ArrayDesign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - version - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - numberOfFeatures - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - PhysicalArrayDesign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ZoneLayout - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - numFeaturesPerRow - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - numFeaturesPerCol - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - spacingBetweenRows - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - spacingBetweenCols - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ZoneGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - spacingsBetweenZonesX - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - spacingsBetweenZonesY - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - zonesPerX - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - zonesPerY - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Zone - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - row - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - column - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - upperLeftX - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - upperLeftY - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - lowerRightX - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - lowerRightY - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ReporterGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FeatureGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - featureWidth - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - featureLength - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - featureHeight - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - DesignElementGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CompositeGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Design{3AC7ADC3004C} - - - - - - - - - arrayDesign - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - ProtocolApplications{3ADB952F007D} - - - - - - - - - protocolApplications - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - CompositeGroups{3B00509100C7} - - - - - - - - - compositeGroups - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - DesignProviders{3ADB947901B2} - - - - - - - - - designProviders - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - ReporterGroups{3B7D5DEB0219} - - - - - - - - - reporterGroups - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - FeatureGroups{3B7D600601A6} - - - - - - - - - featureGroups - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Groups{3ADB98E802D6} - - - - - - - - - zoneGroups - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - SurfaceType{3B71A7900060} - - - - - - - - - surfaceType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Layouts{3ADB9B26017D} - - - - - - - - - zoneLayout - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DistanceUnit{3ADC75A500E6} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Locations{3ADB9AF90074} - - - - - - - - - zoneLocations - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DistanceUnit{3ADC75DA0056} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Zone{3B74603F03A9} - - - - - - - - - zone - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - DistanceUnit{3B6DD8610334} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Zone{3B799254016D} - - - - - - - - - zone - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Reporters{3B1EA3210055} - - - - - - - - - reporters - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - DistanceUnit{3B1C146D036A} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Group2Feature{3B1EA32400B4} - - - - - - - - - features - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - featureGroup - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - TechnologyType{3B72C4FF001E} - - - - - - - - - technologyType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - FeatureShape{3B72C550029B} - - - - - - - - - featureShape - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Species{3B0D1F430111} - - - - - - - - - species - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Types{3B71A78B022F} - - - - - - - - - types - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - CompositeSequences{3B1EA31E0029} - - - - - - - - - compositeSequences - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - String - - - - - - - - - int - - - - - - - - - float - - - - - - - - - Constraint-G.711 - - - - - - rank: 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Constraint-G.712 - - - - - - rank: 4 - - - - - - - - - - - - - - - - - - - - - - - - - - Constraint-G.713 - - - - - - rank: 5 - - - - - - - - - - - - - - - - - Constraint-G.714 - - - - - - rank: 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Constraint-G.715 - - - - - - rank: 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Constraint-G.716 - - - - - - rank: 6 - - - - - - - - - - - Array - - - - - - - - - - - - Array - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - arrayIdentifier - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - arrayXOrigin - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - arrayYOrigin - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - originRelativeTo - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - FeatureDefect - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ArrayGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - barcode - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - arraySpacingX - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - arraySpacingY - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - numArrays - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - orientationMark - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - orientationMarkPosition - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - width - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - length - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ArrayManufacture - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - manufacturingDate - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - tolerance - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ArrayManufactureDeviation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fiducial - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ManufactureLIMS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - quality - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ManufactureLIMSBiomaterial - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bioMaterialPlateIdentifier - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - bioMaterialPlateRow - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - bioMaterialPlateCol - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - PositionDelta - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - deltaX - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - deltaY - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - ZoneDefect - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Arrays2ArrayGroup{3AC7AF910263} - - - - - - - - - arrays - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - arrayGroup - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - Information2Arrays{3AD289180219} - - - - - - - - - information - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - arrays - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - ArrayManufactureDeviations{3AD289BA00A9} - - - - - - - - - arrayManufactureDeviations - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Array{3ADC7A13039A} - - - - - - - - - array - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - Defects{3AD289F000CF} - - - - - - - - - featureDefects - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - PositionDelta{3AD28A6500EB} - - - - - - - - - positionDelta - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Feature{3AD28D6B01FD} - - - - - - - - - feature - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - DefectType{3B71ACBA0332} - - - - - - - - - defectType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Fiducials{3B095E090157} - - - - - - - - - fiducials - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DistanceUnit{3B6B23FC0070} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - SubstrateType{3B745D0B031D} - - - - - - - - - substrateType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ProtocolApplications{3B09486701AE} - - - - - - - - - protocolApplications - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - FeatureLIMS{3B1BF280005E} - - - - - - - - - featureLIMSs - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ArrayManufacturers{3B1C1F8C03AA} - - - - - - - - - arrayManufacturers - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - QualityControlStatistics{3B73012B0257} - - - - - - - - - qualityControlStatistics - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Adjustments{3AD28A6F02C6} - - - - - - - - - adjustments - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DistanceUnit{3B6B23D90110} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - FiducialType{3B71AD7500E2} - - - - - - - - - fiducialType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Position{3B73006A03B8} - - - - - - - - - position - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Feature{3B1BF2EF02A3} - - - - - - - - - feature - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - IdentifierLIMS{3B1BF75E0345} - - - - - - - - - identifierLIMS - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BioMaterial{3B1C107802B9} - - - - - - - - - bioMaterial - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - DistanceUnit{3B71B07D012E} - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - PositionDelta{3B74621F0218} - - - - - - - - - positionDelta - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DefectType{3B7460E70274} - - - - - - - - - defectType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - enum {top,bottom,left,right} - - - - - - - - - BioMaterial - - - - - - - - - - - - BioSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioMaterial - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LabeledExtract - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioSample - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compound - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - isSolvent - - - - - - - - 1 - 1 - - - - - - - - - - false - - - - - - - - - - - CompoundMeasurement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioMaterialMeasurement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Treatment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - order - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - SourceContact{3B72BB590315} - - - - - - - - - sourceContact - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Treatments{3ADDDA1700C4} - - - - - - - - - treatments - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BioMaterial{3B045E2D01D0} - - - - - - - - - bioMaterial - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - MaterialType{3B71D3C20394} - - - - - - - - - materialType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Characteristics{3B72BADB0093} - - - - - - - - - characteristics - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - QualityControlStatistics{3B730EE201E8} - - - - - - - - - qualityControlStatistics - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Labels{3B1E50BE002E} - - - - - - - - - labels - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Type{3B71D28D02DB} - - - - - - - - - type - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Components{3ADDDC290275} - - - - - - - - - componentCompounds - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Compound{3B032237005F} - - - - - - - - - compound - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - MerckIndex{3B742E7D0185} - - - - - - - - - merckIndex - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ExternalLIMS{3D3310C202FC} - - - - - - - - - externalLIMS - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Labels{3B1C2D6F02F7} - - - - - - - - - labels - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Compounds{3B02A36C02AB} - - - - - - - - - compoundMeasurements - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Measurement{3B02A39E0357} - - - - - - - - - measurement - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Sources{3ADDDB4602A1} - - - - - - - - - sourceBioMaterialMeasurements - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Measurement{3B045E360179} - - - - - - - - - measurement - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - SourceBioMaterial{3B03060A0339} - - - - - - - - - sourceBioMaterialMeasurements - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Measurement{3ADDD6B8020E} - - - - - - - - - actionMeasurement - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Action{3B71D0C70170} - - - - - - - - - action - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - boolean - - - - - - - - - HigherLevelAnalysis - - - - - - - - - - - - BioAssayDataCluster - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Node - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NodeContents - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NodeValue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - name - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - value - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - Nodes{3B1D1A6A027F} - - - - - - - - - nodes - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ClusterBioAssayData{3B1D1C3A0381} - - - - - - - - - clusterBioAssayData - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - AnalysisResults{3B01830B012A} - - - - - - - - - analysisResults - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Nodes{3B1D1A900284} - - - - - - - - - nodes - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Contents{3B1D1AC002A1} - - - - - - - - - nodeContents - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - NodeValue{3BC3932200BE} - - - - - - - - - nodeValue - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DesignElementDimension{3B1D1C10016E} - - - - - - - - - designElementDimension - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - QuantitationDimension{3B1D1C1400DD} - - - - - - - - - quantitationDimension - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BioAssayDimension{3B1D1C170345} - - - - - - - - - bioAssayDimension - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Scale{3BC3944E0264} - - - - - - - - - scale - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DataType{3BC395590150} - - - - - - - - - dataType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Type{3BC46F630192} - - - - - - - - - type - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - any - - - - - - - - - BioAssay - - - - - - - - - - - - PhysicalBioAssay - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DerivedBioAssay - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Image - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - BioAssay - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Channel - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MeasuredBioAssay - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayCreation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FeatureExtraction - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hybridization - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ImageAcquisition - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayTreatment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PhysicalBioAssayData{3B0316C20184} - - - - - - - - - physicalBioAssayData - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Source{3B043BD80182} - - - - - - - - - physicalBioAssaySource - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Creation2Target{3B04509C003C} - - - - - - - - - physicalBioAssayTarget - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - bioAssayCreation - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - Treatments{3B0455C3030A} - - - - - - - - - physicalBioAssay - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - bioAssayTreatments - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Target{3B0455CA0093} - - - - - - - - - target - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Data{3B3B4CD70050} - - - - - - - - - derivedBioAssayData - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - Type{3B71B63C0237} - - - - - - - - - type - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Target{3B6C819501ED} - - - - - - - - - bioAssayMapTarget - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - derivedBioAssayMap - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Channels{3B043E4901EF} - - - - - - - - - channels - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Images{3B1C2C1F02A4} - - - - - - - - - images - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Format{3B71B7EC035B} - - - - - - - - - format - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Channels{3B043DDB035A} - - - - - - - - - channels - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - Sources{3B1D4D7D025A} - - - - - - - - - sourceBioAssays - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - BioAssay{3B01A01D0058} - - - - - - - - - bioAssay - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - BioAssays{3B019FB503AC} - - - - - - - - - bioAssays - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - FactorValues{3B01CCB501A8} - - - - - - - - - bioAssayFactorValues - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BioAssays{3B02CBD302FD} - - - - - - - - - bioAssays - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - TopLevelBioAssays{3B0D291E03AE} - - - - - - - - - topLevelBioAssays - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Channel{3B1D153B0231} - - - - - - - - - channel - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - FeatureExtraction2Target{3B043C860359} - - - - - - - - - measuredBioAssayTarget - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - featureExtraction - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - Data{3B3B4CBF01B4} - - - - - - - - - - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - measuredBioAssayData - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - Constraint-G.720 - - - - - - ordered rank: 3 - - - - - - - - - Constraint-G.721 - - - - - - ordered rank: 1 - - - - - - - - - - - - - AuditAndSecurity - - - - - - - - - - - - Person - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lastName - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - firstName - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - midInitials - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Security - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Audit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - date - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - action - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - Organization - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SecurityGroup - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contact - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - address - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - phone - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - tollFreePhone - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - email - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - fax - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Affiliation{3B04130C021B} - - - - - - - - - affiliation - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Performers{3B741EB200B0} - - - - - - - - - performers - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Security{3B7170AC03D0} - - - - - - - - - security - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - SecurityGroups{3B0415B3034E} - - - - - - - - - securityGroups - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Owner{3B1C27E50384} - - - - - - - - - owner - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - AuditTrail{3B3CFAD802D7} - - - - - - - - - auditTrail - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Performer{3B0415010121} - - - - - - - - - performer - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Parent{3B9BF34F0250} - - - - - - - - - parent - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Members{3B0415EE0385} - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - members - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - Roles{3B8ABBEB027D} - - - - - - - - - roles - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Providers{3B017C1A0098} - - - - - - - - - providers - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - HardwareManufacturers{3B041B6E00F4} - - - - - - - - - hardwareManufacturers - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - SoftwareManufacturers{3B041B930101} - - - - - - - - - softwareManufacturers - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Contacts{3B1E500F007D} - - - - - - - - - contacts - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - Date - - - - - - - - - enum {creation,modification} - - - - - - - - - BioAssayData - - - - - - - - - - - - BioAssayData - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QuantitationTypeDimension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayMapping - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DesignElementDimension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayDatum - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - value - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - DerivedBioAssayData - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MeasuredBioAssayData - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QuantitationTypeMapping - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DesignElementMapping - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioDataCube - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cube - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - order - - - - - - - - 1 - 1 - - - - - - - - - - BDQ - - - - - - - - - - - BioDataValues - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioDataTuples - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayDimension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QuantitationTypeMap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Transformation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DesignElementMap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayMap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CompositeSequenceDimension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ReporterDimension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FeatureDimension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sources{3B003B74010B} - - - - - - - - - bioAssayDataSources - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - BioAssayDimension{3B00423D03E4} - - - - - - - - - bioAssayDimension - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DesignElementDimension{3B00427401BC} - - - - - - - - - designElementDimension - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - QuantitationTypeDimension{3B00429A006C} - - - - - - - - - quantitationTypeDimension - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Statistics{3B1BFA8203E1} - - - - - - - - - summaryStatistics - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DataValues{3B3B869A00B8} - - - - - - - - - bioDataValues - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BioAssayData{3B01AFE20176} - - - - - - - - - bioAssayData - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - QuantitationTypes{3AC7A51B021C} - - - - - - - - - quantitationTypes - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - BioAssayMapping{3B003BF202C5} - - - - - - - - - bioAssayMapping - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BioAssayMaps{3B02F80E0042} - - - - - - - - - bioAssayMaps - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - AssayData{3B003F690071} - - - - - - - - - bioAssayTupleData - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DesignElement{3B003F8A0065} - - - - - - - - - designElement - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - QuantitationType{3B003F92016B} - - - - - - - - - quantitationType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Target2Transformation{3B003B31012D} - - - - - - - - - producerTransformation - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - derivedBioAssayDataTarget - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - QuantitationTypeMaps{3B1D52BC020B} - - - - - - - - - quantitationTypeMaps - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Mapping{3B1D530B0345} - - - - - - - - - quantitationTypeMapping - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - designElementMaps{3B1D52BA0027} - - - - - - - - - designElementMaps - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Mapping{3B1D530802A0} - - - - - - - - - designElementMapping - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Target{3B1D4DF30097} - - - - - - - - - targetQuantitationType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - quantitationTypeMaps - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Sources{3B1D4DF70287} - - - - - - - - - sourcesQuantitationType - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - CompositeSequences{3B003E520034} - - - - - - - - - compositeSequences - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Reporters{3B9BF7DB01D1} - - - - - - - - - reporters - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Features{3B9BF892001C} - - - - - - - - - containedFeatures - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - any[][][] - - - - - - - - - enum {BDQ,BQD,DBQ,DQB,QBD,QDB} - - - - - - - - - Experiment - - - - - - - - - - - - Experiment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExperimentDesign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExperimentalFactor - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FactorValue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExperimentDesign{3B013B06031C} - - - - - - - - - experimentDesign - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ExperimentalFactors{3B01CC080069} - - - - - - - - - experimentalFactors - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ReplicateDescription{3B6B2A63027F} - - - - - - - - - replicateDescription - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - QualityControlDescription{3B6B2AA00273} - - - - - - - - - qualityControlDescription - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - NormalizationDescription{3B6B2AE90083} - - - - - - - - - normalizationDescription - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Types{3B71A4740232} - - - - - - - - - types - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Factors{3B01CCF4000E} - - - - - - - - - experimentalFactor - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - factorValues - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Category{3B72EF1800B0} - - - - - - - - - category - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Annotations{3D68160A01BB} - - - - - - - - - annotations - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Measurement{3B01CD9C031D} - - - - - - - - - measurement - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Value{3D6816DD0205} - - - - - - - - - value - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - Protocol - - - - - - - - - - - - Protocol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - title - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Parameter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ParameterValue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - value - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ProtocolApplication - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - activityDate - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - Software - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hardware - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - model - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - make - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - HardwareApplication - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - serialNumber - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - SoftwareApplication - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - version - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - releaseDate - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Parameterizable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ParameterizableApplication - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Softwares{3B041A460383} - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - softwares - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Hardwares{3B041A4C03A0} - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - hardwares - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Protocol{3B1EB6A8023F} - - - - - - - - - protocol - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Type{3B72CBE201C8} - - - - - - - - - type - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Types{3B02ACEF000D} - - - - - - - - - parameterTypes - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Type{3B02AD670286} - - - - - - - - - parameterType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - DataType{3B72CBEC02A8} - - - - - - - - - dataType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DefaultValue{3D6814E6011B} - - - - - - - - - defaultValue - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Values{3B02ADBC0351} - - - - - - - - - parameterValues - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - SoftwareApplications{3B0D1C0D00C9} - - - - - - - - - softwareApplications - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - HardwareApplications{3B0D1C15000C} - - - - - - - - - hardwareApplications - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ProtocolApplications{3B0433370294} - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - protocolApplications - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Software2Hardware{3B041BB50345} - - - - - - - - - hardware - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - softwares - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Softwares{3B041C6E0297} - - - - - - - - - softwares - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Software{3B1EB62D030B} - - - - - - - - - software - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Type{3B72CBE600B5} - - - - - - - - - type - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Hardware{3B1EB6280155} - - - - - - - - - hardware - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Type{3B72CBDF0259} - - - - - - - - - type - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - Description - - - - - - - - - - - - Description - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - DatabaseEntry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - accession - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - accessionVersion - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Database - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - version - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - ExternalReference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - exportedFromServer - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - exportedFromDB - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - exportID - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - exportName - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - OntologyEntry - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - category - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - value - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - description - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Descriptions{3B3CFAC302C3} - - - - - - - - - descriptions - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DatabaseReferences{3B0E37260016} - - - - - - - - - databaseReferences - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - BibliographicReferences{3B0E37280330} - - - - - - - - - bibliographicReferences - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ExternalReference{3B1BD3E000F4} - - - - - - - - - externalReference - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Annotations{3B04110E029A} - - - - - - - - - annotations - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Database{3B0417CF00D3} - - - - - - - - - database - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - OntologyReference{3B71A350003D} - - - - - - - - - ontologyReference - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Type{3B73268201E4} - - - - - - - - - type - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - SequenceDatabases{3B71DEEA01A6} - - - - - - - - - sequenceDatabases - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DataType{3B71BBA301A0} - - - - - - - - - dataType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Scale{3B71BC220333} - - - - - - - - - scale - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Parameters{3B7836640203} - - - - - - - - - parameters - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Associations{3D726252036E} - - - - - - - - - associations - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - OntologyEntries{3B1E97BB00F6} - - - - - - - - - ontologyEntries - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - PolymerType{3B71D95D00DA} - - - - - - - - - polymerType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Type{3B71E0C10366} - - - - - - - - - type - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Species{3B71E13701C1} - - - - - - - - - species - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ControlType{3B72BE1C0163} - - - - - - - - - controlType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - FailTypes{3B72C0580120} - - - - - - - - - failTypes - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - WarningType{3B72C13601B5} - - - - - - - - - warningType - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - Measurement - - - - - - - - - - - - Measurement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - type - - - - - - - - 1 - 1 - - - - - - - - - - absolute - - - - - - - - - value - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - kindCV - - - - - - - - 1 - 1 - - - - - - - - - - other - - - - - - - - - otherKind - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Unit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitName - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - TimeUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - DistanceUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - TemperatureUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - QuantityUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - MassUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - VolumeUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - ConcentrationUnit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - unitNameCV - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - Unit{3B1C1794039C} - - - - - - - - - unit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - DistanceUnit{3ADB9FD70170} - - - - - - - - - distanceUnit - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - enum {absolute,change} - - - - - - - - - enum {time,distance,temperature,quantity,mass,volume,concentration,other} - - - - - - - - - enum {years,months,weeks,d,h,m,s,us,other} - - - - - - - - - enum {fm,pm,nm,um,mm,cm,m,other} - - - - - - - - - enum {degree_C,degree_F,K} - - - - - - - - - enum {mol,amol,fmol,pmol,nmol,umol,mmol,molecules,other} - - - - - - - - - enum {kg,g,mg,ug,ng,pg,fg,other} - - - - - - - - - enum {mL,cc,dL,L,uL,nL,pL,fL,other} - - - - - - - - - enum {M,mM,uM,nM,pM,fM,mg/mL,mL/L,g/L,gram_percent,mass/volume_percent, mass/mass_percent,other} - - - - - - - - - BioEvent - - - - - - - - - - - - BioEvent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Map - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BQS - - - - - - - - - - - - BibliographicReference - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - title - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - authors - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - publication - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - publisher - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - editor - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - year - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - volume - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - issue - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - pages - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - URI - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - BioSequence - - - - - - - - - - - - SeqFeature - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - basis - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - SeqFeatureLocation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - strandType - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - BioSequence - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - length - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - isApproximateLength - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - isCircular - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - sequence - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - SequencePosition - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - start - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - end - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Regions{3B0D2DA602D0} - - - - - - - - - regions - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - SeqFeatures{3B1C1B66021C} - - - - - - - - - seqFeatures - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Subregions{3B0D2DC30032} - - - - - - - - - subregions - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Coordinate{3B1E640101A1} - - - - - - - - - coordinate - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - ImmobilizedCharacteristics{3B0D323B03A9} - - - - - - - - - immobilizedCharacteristics - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - BiologicalCharacteristics{3B1C028302F7} - - - - - - - - - biologicalCharacteristics - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - enum {experimental, computational,both,unknown,NA} - - - - - - - - - QuantitationType - - - - - - - - - - - - StandardQuantitationType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QuantitationType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - isBackground - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - SpecializedQuantitationType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DerivedSignal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MeasuredSignal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Error - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PValue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExpectedValue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ratio - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ConfidenceIndicator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PresentAbsent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Failed - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ConfidenceIndicator2Target{3B72D9930259} - - - - - - - - - targetQuantitationType - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - confidenceIndicators - - - - - - - - - - - 0 - 3 - - - - - - - - - - - - - - - - - - - DesignElement - - - - - - - - - - - - DesignElement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Position - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - x - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - y - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - Reporter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ReporterPosition - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CompositePosition - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CompositeSequence - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Feature - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MismatchInformation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - startCoord - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - newSequence - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - replacedLength - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - FeatureInformation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CompositeCompositeMap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FeatureReporterMap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ReporterCompositeMap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FeatureLocation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - row - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - column - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - Position{3ADB9E4C023A} - - - - - - - - - position - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Reporter{3B1D3E9D0376} - - - - - - - - - reporter - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - featureReporterMaps - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Reporter{3B1D459F0362} - - - - - - - - - reporter - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - Sources{3B1D3EA0028A} - - - - - - - - - reporterPositionSources - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - MismatchInformation{3B27F14D025C} - - - - - - - - - mismatchInformation - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Sources{3B1D3EA80264} - - - - - - - - - compositePositionSources - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Composite{3B1D464C0176} - - - - - - - - - composite - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - MismatchInformation{3B27F176021F} - - - - - - - - - mismatchInformation - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - CompositeSequence{3B1D3EA3013A} - - - - - - - - - compositeSequence - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - reporterCompositeMaps - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - CompositeSequence{3B1D3EA501B5} - - - - - - - - - compositeSequence - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - compositeCompositeMaps - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - Feature{3B1D3E9B002A} - - - - - - - - - feature - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Features2ControlFeatures{3B72C2DF01B6} - - - - - - - - - controlFeatures - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - controlledFeatures - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - FeatureLocation{3B9E4D2B02D5} - - - - - - - - - featureLocation - - - - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - MismatchInformation{3B27F1970321} - - - - - - - - - mismatchInformation - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - Sources{3B27F0F40128} - - - - - - - - - featureInformationSources - - - - - - - - - - - 1 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - Describable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Identifiable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - identifier - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - name - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - Extendable - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NameValueType - - - - - - - - - - - - - - - - name - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - value - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - type - - - - - - - - 0 - 1 - - - - - - - - - - - - - - - - - - - - - PropertySets{3B6B34D8038D} - - - - - - - - - propertySets - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - PropertySets{3B3CF8DC03DB} - - - - - - - - - propertySets - - - - - - - - - - - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - {Array?ArrayDesign}{3C3338AD02E9} - - - - - - - - - - - - {Array?AuditAndSecurity}{3C33480102EB} - - - - - - - - - - - - {Array?Description}{3C33482900AE} - - - - - - - - - - - - {Array?DesignElement}{3C33484101AD} - - - - - - - - - - - - {Array?Measurement}{3C33485F03AE} - - - - - - - - - - - - {Array?BioMaterial}{3C3348810295} - - - - - - - - - - - - {Array?Protocol}{3C33489901EF} - - - - - - - - - - - - {Array?Common}{3C3348B50254} - - - - - - - - - - - - {ArrayDesign?DesignElement}{3C3341A2014B} - - - - - - - - - - - - {ArrayDesign?AuditAndSecurity}{3C3346630368} - - - - - - - - - - - - {ArrayDesign?Description}{3C33468001D9} - - - - - - - - - - - - {ArrayDesign?Protocol}{3C33468D0390} - - - - - - - - - - - - {ArrayDesign?Measurement}{3C3346AC0038} - - - - - - - - - - - - {ArrayDesign?Common}{3C334811028A} - - - - - - - - - - - - {AuditAndSecurity?Description}{3C334650019E} - - - - - - - - - - - - {AuditAndSecurity?Common}{3C334BC80024} - - - - - - - - - - - - {BioAssay?BioAssayData}{3C3345CF0148} - - - - - - - - - - - - {BioAssay?BioMaterial}{3C3345EE0338} - - - - - - - - - - - - {BioAssay?Description}{3C334601012C} - - - - - - - - - - - - {BioAssay?Array}{3C33462E0018} - - - - - - - - - - - - {BioAssay?BioEvent}{3C334A3D02CF} - - - - - - - - - - - - {BioAssay?Common}{3C334BF60306} - - - - - - - - - - - - {BioEvent?Protocol}{3C33454D0015} - - - - - - - - - - - - {BioEvent?Common}{3C334BC2012A} - - - - - - - - - - - - {BioAssayData?Common}{3C33457D01C3} - - - - - - - - - - - - {BioAssayData?BioAssay}{3C33458B001E} - - - - - - - - - - - - {BioAssayData?QuantitationType}{3C3345960128} - - - - - - - - - - - - {BioAssayData?DesignElement}{3C33459C01A9} - - - - - - - - - - - - {BioAssayData?BioEvent}{3C334A630248} - - - - - - - - - - - - {BioSequence?Description}{3C33472F02C1} - - - - - - - - - - - - {BioSequence?Common}{3C334BB8039D} - - - - - - - - - - - - {BioMaterial?AuditAndSecurity}{3C3346CC039B} - - - - - - - - - - - - {BioMaterial?Description}{3C3346DA030F} - - - - - - - - - - - - {BioMaterial?Measurement}{3C3346E70119} - - - - - - - - - - - - {BioMaterial?Common}{3C3346FA021B} - - - - - - - - - - - - {BioMaterial?BioEvent}{3C334A320021} - - - - - - - - - - - - {Description?BQS}{3C3344D100FD} - - - - - - - - - - - - {Description?AuditAndSecurity}{3C3344E001DB} - - - - - - - - - - - - {Description?Common}{3C334BD5002D} - - - - - - - - - - - - {Protocol?Description}{3C33491F00B1} - - - - - - - - - - - - {Protocol?AuditAndSecurity}{3C33492A0360} - - - - - - - - - - - - {Protocol?Measurement}{3C33494B034A} - - - - - - - - - - - - {Protocol?Common}{3C334BBE00A2} - - - - - - - - - - - - {BQS?Common}{3C334BD00184} - - - - - - - - - - - - {Experiment?AuditAndSecurity}{3C3347B303E3} - - - - - - - - - - - - {Experiment?HigherLevelAnalysis}{3C3347BC03D2} - - - - - - - - - - - - {Experiment?BioAssayData}{3C3347C50122} - - - - - - - - - - - - {Experiment?BioAssay}{3C3347CB0080} - - - - - - - - - - - - {Experiment?Measurement}{3C3347D60090} - - - - - - - - - - - - {Experiment?Description}{3C3347DA02C7} - - - - - - - - - - - - {Experiment?Common}{3C334BED0104} - - - - - - - - - - - - {QuantitationType?BioAssay}{3C3345090176} - - - - - - - - - - - - {QuantitationType?Description}{3C3345210170} - - - - - - - - - - - - {QuantitationType?Common}{3C334BF10363} - - - - - - - - - - - - {DesignElement?BioSequence}{3C33446E023B} - - - - - - - - - - - - {DesignElement?ArrayDesign}{3C334756026D} - - - - - - - - - - - - {DesignElement?Description}{3C33476C025B} - - - - - - - - - - - - {DesignElement?Measurement}{3C33477B0071} - - - - - - - - - - - - {DesignElement?BioAssayData}{3C334A9D01A1} - - - - - - - - - - - - {DesignElement?Common}{3C334C0402AC} - - - - - - - - - - - - {HigherLevelAnalysis?Description}{3C3348E6036C} - - - - - - - - - - - - {HigherLevelAnalysis?QuantitationType}{3C3348F0023A} - - - - - - - - - - - - {HigherLevelAnalysis?BioAssayData}{3C3348F60199} - - - - - - - - - - - - {HigherLevelAnalysis?DesignElement}{3C334906023C} - - - - - - - - - - - - {HigherLevelAnalysis?Common}{3C334BE40205} - - - - - - - - - - - - {Measurement?Common}{3C334BDB03B1} - - - - - - - - - - - - {Common?Description}{3C3344360335} - - - - - - - - - - - - {Common?AuditAndSecurity}{3C33444A0081} - - - - - - - - - - - - Component View - - - - - - - - - - Array - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ArrayDesign - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AuditAndSecurity - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssay - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioEvent - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioAssayData - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioSequence - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BioMaterial - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Description - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Protocol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BQS - - - - - - - - - - - - - - - - - - - - - - - - - - Experiment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - QuantitationType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DesignElement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HigherLevelAnalysis - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Measurement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Common - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - documentation - Describes a microarray design that can be printed and then, in the case of gene expression, hybridized. An array design consists of several features (also called spots) in which reporter sequences are placed. Many features may have the same reporter replicated and a reporter may be specified in one or more array designs. The nature of the reporter's biosequence placed on a spot will depend on the technology. Two well-known technologies differ significantly-spotter arrays draw material from a well and place a spot on the array whereas in situ oligo arrays are created through the synthesis of many, short (~20-100mer) nucleotide sequences onto the features. Reporters can be grouped together into CompositeSequences, typically representing a gene or one or more splice variants in gene expression experiments. There are then two distinct ways that DesignElements are grouped. The one described in the ArrayDesign package by FeatureGroup, ReporterGroup and CompositeGroup is by technology type, that is, one might want to segregate the controls to a Group and all the non-controls to another. Or if PCR Product and Oligos are both used on an array they would likely be in different groups. The grouping described in the DesignElement package by the mappings relates the Features to the Reporter, the Reporters to CompositeSequence, and at higher levels, CompositeSequences to CompositeSequence. - - - - - - persistence - transient - - - - - - documentation - Describes the design of an gene expression layout. In some cases this might be virtual and, for instance, represent the output from analysis software at the composite level without reporters or features. - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#1 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - documentation - The version of this design. - - - - - - documentation - The number of features for this array - - - - - - persistence - transient - - - - - - documentation - A design that is expected to be used to manufacture physical arrays. - - - - - - persistence - transient - - - - - - documentation - Specifies the layout of features in a rectangular grid. - - - - - - documentation - The number of features from left to right. - - - - - - documentation - The number of features from top to bottom of the grid. - - - - - - documentation - Spacing between the rows. - - - - - - documentation - Spacing between the columns. - - - - - - persistence - transient - - - - - - documentation - Specifies a repeating area on an array. This is useful for printing when the same pattern is repeated in a regular fashion. - - - - - - documentation - Spacing between zones, if applicable. - - - - - - documentation - Spacing between zones, if applicable. - - - - - - documentation - The number of zones on the x-axis. - - - - - - documentation - The number of zones on the y-axis. - - - - - - persistence - transient - - - - - - documentation - Specifies the location of a zone on an array. - - - - - - documentation - row position in the ZoneGroup - - - - - - documentation - column position in the ZoneGroup. - - - - - - documentation - Boundary vertical upper left position relative to (0,0). - - - - - - documentation - Boundary horizontal upper left position relative to (0,0). - - - - - - documentation - Boundary vertical lower right position relative to (0,0). - - - - - - documentation - Boundary horizontal lower right position relative to (0,0). - - - - - - persistence - transient - - - - - - documentation - Allows specification of the type of Reporter Design Element. - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - A collection of like features. - - - - - - documentation - The width of the feature. - - - - - - documentation - The length of the feature. - - - - - - documentation - The height of the feature. - - - - - - persistence - transient - - - - - - documentation - The DesignElementGroup holds information on either features, reporters, or compositeSequences, particularly that information that is common between all of the DesignElements contained. - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#4 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - Allows specification of the type of Composite Design Element. - - - - - - documentation - The association of a physical array with its array design. - - - - - - documentation - Describes the application of any protocols, such as the methodology used to pick oligos, in the design of the array. - - - - - - documentation - The grouping of like CompositeSequence together. If more than one technology type occurs on the array, such as the mixing of Cloned BioMaterial and Oligos, then there would be multiple CompositeGroups to segregate the technology types. - - - - - - documentation - The primary contact for information on the array design - - - - - - documentation - The grouping of like Reporter together. If more than one technology type occurs on the array, such as the mixing of Cloned BioMaterial and Oligos, then there would be multiple ReporterGroups to segregate the technology types. - - - - - - documentation - The grouping of like Features together. Typically for a physical array design, this will be a single grouping of features whose type might be PCR Product or Oligo. If more than one technology type occurs on the array, such as the mixing of Cloned BioMaterial and Oligos, then there would be multiple FeatureGroups to segregate the technology types. - - - - - - documentation - In the case where the array design is specified by one or more zones, allows specifying where those zones are located. - - - - - - documentation - The type of surface from a controlled vocabulary that would include terms such as non-absorptive, absorptive, etc. - - - - - - documentation - Describes the rectangular layout of features in the array design. - - - - - - documentation - Unit of the ZoneLayout attributes. - - - - - - documentation - Describes the location of different zones within the array design. - - - - - - documentation - Unit for the ZoneGroup attributes. - - - - - - documentation - Reference to the Zone that was misprinted. - - - - - - documentation - Unit for the Zone attributes. - - - - - - documentation - A reference to the zone this feature is in. - - - - - - documentation - The reporters that belong to this group. - - - - - - documentation - The unit for the feature measures. - - - - - - documentation - The features that belong to this group. - - - - - - documentation - The technology type of this design. By specifying a technology type, higher level analysis can use appropriate algorithms to compare the results from multiple arrays. The technology type may be spotted cDNA or in situ photolithography. - - - - - - documentation - The expected shape of the feature on the array: circular, oval, square, etc. - - - - - - documentation - The organism from which the biosequences of this group are from. - - - - - - documentation - The specific type of a feature, reporter, or composite. A composite type might be a gene while a reporter type might be a cDNA clone or an oligo. - - - - - - documentation - The compositeSequences that belong to this group. - - - - - - documentation - Describes the process of creating arrays from array designs. Includes information on how arrays are grouped together, if relevant, how an array deviates from its array design both in layout and per feature and potentially contains references to LIMS data that might contain more detail on the BioMaterial used to create the reporters. - - - - - - persistence - transient - - - - - - documentation - The physical substrate along with its features and their annotation - - - - - - documentation - An identifying string, e.g. a barcode. - - - - - - documentation - This can indicate the x position on a slide, chip, etc. of the first Feature and is usually specified relative to the fiducial. - - - - - - documentation - This can indicate the y position on a slide, chip, etc. of the first Feature and is usually specified relative to the fiducial. - - - - - - documentation - What the array origin is relative to, e.g. upper left corner, fiducial, etc. - - - - - - persistence - transient - - - - - - documentation - Stores the defect information for a feature. - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#11 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - An array package is a physical platform that contains one or more arrays that are separately addressable (e.g. several arrays that can be hybridized on a single microscope slide) or a virtual grouping together of arrays. The array package that has been manufactured has information about where certain artifacts about the array are located for scanning and feature extraction purposes. - - - - - - documentation - Identifier for the ArrayGroup. - - - - - - documentation - If there exist more than one array on a slide or a chip, then the spacing between the arrays is useful so that scanning / feature extraction software can crop images representing 1 unique bioassay. - - - - - - documentation - If there exist more than one array on a slide or a chip, then the spacing between the arrays is useful so that scanning / feature extraction software can crop images representing 1 unique bioassay. - - - - - - documentation - This attribute defines the number of arrays on a chip or a slide. - - - - - - documentation - For a human to determine where the top left side of the array is, such as a barcode or frosted side of the glass, etc. - - - - - - documentation - One of top, bottom, left or right. - - - - - - documentation - The width of the platform - - - - - - documentation - The length of the platform. - - - - - - persistence - transient - - - - - - documentation - Describes the process by which arrays are produced. - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#12 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - documentation - The date the arrays were manufactured - - - - - - documentation - The allowable error of a feature printed to its intended position. - - - - - - persistence - transient - - - - - - documentation - Stores information of the potential difference between an array design and arrays that have been manufactured using that design (e.g. a tip failed to print several spots). - - - - - - persistence - transient - - - - - - documentation - A marking on the surface of the array that can be used to identify the array's origin, the coordinates of which are the fiducial's centroid. - - - - - - persistence - transient - - - - - - documentation - Information on the physical production of arrays within the laboratory. - - - - - - documentation - A brief description of the quality of the array manufacture process. - - - - - - persistence - transient - - - - - - documentation - Stores the location from which a biomaterial was obtained. - - - - - - documentation - The plate from which a biomaterial was obtained. - - - - - - documentation - The plate row from which a biomaterial was obtained. Specified by a letter. - - - - - - documentation - The plate column from which a biomaterial was obtained. Specified by a number. - - - - - - persistence - transient - - - - - - documentation - The delta the feature was actually printed on the array from the position specified for the feature in the array design. - - - - - - documentation - Deviation from the y coordinate of this feature's position. - - - - - - documentation - Deviation from the y coordinate of this feature's position. - - - - - - persistence - transient - - - - - - documentation - Stores the defect information for a zone. - - - - - - documentation - Association between an ArrayGroup and its Arrays, typically the ArrayGroup will represent a slide and the Arrays will be the manufactured so that they may be hybridized separately on that slide. - - - - - - documentation - Association between the manufactured array and the information on that manufacture. - - - - - - documentation - Association to classes to describe deviations from the ArrayDesign. - - - - - - documentation - The array used in the BioAssayCreation event. - - - - - - documentation - Description on features who are manufactured in a different location than specified in the ArrayDesign. - - - - - - documentation - How the feature deviates in position from the ArrayDesign. - - - - - - documentation - The feature that was manufactured defectively. - - - - - - documentation - Indicates the type of defect (e.g. a missing feature or a moved feature). - - - - - - documentation - Association to the marks on the Array for alignment for the scanner. - - - - - - documentation - The unit of the measurement attributes. - - - - - - documentation - Commonly, arrays will be spotted on 1x3 glass microscope slides but there is nothing that says this must be the case. This association is for scanners to inform them on the possible different formats of slides that can contain arrays. - - - - - - documentation - The protocols followed in the manufacturing of the arrays. - - - - - - documentation - Information on the manufacture of the features. - - - - - - documentation - The person or organization to contact for information concerning the ArrayManufacture. - - - - - - documentation - Information on the quality of the ArrayManufacture. - - - - - - documentation - Descriptions of how a Zone has been printed differently than specified in the ArrayDesign. - - - - - - documentation - The units the fiducial is measured in. - - - - - - documentation - A descriptive string that indicates the type of a fiducial (e.g. the chrome border on an Affymetrix array, a laser ablation mark). - - - - - - documentation - The position, relative to the upper left corner, of the fiducial - - - - - - documentation - The feature whose LIMS information is being described. - - - - - - documentation - Association to a LIMS data source for further information on the manufacturing process. - - - - - - documentation - The BioMaterial used for the feature. - - - - - - documentation - The unit for the attributes. - - - - - - documentation - How the zone deviates in position from the ArrayDesign. - - - - - - documentation - Indicates the type of defect (e.g. a missing zone or a moved zone). - - - - - - documentation - The classes in this package describe how a BioSource is treated to obtain the BioMaterial (typically a LabeledExtract) that is used by a BioAssayCreation in combination with an Array to produce a PhysicalBioAssay. A set of treatments are typically linear in time but can form a Directed Acyclic Graph. - - - - - - persistence - transient - - - - - - documentation - The BioSource is the original source material before any treatment events. It is also a top node of the directed acyclic graph generated by treatments. The association to OntologyEntry allows enumeration of a BioSource's inherent properties. - - - - - - persistence - transient - - - - - - documentation - BioMaterial is an abstract class that represents the important substances such as cells, tissues, DNA, proteins, etc... Biomaterials can be related to other biomaterial through a directed acyclic graph (represented by treatment(s)). - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#13 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - LabeledExtracts are special BioSamples that have Compounds which are detectable (these are often fluorescent or reactive moieties). - - - - - - persistence - transient - - - - - - documentation - BioSamples are products of treatments that are of interest. BioSamples are often used as the sources for other biosamples. The Type attribute describes the role the BioSample holds in the treatment hierarchy. This type can be an extract. - - - - - - persistence - transient - - - - - - documentation - A Compound can be a simple compound such as SDS (sodium dodecyl sulfate). It may also be made of other Compounds in proportions using CompoundMeasurements to enumerate the Compounds and their amounts such as LB (Luria Broth) Media. - - - - - - documentation - A Compound may be a special case Solvent. - - - - - - persistence - transient - - - - - - documentation - A CompoundMeasurement is a pairing of a source Compound and an amount (Measurement) of that Compound. - - - - - - persistence - transient - - - - - - documentation - A BioMaterialMeasurement is a pairing of a source BioMaterial and an amount (Measurement) of that BioMaterial. - - - - - - persistence - transient - - - - - - documentation - The process by which a biomaterial is created (from source biomaterials). Treatments have an order and an action. - - - - - - documentation - The chronological order in which a treatment occurred (in relation to other treatments). More than one treatment can have the same chronological order indicating that they happened (or were caused to happen) simultaneously. - - - - - - documentation - The BioSource's source is the provider of the biological material (a cell line, strain, etc...). This could be the ATTC (American Tissue Type Collection). - - - - - - documentation - This association is one way from BioMaterial to Treatment. From this a BioMaterial can discover the amount and type of BioMaterial that was part of the treatment that produced it. - - - - - - documentation - A source BioMaterial for a treatment. - - - - - - documentation - The type of material used, i.e. rna, dna, lipid, phosphoprotein, etc. - - - - - - documentation - Innate properties of the biosource, such as genotype, cultivar, tissue type, cell type, ploidy, etc. - - - - - - documentation - Measures of the quality of the BioMaterial. - - - - - - documentation - Compound used to label the extract. - - - - - - documentation - The Type attribute describes the role the BioSample holds in the treatment hierarchy. This type can be an extract. - - - - - - documentation - The Compounds and their amounts used to create this Compound. - - - - - - documentation - A Compound to be used to create another Compound. - - - - - - documentation - The Merck Index of this Compound. - - - - - - documentation - Reference to an entry in an external LIMS data source. - - - - - - documentation - The compound used to label the extract. - - - - - - documentation - The compounds and their amounts used in the treatment. - - - - - - documentation - The amount of the Compound. - - - - - - documentation - The BioMaterials and the amounts used in the treatment - - - - - - documentation - The amount of the BioMaterial. - - - - - - documentation - The BioSample and its amount used in the BioAssayCreation event. - - - - - - documentation - Measures events like duration, centrifuge speed, etc. - - - - - - documentation - The event that occurred (e.g. grow, wait, add, etc...). The actions should be a recommended vocabulary - - - - - - documentation - Describes the results of performing analysis on the result of the BioAssayData from an Experiment. - - - - - - persistence - transient - - - - - - documentation - A mathematical method of higher level analysis whereby BioAssayData are grouped together into nodes. - - - - - - persistence - transient - - - - - - documentation - An individual component of a clustering. May contain other nodes. - - - - - - persistence - transient - - - - - - documentation - The contents of a node for any or all of the three Dimensions. If a node only contained genes just the DesignElementDimension would be defined. - - - - - - persistence - transient - - - - - - documentation - A value associated with the Node that can rank it in relation to the other nodes produced by the clustering algorithm. - - - - - - documentation - The name for this value. - - - - - - documentation - The value for this NodeValue. - - - - - - documentation - The nodes of the cluster. - - - - - - documentation - The BioAssayData whose values were used by the cluster algorithm. - - - - - - documentation - The results of analyzing the data, typically with a clustering algorithm. - - - - - - documentation - Nested nodes of the BioAssayDataCluster. - - - - - - documentation - The contents of the node, expressed as either a one, two or three dimensional object. - - - - - - documentation - Values or measurements for this node that may be produced by the clustering algorithm. Typical are distance values for the nodes. - - - - - - documentation - The relevant DesignElements for this NodeContents from the BioAssayData. - - - - - - documentation - The relevant QuantitationTypes for this NodeContents from the BioAssayData. - - - - - - documentation - The relevant BioAssays for this NodeContents from the BioAssayData. - - - - - - documentation - The scale (linear, log10, ln, etc.) of the value. - - - - - - documentation - The data type of the any element. - - - - - - documentation - The type of value, distance, etc. - - - - - - documentation - Provides classes that contain information and annotation on the event of joining an Array with a BioMaterial preparation, the acquisition of images and the extraction of data on a per feature basis from those images. The derived classes of BioAssay represent the base PhysicalBioAssays which lead to the production of Images, the MeasuredBioAssay which is associated with the set of quantitations produced by FeatureExtraction, and DerivedBioAssay (see BioAssayData package) which groups together BioAssays that have been analyzed together to produce further refinement of the quantitations. The design of this package and the related BioAssayData package was driven by the following query considerations and the desire to return as little data as necessary to satisfy a query. Often, the first set of queries for experiments below the Experiment level will want to discover the why of an experiment and this is captured in the BioAssay class through its FactorValue, BioEvent and Description associations. This separates it from the data but allows an overview of the experiment hierarchy. The BioAssayData class association to BioDataValues is optional only to allow queries on them to discover the how of the experiment through the association to the transformation and mappings of the three BioAssayData dimensions and the protocols used. Once a researcher, for instance, has narrowed down the experiments of interest then the actual data, represented by the BioDataValues, can be downloaded. Because these data can be in the hundreds of megabytes to gigabytes range, it was considered desirable to be able to return information and annotation on the experiment without the data. - - - - - - persistence - transient - - - - - - documentation - A bioAssay created by the bioAssayCreation event (e.g. in gene expression analysis this event is represented by the hybridization event). - - - - - - persistence - transient - - - - - - documentation - A BioAssay that is created by the Transformation BioEvent from one or more MeasuredBioAssays or DerivedBioAssays. - - - - - - persistence - transient - - - - - - documentation - An image is created by an imageAcquisition event, typically by scanning the hybridized array (the PhysicalBioAssay). - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - documentation - The file location in which an image may be found. - - - - - - persistence - transient - - - - - - documentation - An abstract class which represents both physical and computational groupings of arrays and biomaterials. - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#17 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - A channel represents an independent acquisition scheme for the ImageAcquisition event, typically a wavelength. - - - - - - persistence - transient - - - - - - documentation - A measured bioAssay is the direct processing of information in a physical bioAssay by the featureExtraction event. Often uses images which are referenced through the physical bioAssay. - - - - - - persistence - transient - - - - - - documentation - The process by which an array and one or more biomaterials are combined to create a bioAssayCreation. - - - - - - persistence - transient - - - - - - documentation - The process by which data is extracted from an image producing a measuredBioAssayData and a measuredBioAssay. - - - - - - persistence - transient - - - - - - documentation - The archetypal bioAssayCreation event, whereby biomaterials are hybridized to an array. - - - - - - persistence - transient - - - - - - documentation - The process by which an image is generated (typically scanning). - - - - - - persistence - transient - - - - - - documentation - The event which records the process by which PhysicalBioAssays are processed (typically washing, blocking, etc...). - - - - - - documentation - The Images associated with this PhysicalBioAssay by ImageAcquisition. - - - - - - documentation - The PhysicalBioAssay used in the FeatureExtraction event. - - - - - - documentation - The association between the BioAssayCreation event (typically Hybridization) and the PhysicalBioAssay and its annotation of this event. - - - - - - documentation - The set of treatments undergone by this PhysicalBioAssay. - - - - - - documentation - The PhysicalBioAssay that was treated. - - - - - - documentation - The data associated with the DerivedBioAssay. - - - - - - documentation - The derivation type, for instance collapsed spot replicate, ratio, averaged intensity, bioassay replicates, etc. - - - - - - documentation - The DerivedBioAssay that is produced by the sources of the BioAssayMap. - - - - - - documentation - The channels captured in this image. - - - - - - documentation - The images produced by the ImageAcquisition event. - - - - - - documentation - The file format of the image typically a TIF or a JPEG. - - - - - - documentation - Channels can be non-null for all subclasses. For instance, collapsing across replicate features will create a DerivedBioAssay that will potentially reference channels. - - - - - - documentation - The sources of the BioAssayMap that are used to produce a target DerivedBioAssay. - - - - - - documentation - The BioAssay associated with the value of the BioAssayDatum. - - - - - - documentation - The BioAssays for this Dimension - - - - - - documentation - The values that this BioAssay is associated with for the experiment. - - - - - - documentation - The collection of BioAssays for this Experiment. - - - - - - documentation - The organization of the BioAssays as specified by the ExperimentDesign (TimeCourse, Dosage, etc.) - - - - - - documentation - The optional channel associated with the QuantitationType. - - - - - - documentation - The association between the MeasuredBioAssay and the FeatureExtraction Event. - - - - - - documentation - The data associated with the MeasuredBioAssay. - - - - - - documentation - Specifies classes that allow tracking of changes and information on user permissions to view the data and annotation. - - - - - - persistence - transient - - - - - - documentation - A person for which the attributes are self describing. - - - - - - persistence - transient - - - - - - documentation - Permission information for an object as to ownership, write and read permissions. - - - - - - persistence - transient - - - - - - documentation - Tracks information on the contact that creates or modifies an object. - - - - - - documentation - The date of a change. - - - - - - documentation - Indicates whether an action is a creation or a modification. - - - - - - persistence - transient - - - - - - documentation - Organizations are entities like companies, universities, government agencies for which the attributes are self describing. - - - - - - persistence - transient - - - - - - documentation - Groups contacts together based on their security privileges. - - - - - - persistence - transient - - - - - - documentation - A contact is either a person or an organization. - - - - - - documentation - The organization a person belongs to. - - - - - - documentation - The people who performed the protocol. - - - - - - documentation - Information on the security for the instance of the class. - - - - - - documentation - Specifies which security groups have permission to view the associated object. - - - - - - documentation - The owner of the security rights. - - - - - - documentation - A list of Audit instances that track changes to the instance of Describable. - - - - - - documentation - The contact for creating or changing the instance referred to by the Audit. - - - - - - documentation - The containing organization (the university or business which a lab belongs to, etc.) - - - - - - documentation - The members of the Security Group. - - - - - - documentation - The roles (lab equipment sales, contractor, etc.) the contact fills. - - - - - - documentation - The providers of the Experiment, its data and annotation. - - - - - - documentation - Contact for information on the Hardware. - - - - - - documentation - Contact for information on the software. - - - - - - documentation - Information on the contacts for the database - - - - - - documentation - The classes defined here provide data and the information and annotation on the derivation of that data. Some of the scenarios that might occur are the following. FeatureExtraction of a single PhysicalBioAssay produces MeasuredBioAssayData that has a single BioAssay on the BioAssayDimension, typically the Features described in the ArrayDesign on the DesignElementDimension, and the Quantitations associated with the application of a FeatureExtraction protocol on the QuantitationDimension. An error model transformation might be applied that doesn't change the BioAssayDimension or the DesignElementDimension but likely changes the QuantitationDimension. A transformation on replicate Reporters or CompositeSequences might be applied on the single BioAssay that would change the DesignElementDimension and the QuantitationDimension both. Replicate and Control BioAssays might be added to the BioAssayDimension and a transformation could change the BioAssayDimension and the QuantitationDimension but not change the DesignElementDimension to produce a new DerivedBioAssayData. Or some combination of the above transformations could be performed at once to change all three dimensions. Because the classes derive from Describable, the Experimenter can provide as much detail at each level of the class hierarchy as desired. - - - - - - persistence - transient - - - - - - documentation - Represents the dataset created when the BioAssays are created. BioAssayData is the entry point to the values. Because the actual values are represented by a different object, BioDataValues, which can be memory intensive, the annotation of the transformation can be gotten separate from the data. - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#23 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - An ordered list of quantitationTypes. - - - - - - persistence - transient - - - - - - documentation - Container of the mappings of the input BioAssay dimensions to the output BioAssay dimension. - - - - - - persistence - transient - - - - - - documentation - An ordered list of designElements. It will be realized as one of its three subclasses. - - - - - - persistence - transient - - - - - - documentation - A single cell of the quantitation, bioAssay, designElement matrix. - - - - - - documentation - The datum value. - - - - - - persistence - transient - - - - - - documentation - The output of a transformation event. - - - - - - persistence - transient - - - - - - documentation - The data associated with the MeasuredBioAssay produced by FeatureExtraction. - - - - - - persistence - transient - - - - - - documentation - Container of the mappings of the input QuantitationType dimensions to the output QuantitationType dimension. - - - - - - persistence - transient - - - - - - documentation - Container of the mappings of the input DesignElement dimensions to the output DesignElement dimension. - - - - - - persistence - transient - - - - - - documentation - A three-dimensional cube representation of the data. - - - - - - documentation - Three dimension array, indexed by the three dimensions to provide the data for the BioAssayData. - - - - - - documentation - The order to expect the dimension. The enumeration uses the first letter of the three dimensions to represent the six possible orderings. - - - - - - persistence - transient - - - - - - documentation - The actual values for the BioAssayCube. - - - - - - persistence - transient - - - - - - documentation - A relational, tuple representation of the data. - - - - - - persistence - transient - - - - - - documentation - An ordered list of bioAssays. - - - - - - persistence - transient - - - - - - documentation - A QuantitationTypeMap is the description of how source QuantitationTypes are mathematically transformed into a target QuantitationType. - - - - - - persistence - transient - - - - - - documentation - The process by which derivedBioAssays are created from measuredBioAssays and/or derivedBioAssays. It uses mappings to indicate the input and output dimensions. - - - - - - persistence - transient - - - - - - documentation - A DesignElementMap is the description of how source DesignElements are transformed into a target DesignElement. - - - - - - persistence - transient - - - - - - documentation - The BioAssayMap is the description of how source MeasuredBioAssays and/or DerivedBioAssays are manipulated (mathematically) to produce DerivedBioAssays. - - - - - - persistence - transient - - - - - - documentation - Specialized DesignElementDimension to hold CompositeSequences. - - - - - - persistence - transient - - - - - - documentation - Specialized DesignElementDimension to hold Reporters. - - - - - - persistence - transient - - - - - - documentation - Specialized DesignElementDimension to hold Features. - - - - - - documentation - The BioAssayData sources that the Transformation event uses to produce the target DerivedBioAssayData. - - - - - - documentation - The BioAssays of the BioAssayData. - - - - - - documentation - The DesignElements of the BioAssayData. - - - - - - documentation - The QuantitationTypes of the BioAssayData. - - - - - - documentation - Statistics on the Quality of the BioAssayData. - - - - - - documentation - The data values of the BioAssayData. - - - - - - documentation - The collection of BioAssayDatas for this Experiment. - - - - - - documentation - The QuantitationTypes for this Dimension. - - - - - - documentation - The collection of mappings for the BioAssays. - - - - - - documentation - The maps for the BioAssays. - - - - - - documentation - The collection of BioAssayData tuples. - - - - - - documentation - The DesignElement associated with the value of the BioAssayDatum. - - - - - - documentation - The QuantitationType associated with the value of the BioAssayDatum. - - - - - - documentation - The association between the DerivedBioAssayData and the Transformation event that produced it. - - - - - - documentation - The maps for the QuantitationTypes. - - - - - - documentation - The collection of mappings for the QuantitationTypes. - - - - - - documentation - The maps for the DesignElements. - - - - - - documentation - The collection of mappings for the DesignElements. - - - - - - documentation - The QuantitationType whose value will be produced from the values of the source QuantitationType according to the Protocol. - - - - - - documentation - The QuantitationType sources for values for the transformation. - - - - - - documentation - The CompositeSequences for this Dimension. - - - - - - documentation - The reporters for this dimension. - - - - - - documentation - The features for this dimension. - - - - - - documentation - Represents the container for a hierarchical grouping of BioAssays. Can have the end results of Clustering Analysis specified and, through the ExperimentDesign, a description and annotation of the overall design of the experiment and what it was to show. - - - - - - persistence - transient - - - - - - documentation - The Experiment is the collection of all the BioAssays that are related by the ExperimentDesign. - - - - - - persistence - transient - - - - - - documentation - The ExperimentDesign is the description and collection of ExperimentalFactors and the hierarchy of BioAssays to which they pertain. - - - - - - persistence - transient - - - - - - documentation - ExperimentFactors are the dependent variables of an experiment (e.g. time, glucose concentration, ...). - - - - - - persistence - transient - - - - - - documentation - The value for a ExperimentalFactor - - - - - - documentation - The association to the description and annotation of the Experiment, along with the grouping of the top-level BioAssays. - - - - - - documentation - The description of the factors (TimeCourse, Dosage, etc.) that group the BioAssays. - - - - - - documentation - Description of the replicate strategy of the Experiment. - - - - - - documentation - Description of the quality control aspects of the Experiment. - - - - - - documentation - Description of the normalization strategy of the Experiment. - - - - - - documentation - Classification of an experiment. For example 'normal vs. diseased', 'treated vs. untreated', 'time course', 'tiling', etc. - - - - - - documentation - The pairing of BioAssay FactorValues with the ExperimentDesign ExperimentFactor. - - - - - - documentation - The category of an ExperimentalFactor could be biological (time, [glucose]) or a methodological factor (differing cDNA preparation protocols). - - - - - - documentation - Allows describing additional information such as concentration of Tamoxafin with a CASRegistry #. - - - - - - documentation - The measured value for this factor. - - - - - - documentation - Allows a more complex value to be specified for a FactorValue than a simple Measurement. - - - - - - documentation - Provides a relatively immutable class, Protocol, that can describe a generic laboratory procedure or analysis algorithm, for example, and an instance class, ProtocolApplication, which can describe the actual application of a protocol. The ProtocolApplication provides values for the replaceable parameters of the Protocol and, through the Description association of Describable, any variation from the Protocol. - - - - - - persistence - transient - - - - - - documentation - A Protocol is a parameterizable description of a method. ProtocolApplication is used to specify the ParameterValues of it's Protocol's Parameters. - - - - - - documentation - The text description of the Protocol. - - - - - - documentation - The title of the Protocol - - - - - - persistence - transient - - - - - - documentation - A Parameter is a replaceable value in a Parameterizable class. Examples of Parameters include: scanning wavelength, laser power, centrifuge speed, multiplicative errors, the number of input nodes to a SOM, and PCR temperatures. - - - - - - persistence - transient - - - - - - documentation - The value of a Parameter. - - - - - - documentation - The value of the parameter. Will have the datatype of its associated Parameter. - - - - - - persistence - transient - - - - - - documentation - The use of a protocol with the requisite Parameters and ParameterValues. - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - documentation - When the protocol was applied. - - - - - - persistence - transient - - - - - - documentation - Software represents the software used. Examples of Software include: feature extraction software, clustering software, etc... - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - Hardware represents the hardware used. Examples of Hardware include: computers, scanners, wash stations etc... - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#27 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - documentation - The model (number) of a piece of hardware. - - - - - - documentation - The make of the Hardware (its manufacturer). - - - - - - persistence - transient - - - - - - documentation - The use of a piece of hardware with the requisite Parameters and ParameterValues. - - - - - - documentation - Manufacturer's identifier for the Hardware. - - - - - - persistence - transient - - - - - - documentation - The use of a piece of software with the requisite Parameters and ParameterValues. - - - - - - documentation - The version of the software. - - - - - - documentation - When the software was released. - - - - - - persistence - transient - - - - - - documentation - The Parameterizable interface encapsulates the association of Parameters with ParameterValues. - - - - - - documentation - Where an instantiated Parameterizable is located. - - - - - - persistence - transient - - - - - - documentation - The interface that is the use of a Parameterizable class. - - - - - - documentation - Software used by this Protocol. - - - - - - documentation - Hardware used by this protocol. - - - - - - documentation - The protocol that is being used. - - - - - - documentation - The type of a Protocol, a user should provide/use a recommended vocabulary. Examples of types include: RNA extraction, array washing, etc... - - - - - - documentation - The description of the parameters for the Parameterizable class instance. - - - - - - documentation - The parameter this value is for. - - - - - - documentation - The type of data generated by the parameter i.e. Boolean, float, etc... - - - - - - documentation - Allows the optional specification of a default values and the unit for the Parameter - - - - - - documentation - The parameter values for this Parameterizable Application. - - - - - - documentation - The use of software for the application of the protocol. - - - - - - documentation - The use of hardware for the application of the protocol. - - - - - - documentation - The applied protocols to the BioEvent. - - - - - - documentation - Associates Hardware and Software together. - - - - - - documentation - Software packages this software uses, i.e. operating system, 3rd party software packages, etc. - - - - - - documentation - The underlying software. - - - - - - documentation - The type of a piece of Software. Examples include: feature extractor... - - - - - - documentation - The underlying hardware. - - - - - - documentation - The type of a piece of Hardware. Examples include: scanner, wash station... - - - - - - documentation - The classes in this package allow a variety of references to third party annotation and direct annotation by the experimenter. - - - - - - persistence - transient - - - - - - documentation - A free text description of an object. - - - - - - documentation - The description. - - - - - - documentation - A reference to the location and type of an outside resource. - - - - - - persistence - transient - - - - - - documentation - A reference to a record in a database. - - - - - - documentation - The identifier used to look up the record. - - - - - - documentation - The appropriate version of the accession (if applicable). - - - - - - documentation - The location of the record. - - - - - - persistence - transient - - - - - - documentation - An address to a repository. - - - - - - documentation - The version for which a DatabaseReference applies. - - - - - - documentation - The location of the Database. - - - - - - persistence - transient - - - - - - documentation - A reference to the originating source for the object. - - - - - - documentation - The originating server for the object, a network address or common name. - - - - - - documentation - Name of the database, if applicable, that the object was exported from. - - - - - - documentation - The identifier of the object at the originating source. - - - - - - documentation - The name of the object at the originating source. - - - - - - persistence - transient - - - - - - documentation - A single entry from an ontology or a controlled vocabulary. For instance, category could be 'species name', value could be 'homo sapiens' and ontology would be taxonomy database, NCBI. - - - - - - documentation - The category to which this entry belongs. - - - - - - documentation - The value for this entry in this category. - - - - - - documentation - The description of the meaning for this entry. - - - - - - documentation - Free hand text descriptions. Makes available the associations of Description to an instance of Describable. - - - - - - documentation - References to entries in databases. - - - - - - documentation - References to existing literature. - - - - - - documentation - Specifies where the described instance was originally obtained from. - - - - - - documentation - Allows specification of ontology entries related to the instance being described. - - - - - - documentation - Reference to the database where the DataEntry instance can be found. - - - - - - documentation - Many ontology entries will not yet have formalized ontologies. In those cases, they will not have a database reference to the ontology. In the future it is highly encouraged that these ontologies be developed and ontologyEntry be subclassed from DatabaseReference. - - - - - - documentation - The type of record (e.g. a protein in SwissProt, or a yeast strain in SGD). - - - - - - documentation - References an entry in a species database, like GenBank, UniGene, etc. - - - - - - documentation - The specific type for the quantitations. From a controlled vocabulary of {float, int, boolean, etc.} - - - - - - documentation - Indication of how to interpret the value. From a suggested vocabulary of {LINEAR | LN | LOG2 |LOG10 | FOLD_CHANGE | OTHER} - - - - - - documentation - Criteria that can be used to look up the reference in a repository. - - - - - - documentation - Allows an instance of an OntologyEntry to be further qualified. - - - - - - documentation - Ontology entries referring to common values associated with BioSequences, such as gene names, go ids, etc. - - - - - - documentation - A choice of protein, RNA, or DNA. - - - - - - documentation - The type of biosequence, i.e. gene, exon, UniGene cluster, fragment, BAC, EST, etc. - - - - - - documentation - The organism from which this sequence was obtained. - - - - - - documentation - If the design element represents a control, the type of control it is (normalization, deletion, negative, positive, etc.) - - - - - - documentation - If at some time the reporter is determined to be failed this indicts the failure (doesn't report on what it was intended to report on, etc.) - - - - - - documentation - Similar to failType but indicates a warning rather than a failure. - - - - - - documentation - The classes of this package provide utility information on the quantities of other classes to each other. - - - - - - persistence - transient - - - - - - documentation - A Measurement is a quantity with a unit. - - - - - - documentation - The type of measurement, for instance if the measurement is five feet, it can be either absolute (five feet tall) or change (five feet further along). - - - - - - documentation - The value of the measurement. kindCV (and otherKind) determine with Unit the datatype of value. - - - - - - documentation - One of the enumeration values to determine the controlled vocabulary of the value. - - - - - - documentation - Name of the controlled vocabulary if it isn't one of the Unit subclasses. - - - - - - persistence - transient - - - - - - documentation - The unit is a strict enumeration of types. - - - - - - documentation - The name of the unit. - - - - - - persistence - transient - - - - - - documentation - Time - - - - - - persistence - transient - - - - - - documentation - Distance - - - - - - persistence - transient - - - - - - documentation - Temperature - - - - - - persistence - transient - - - - - - documentation - Quantity - - - - - - persistence - transient - - - - - - documentation - Mass - - - - - - persistence - transient - - - - - - documentation - Volume - - - - - - persistence - transient - - - - - - documentation - Concentration - - - - - - documentation - The Unit associated with the Measurement. - - - - - - documentation - The units of the x, y positions. - - - - - - documentation - An abstract class representing an event that takes sources of some type to produce a target of some type. Each of the realized subclasses determines the type of the sources and the target. The association to a protocol application allows specification of how the event was performed. - - - - - - persistence - transient - - - - - - documentation - An abstract class to capture the concept of an event (either in the laboratory or a computational analysis). - - - - - - persistence - transient - - - - - - documentation - A Map is the description of how sources are transformed into a target. Provides an abstarct base class that separates the mapping BioEvents from the transforming. - - - - - - documentation - Allows a reference to an article, book or other publication to be specified for searching repositories. - - - - - - persistence - transient - - - - - - documentation - Attributes for the most common criteria and association with OntologyEntry allows criteria to be specified for searching for a Bibliographic reference. - - - - - - documentation - Describes a known gene or sequence. BioAssays typically seek to identify what BioSequences are expressed in a BioMaterial after treatments, the expression level measured from the association between the BioMaterial and the Array. The Array's Features typically provide known locations for this association to occur. Most often, the Reporter and CompositeSequence are known and the presence or absence of a particular BioSequence in the BioMaterial is based on whether there as been an association to the DesignElement targeted for it. Some other experiments may not know the DesignElement's target but can discover it with known properties of the BioSequences in the BioMaterial. - - - - - - persistence - transient - - - - - - documentation - Represents, in general, what would be a GenBank Feature Table annotation for a sequence. - - - - - - documentation - How the evidence for a SeqFeature was determined. - - - - - - persistence - transient - - - - - - documentation - The location of the SeqFeature annotation. - - - - - - documentation - Indicates the direction and/or type of the SeqFeature, i.e. whether it is in the 5' or 3' direction, is double stranded, etc. - - - - - - persistence - transient - - - - - - documentation - A BioSequence is a representation of a DNA, RNA, or protein sequence. It can be represented by a Clone, Gene, or the sequence. - - - - - - documentation - The number of residues in the biosequence. - - - - - - documentation - If length not positively known will be true - - - - - - documentation - Indicates if the BioSequence is circular in nature. - - - - - - documentation - The actual components of the sequence, for instance, for DNA a string consisting of A,T,C and G. The attribute is optional and instead of specified here, can be found through the DatabaseEntry. - - - - - - persistence - transient - - - - - - documentation - Designates the position of the Feature in its BioSequence. - - - - - - documentation - The location of the base, for nucleotides, that the SeqFeature starts. - - - - - - documentation - The location of the base, for nucleotides, that the SeqFeature ends. - - - - - - documentation - Association to classes that describe the location with the sequence of the SeqFeature. - - - - - - documentation - Association to annotations for subsequences. Corresponds to the GenBank Frame Table. - - - - - - documentation - Regions within the SeqFeature. - - - - - - documentation - At which base pairs or amino acid this SeqFeature begins and ends. - - - - - - documentation - The sequence annotation on the BioMaterial this reporter represents. Typically the sequences will be an Oligo Sequence, Clone or PCR Primer. - - - - - - documentation - The annotation on the BioSequence this CompositeSequence represents. Typically the sequences will be a Genes, Exons, or SpliceVariants. - - - - - - documentation - This Package defines the classes for quantitations, such as measured and derived signal, error, and pvalue. The subclasses of StandardQuantitationType will be the best fit from FeatureExtraction or Transformation Protocol for the values obtained. Other values can be specified using SpecializedQuantitationType. - - - - - - persistence - transient - - - - - - documentation - Superclass for the named quantitation type. Useful for mapping to those languages that can use a fly-weight for processing the subclasses. - - - - - - persistence - transient - - - - - - documentation - A method for calculating a single datum of the matrix (e.g. raw intensity, background, error). - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#43 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - documentation - Indicates whether the quantitation has been measured from the background or from the feature itself. - - - - - - persistence - transient - - - - - - documentation - User defined quantitation type. - - - - - - persistence - transient - - - - - - documentation - A calculated measurement of the intensity of a signal, for example, after a transformation involving normalization and/or replicate DesignElements. Of type float. - - - - - - persistence - transient - - - - - - documentation - Best measure from feature extraction as to the presence and intensity of the signal. Of type float. - - - - - - persistence - transient - - - - - - documentation - Error measurement of a quantitation. Of type float. - - - - - - persistence - transient - - - - - - documentation - Measurement of the accuracy of a quantitation. Of type float. - - - - - - persistence - transient - - - - - - documentation - Indication of what value is expected of the associated standard quantitation type. - - - - - - persistence - transient - - - - - - documentation - The ratio of two or more signals, typically between two channels. Of type float. - - - - - - persistence - transient - - - - - - documentation - Indication of some measure of confidence for a standard quantitation type. - - - - - - persistence - transient - - - - - - documentation - Indicates relative presence or absence. From the enumeration AbsoluteCallTypeEnum {Present | Absent | Marginal | No call} or ComparisonCallTypeEnum {Increase I Marginal Increase | Decrease | Marginal Decrease | No change | No Call | Unknown }, as specified by the dataType. - - - - - - persistence - transient - - - - - - documentation - Values associated with this QuantitationType indicate a failure of some kind for a particular DesignElement for a BioAssay. Of type boolean. - - - - - - documentation - The association between a ConfidenceIndicator and the QuantitationType its is an indicator for. - - - - - - documentation - The classes of this package are the contained classes of the ArrayDesign and describe through the DesignElements what is intended to be at each location of the Array. The Feature describes an intended location on the Array, the Reporter the Oligo, Clone, PCR Product that is on a Feature and the CompositeSequence which combines Reporters or CompositeSequences into what the child DesignElements are meant to represent biologically, e.g. a Gene, Exon, SpliceVariant, etc. - - - - - - persistence - transient - - - - - - documentation - An element of an array. This is generally of type feature but can be specified as reporters or compositeSequence for arrays that are abstracted from a physical array. - - - - - - persistence - transient - - - - - - documentation - Specifies a position on an array. - - - - - - documentation - The horizontal distance from the upper left corner of the array. - - - - - - documentation - The vertical distance from the upper left corner of the array. - - - - - - persistence - transient - - - - - - documentation - A Design Element that represents some biological material (clone, oligo, etc.) on an array which will report on some biosequence or biosequences. The derived data from the measured data of its Features represents the presence or absence of the biosequence or biosequences it is reporting on in the BioAssay. Reporters are Identifiable and several Features on the same array can be mapped to the same reporter as can Features from a different ArrayDesign. The granularity of the Reporters independence is dependent on the technology and the intent of the ArrayDesign. Oligos using mature technologies can in general be assumed to be safely replicated on many features where as with PCR Products there might be the desire for quality assurence to make reporters one to one with features and use the mappings to CompositeSequences for replication purposes. - - - - - - persistence - transient - - - - - - documentation - The location in the composite target's sequence to which a source reporter maps. The association to MismatchInformation allows the specification, usually for control purposes, of deviations from the CompositeSequence's BioMaterial. - - - - - - persistence - transient - - - - - - documentation - The location in the compositeSequence target's sequence to which a source compositeSequence maps. The association to MismatchInformation allows the specification, usually for control purposes, of deviations from the CompositeSequence's BioMaterial. - - - - - - persistence - transient - - - - - - documentation - A collection of Reporter or CompositeSequence Design Elements, annotated through the association to BioSequence. - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - An intended position on an array. - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:Final - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:Static - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateDefaultConstructor - True - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateFinalizer - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateStaticInitializer - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateInstanceInitializer - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:GenerateCode - True - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:DisableAutoSync - False - - - - - - RationalRose:Tool#44 - Java - - - - - - RationalRose$Java:ConstructorIs - public - - - - - - persistence - transient - - - - - - documentation - Describes how a reporter varies from its ReporterCharacteristics sequence(s) or how a Feature varies from its Reporter sequence. - - - - - - documentation - Offset into the sequence that the mismatch occurs. - - - - - - documentation - The sequence that replaces the specified sequence starting at start_coord. - - - - - - documentation - Length of the original sequence that is replaced. A deletion is specified when the length of the newSequence is less than the replacedLength. - - - - - - persistence - transient - - - - - - documentation - As part of the map information, allows the association of one or more differences in the BioMaterial on a feature from the BioMaterial of the Reporter. Useful for control purposes such as in Affymetrix probe pairs. - - - - - - persistence - transient - - - - - - documentation - A CompositeCompositeMap is the description of how source CompositeSequences are transformed into a target CompositeSequence. For instance, several CompositeSequences could represent different sequence regions for a Gene and could be mapped to different CompositeSequences, each representing a different splice variant for that Gene. - - - - - - persistence - transient - - - - - - documentation - A FeatureReporterMap is the description of how source features are transformed into a target reporter. These would map replicate features for a reporter to the reporter. - - - - - - persistence - transient - - - - - - documentation - A ReporterCompositeMap is the description of how source Reporters are transformed into a target CompositeSequences. For instance, several reporters that tile across a section of a chromosome could be mapped to a CompositeSequence. - - - - - - persistence - transient - - - - - - documentation - Specifies where a feature is located relative to a grid. - - - - - - documentation - row position in the Zone - - - - - - documentation - column position in the Zone. - - - - - - documentation - The position of the feature on the array, relative to the top, left corner. - - - - - - documentation - Associates features with their reporter. - - - - - - documentation - A reporter that comprises part of a CompositeSequence. - - - - - - documentation - Association to the reporters that compose this CompositeSequence and where those reporters occur. - - - - - - documentation - Differences in how the reporter matches its compositeSequence's sequence. - - - - - - documentation - Association to the CompositeSequences that compose this CompositeSequence and where those CompositeSequences occur. - - - - - - documentation - A source CompositeSequence that is part of a target CompositeSequence - - - - - - documentation - Differences in how the contained compositeSequence matches its target compositeSequence's sequence. - - - - - - documentation - A map to the reporters that compose this CompositeSequence. - - - - - - documentation - A map to the compositeSequences that compose this CompositeSequence. - - - - - - documentation - The feature the FeatureInformation is supplying information for. - - - - - - documentation - Associates features with their control features. - - - - - - documentation - Location of this feature relative to a grid. - - - - - - documentation - Differences in how the feature matches the reporter's sequence, typical examples is the Affymetrix probe pair where one of the features is printed with a mismatch to the other feature's perfect match. - - - - - - documentation - Typically, the features on an array that are manufactured with this reporter's BioSequence. - - - - - - persistence - transient - - - - - - documentation - Abstract class that allows subclasses to inherit the association to Description, for detailed annotations such as Ontology entries and Database references, the association to Audit, for tracking changes, and the association to Security for indicating permissions. - - - - - - persistence - transient - - - - - - documentation - An Identifiable class is one that has an unambiguous reference within the scope. It also has a potentially ambiguous name. - - - - - - documentation - An identifier is an unambiguous string that is unique within the scope (i.e. a document, a set of related documents, or a repository) of its use. - - - - - - documentation - The potentially ambiguous common identifier. - - - - - - persistence - transient - - - - - - documentation - Abstract class that specifies for subclasses an association to NameValueTypes. These can be used, for instance, to specify proprietary properties and in-house processing hints. - - - - - - persistence - transient - - - - - - documentation - A tuple designed to store data, keyed by a name and type. - - - - - - documentation - The name of the key. - - - - - - documentation - The value of the name. - - - - - - documentation - The type of the key. - - - - - - documentation - Allows specification of name/value pairs. Meant to primarily help in-house, pipeline processing of instances by providing a place for values that aren't part of the specification proper. - - - - - - documentation - Allows nested specification of name/value pairs - - - - - - diff --git a/t/data/xmi/OrderDB.plain.poseidon2.zuml b/t/data/xmi/OrderDB.plain.poseidon2.zuml deleted file mode 100644 index 681df71..0000000 Binary files a/t/data/xmi/OrderDB.plain.poseidon2.zuml and /dev/null differ diff --git a/t/data/xmi/OrderDB.rationalprofile.poseidon2.xmi b/t/data/xmi/OrderDB.rationalprofile.poseidon2.xmi deleted file mode 100644 index 08c64f2..0000000 --- a/t/data/xmi/OrderDB.rationalprofile.poseidon2.xmi +++ /dev/null @@ -1,710 +0,0 @@ - - - - - Netbeans XMI Writer - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INT - - - - - - 10 - - - - - - 0 - - - - - - - - - - - - - - - - INT - - - - - - 10 - - - - - - 0 - - - - - - - - - - - - - - - - DATE - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INT - - - - - - 10 - - - - - - 0 - - - - - - - - - - - - - - - - INT - - - - - - 10 - - - - - - 0 - - - - - - - - - - - - - - - - - - - INT - - - - - - 2 - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 - - - - - - INT - - - - - - 0 - - - - - - - - - - - - - - - - VARCHAR - - - - - - 255 - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 255 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VARCHAR - - - - - - 255 - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20 - - - - - - - - - - - - - - - - - - - - - ModelElement - - - ModelElement - - - ModelElement - - - ModelElement - - - ModelElement - - - ModelElement - - - ModelElement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/t/data/xmi/OrderDB.rationalprofile.poseidon2.zuml b/t/data/xmi/OrderDB.rationalprofile.poseidon2.zuml deleted file mode 100644 index 586984c..0000000 Binary files a/t/data/xmi/OrderDB.rationalprofile.poseidon2.zuml and /dev/null differ diff --git a/t/data/xmi/OrderDB.sqlfairy.poseidon2.xmi b/t/data/xmi/OrderDB.sqlfairy.poseidon2.xmi deleted file mode 100644 index 70bf1bc..0000000 --- a/t/data/xmi/OrderDB.sqlfairy.poseidon2.xmi +++ /dev/null @@ -1,498 +0,0 @@ - - - - - Netbeans XMI Writer - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VARCHAR - - - - - - 255 - - - - - - 1 - - - - - - - - - - INT - - - - - - 10 - - - - - - 1 - - - - - - 0 - - - - - - - - - - DATE - - - - - - - - - - INT - - - - - - 255 - - - - - - - - ModelElement - - - - - - - - - - - - - - - - - - - VARCHAR - - - - - - 255 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -