XML Object Model Challenge: RDF vs. XMI

David Megginson david at megginson.com
Sat May 29 12:31:41 BST 1999


This message contains my original Java version of a set of classes,
the RDF schema representation (corrected so that rdfs:range and
rdfs:domain are transposed), and an autogenerated XMI representation
contributed by Don Park.  The XMI representation is painfully verbose,
probably because it was created by a machine rather than by a human
(it also seems to define a lot of generic Java stuff), so perhaps it
could be made much shorter with human intervention -- can anyone trim
it down?

Here's my original Java version, again:


====================8<====================8<====================
 public class Entity
 {
   public String name;
   public String startDate;
   public String endData;
 }

 public class Being extends Entity
 {
   public Being sire;
   public Being dame;
 }

 public class Person extends Being
 {
   public String nationality[];
 }
====================8<====================8<====================


Here's a corrected version of my RDF schema, with rdfs:range and
rdfs:domain transposed:


====================8<====================8<====================
 <?xml version="1.0"?>

 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:rdfs="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#">

 <rdfs:Class ID="Entity"/>

 <rdfs:Class ID="Being">
 <rdfs:subClassOf rdf:resource="#Entity"/>
 </rdfs:Class>

 <rdfs:Class ID="Person">
 <rdfs:subClassOf rdf:resource="#Being"/>
 </rdfs:Class>

 <rdf:Property ID="name">
 <rdfs:domain rdf:resource="#Entity"/>
 <rdfs:range 
   rdf:resource="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#Literal"/>
 </rdf:Property>

 <rdf:Property ID="startDate">
 <rdfs:domain rdf:resource="#Entity"/>
 <rdfs:range 
   rdf:resource="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#Literal"/>
 </rdf:Property>

 <rdf:Property ID="endDate">
 <rdfs:domain rdf:resource="#Entity"/>
 <rdfs:range 
   rdf:resource="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#Literal"/>
 </rdf:Property>

 <rdf:Property ID="sire">
 <rdfs:domain rdf:resource="#Being"/>
 <rdfs:range rdf:resource="#Being"/>
 </rdf:Property>

 <rdf:Property ID="dame">
 <rdfs:domain rdf:resource="#Being"/>
 <rdfs:range rdf:resource="#Being"/>
 </rdf:Property>

 <rdf:Property ID="nationality">
 <rdfs:domain rdf:resource="#Person"/>
 <rdfs:range 
   rdf:resource="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#Literal"/>
 </rdf:Property>

 </rdf:RDF>
====================8<====================8<====================


Here's the auto-generated XMI that Don Park posted:


====================8<====================8<====================
 <?xml version = "1.0" encoding = "ISO-8859-1" ?>
 <!DOCTYPE XMI SYSTEM "uml.dtd" >
 <XMI>
   <XMI.header>
     <XMI.documentation>
       <XMI.exporter>Argo/UML</XMI.exporter>
       <XMI.exporterVersion>0.7.0</XMI.exporterVersion>
     </XMI.documentation>
     <XMI.metamodel name="uml" version="1.1"/>
   </XMI.header>
   <XMI.content>
     <Model XMI.id = "S.100025">
       <name>untitledpackage</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <ownedElement>
	 <Class XMI.id = "S.100027">
	   <name>Entity</name>
	   <visibility XMI.value = "public"/>
	   <isAbstract XMI.value="false"/>
	   <isLeaf XMI.value="false"/>
	   <isRoot XMI.value="false"/>
	   <isActive XMI.value = "false"/>
	   <feature>
	     <Attribute XMI.id = "S.100075">
	       <name>name</name>
	       <visibility XMI.value = "public"/>
	       <ownerScope XMI.value="instance"/>
	       <changeable XMI.value="none"/>
	       <multiplicity>1</multiplicity>
	       <targetScope XMI.value="instance"/>
	       <initialValue>
	       </initialValue>
	       <type> <XMI.reference target="S.100003"/> </type>
	       <!-- Type is: String -->
	     </Attribute>
	   </feature>
	   <feature>
	     <Attribute XMI.id = "S.100077">
	       <name>startDate</name>
	       <visibility XMI.value = "public"/>
	       <ownerScope XMI.value="instance"/>
	       <changeable XMI.value="none"/>
	       <multiplicity>1</multiplicity>
	       <targetScope XMI.value="instance"/>
	       <initialValue>
	       </initialValue>
	       <type> <XMI.reference target="S.100003"/> </type>
	       <!-- Type is: String -->
	     </Attribute>
	   </feature>
	   <feature>
	     <Attribute XMI.id = "S.100078">
	       <name>endDate</name>
	       <visibility XMI.value = "public"/>
	       <ownerScope XMI.value="instance"/>
	       <changeable XMI.value="none"/>
	       <multiplicity>1</multiplicity>
	       <targetScope XMI.value="instance"/>
	       <initialValue>
	       </initialValue>
	       <type> <XMI.reference target="S.100003"/> </type>
	       <!-- Type is: String -->
	     </Attribute>
	   </feature>
	 </Class>
       </ownedElement>
       <ownedElement>
	 <Class XMI.id = "S.100079">
	   <name>Being</name>
	   <visibility XMI.value = "public"/>
	   <isAbstract XMI.value="false"/>
	   <isLeaf XMI.value="false"/>
	   <isRoot XMI.value="false"/>
	   <isActive XMI.value = "false"/>
	   <feature>
	     <Attribute XMI.id = "S.100083">
	       <name>sire</name>
	       <visibility XMI.value = "public"/>
	       <ownerScope XMI.value="instance"/>
	       <changeable XMI.value="none"/>
	       <multiplicity>1</multiplicity>
	       <targetScope XMI.value="instance"/>
	       <initialValue>
	       </initialValue>
	       <type> <XMI.reference target="S.100079"/> </type>
	       <!-- Type is: Being -->
	     </Attribute>
	   </feature>
	   <feature>
	     <Attribute XMI.id = "S.100084">
	       <name>dame</name>
	       <visibility XMI.value = "public"/>
	       <ownerScope XMI.value="instance"/>
	       <changeable XMI.value="none"/>
	       <multiplicity>1</multiplicity>
	       <targetScope XMI.value="instance"/>
	       <initialValue>
	       </initialValue>
	       <type> <XMI.reference target="S.100079"/> </type>
	       <!-- Type is: Being -->
	     </Attribute>
	   </feature>
	 </Class>
       </ownedElement>
       <ownedElement>
	 <Class XMI.id = "S.100080">
	   <name>Person</name>
	   <visibility XMI.value = "public"/>
	   <isAbstract XMI.value="false"/>
	   <isLeaf XMI.value="false"/>
	   <isRoot XMI.value="false"/>
	   <isActive XMI.value = "false"/>
	   <feature>
	     <Attribute XMI.id = "S.100087">
	       <name>nationality</name>
	       <visibility XMI.value = "public"/>
	       <ownerScope XMI.value="instance"/>
	       <changeable XMI.value="none"/>
	       <multiplicity>1</multiplicity>
	       <targetScope XMI.value="instance"/>
	       <initialValue>
	       </initialValue>
	       <type> <XMI.reference target="S.100090"/> </type>
	       <!-- Type is: String[] -->
	     </Attribute>
	   </feature>
	 </Class>
       </ownedElement>
       <ownedElement>
	 <Generalization XMI.id = "S.100088">
	   <name></name>
	   <visibility XMI.value = "public"/>
	   <discriminator>
	   </discriminator>
	   <subtype> <XMI.reference target="S.100079"/> </subtype>
	   <!-- subtype is: Being -->
	   <supertype> <XMI.reference target="S.100027"/> </supertype>
	   <!-- supertype is: Entity -->
	 </Generalization>
       </ownedElement>
       <ownedElement>
	 <Generalization XMI.id = "S.100089">
	   <name></name>
	   <visibility XMI.value = "public"/>
	   <discriminator>
	   </discriminator>
	   <subtype> <XMI.reference target="S.100080"/> </subtype>
	   <!-- subtype is: Person -->
	   <supertype> <XMI.reference target="S.100079"/> </supertype>
	   <!-- supertype is: Being -->
	 </Generalization>
       </ownedElement>
     </Model>
     <Class XMI.id = "S.100024">
       <name>Stack</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100019">
       <name>Rectangle</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100016">
       <name>Long</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <DataType XMI.id = "S.100008">
       <name>byte</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <DataType XMI.id = "S.100005">
       <name>char</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <Class XMI.id = "S.100021">
       <name>Color</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <DataType XMI.id = "S.100010">
       <name>float</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <Class XMI.id = "S.100014">
       <name>Boolean</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <DataType XMI.id = "S.100007">
       <name>boolean</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <Class XMI.id = "S.100018">
       <name>Double</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100003">
       <name>String</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100023">
       <name>Hashtable</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100020">
       <name>Point</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <DataType XMI.id = "S.100006">
       <name>int</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <Class XMI.id = "S.100013">
       <name>Integer</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100012">
       <name>Character</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100015">
       <name>Byte</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100090">
       <name>String[]</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <Class XMI.id = "S.100022">
       <name>Vector</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <DataType XMI.id = "S.100011">
       <name>double</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <Class XMI.id = "S.100017">
       <name>Float</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
       <isActive XMI.value = "false"/>
     </Class>
     <DataType XMI.id = "S.100009">
       <name>long</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
     <DataType XMI.id = "S.100004">
       <name>void</name>
       <visibility XMI.value = "public"/>
       <isAbstract XMI.value="false"/>
       <isLeaf XMI.value="false"/>
       <isRoot XMI.value="false"/>
     </DataType>
   </XMI.content>
 </XMI>
====================8<====================8<====================


All the best,


David

-- 
David Megginson                 david at megginson.com
           http://www.megginson.com/

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list