Question

I'm tring to build an ontology to infer some informations about a domain classification and a terminology, but I'm experiencing some conceptual difficulties.

Let me explain the problem. In Protègè 4.1 i created 6 subclasses of Thing: Concept, conceptTitle, ConceptSynonym (for the classification) and Term, TermTitle, TermSynonym (for the terminology). I also have created hasConceptTitle, hasConceptSynonym, hasTermTitle and hasTermSynonym object relationships (with some constrint) to say that every Concept has one (and only one) title, and may have some synonyms, and every Term has one (and only one) title and some synonyms. Both Concept and Term have another relationship isA, giving to the classification a DAG/tree structure, while the terminology has a lattice structure (in other words, a term may be a subclass of more than one term).

Here comes the problem: I would like to create a subclass of Concept, let's say "MappedConcept"), which should be the set of mapped concepts, that is the set of concepts which have the title equals to a term's title, or it has a synonym equals to a term's title or has a synonym that is equal to a synonym of a term. In the first-order logic, this set may be expressed as:

∀x∃y( ∃z((hasConceptTitle(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptTitle(x,z) ∧ hasTermSynonym(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermTitle(y,z)) ∨
      ∃z((hasConceptSynonym(x,z) ∧ hasTermSynonym(y,z)) )

How can I obtain this? Defining data properties for "ConceptTitle", "ConceptSynonym", "TermTitle" and "TermSynonym"? And how to describe the string matches? Maybe those 4 classes should be just data properties of Concept and Term classes? I read the practical guide of Matthew Horridge several times, but I can't the practical ideas I have on my mind into an ongology in Protègè.

Thanks in advance.

Was it helpful?

Solution

I'm afraid you cannot do this in OWL 2 DL nor in Protégé, which is an editor for OWL 2 DL, because, as far as I can tell, it seems necessary to introduce the inverse of a datatype property, which is forbidden in OWL 2 DL. However, it's possible in OWL Full, and some DL reasoners may even be able to deal with it. Here, in Turtle:

<MappedConcept>  a  owl:Class;
    owl:equivalentTo  [
        a  owl:Class;
        owl:unionOf (
            [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptTitle>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermSynonym> ];
                    owl:someValuesFrom  <Term>
                ]
            ] [
                a  owl:Restriction;
                owl:onProperty  <hasConceptSynonym>;
                owl:someValuesFrom  [
                    a  owl:Restriction;
                    owl:onProperty  [ owl:inverseOf <hasTermTitle> ];
                    owl:someValuesFrom  <Term>
                ]
            ]
        )
    ] .

You can also do it without OWL, with a rule language for instance. The rules would look closer to how you would do it in programming languages. In SWRL:

hasConceptTitle(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptTitle(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermTitle(?y,?z) -> MappedConcept(?x)
hasConceptSynonym(?x,?z), hasTermSynonym(?y,?z) -> MappedConcept(?x)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top