Re: Translation of modelling schema into DAML

From: Mike Dean ([email protected])
Date: 04/24/01


> Basically we use an extended element-attribute-relationship framework, in
> which we treat relationships as first-class entities i.e. a relationship can
> have attributes and relationships on it too. Our model contains a meta-model
> section which is like a schema that describes the second section of the
> model, which contains the model elements. We think that the meta-model is
> pretty much like an ontology so we are trying to write it using DAML.
> However, I'm stuck with how to capture the idea that relationships can have
> attributes.

You might find [1] helpful.  It starts with a similar E/R/A
data model (but is dated in some other ways).  Basically,
relationships (with attributes) become Classes (similar to
the mapping to relational database tables).  This should
also accommodate relationships on relationships (an
interesting idea -- do you tend to use that in ways where we
might tend to use reification, e.g. tagging of sources,
temporal attributes, etc.?).  One could continue to map
relationships without attributes as ObjectProperties, but
then the mapping changes if one one adds an attribute or
relationship to a relationship that previously had neither.

> Can you put a
> DatatypeProperty on a ObjectProperty? Can a DAML property have a property?

No.

> To see if I could avoid this I decided that maybe I could describe my
> modelling framework using DAML (I thought I could write a meta-meta-model in
> DAML describing my meta-model!). But I'm having trouble getting my head
> around this. I think DAML should be able to handle this but I'm afraid my
> experience with it is too limited at this stage.

This is an interesting idea, which should give you more
flexibility in encapsulating the mapping.

Here's a quick possibility:

  <daml:Class rdf:ID="Element">
    <daml:sameClassAs rdf:resource="&daml;Class"/>
  </daml:Class>

  <daml:Class rdf:ID="Relationship">
    <daml:sameClassAs rdf:resource="&daml;Class"/>
    <rdfs:subClassOf>
      <daml:Restriction>
        <daml:onProperty rdf:resource="#source"/>
        <daml:toClass rdf:resource="#ElementOrRelationship"/>
        <daml:cardinality>1</daml:cardinality>
      </daml:Restriction>
    </rdfs:subClassOf>
    <rdfs:subClassOf>
      <daml:Restriction>
        <daml:onProperty rdf:resource="#target"/>
        <daml:toClass rdf:resource="#ElementOrRelationship"/>
        <daml:cardinality>1</daml:cardinality>
      </daml:Restriction>
    </rdfs:subClassOf>
  </daml:Class>

  <daml:Class rdf:ID="Attribute">
    <daml:sameClassAs rdf:resource="&daml;DatatypeProperty"/>
    <!-- use rdfs:domain to associate with ElementOrRelationship --> 
  </daml:Class>

  <daml:Class rdf:ID="ElementOrRelationship">
    <daml:disjointUnionOf rdf:parseType="daml:collection">
      <daml:Class rdf:about="#Element"/>
      <daml:Class rdf:about="#Relationship"/>
    </daml:disjointUnionOf>
  </daml:Class>

> I was wondering if anyone with more XML/DAML experience than me might be
> able to make some suggestions or at least provide some moral support :-).

I'm excited about your work, and hope this is helpful.

Thanks for your feedback!  Please keep in touch.

	Mike

[1] http://wwww.daml.org/projects/integration/homework/1/lessons.html


This archive was generated by hypermail 2.1.4 : 04/03/02 EST