Vivo not inferring a type

16 views
Skip to first unread message

J. Dornbusch

unread,
Mar 18, 2020, 5:44:05 AM3/18/20
to VIVO Tech
Hello everyone,

In our local ontology, we want to infer that as long as you belong to a laboratory as "doctorant" (Doctorant = PhdStudent, AppartenanceEnTantQueDoctorant = MembershipAsPhdStudent), you are a Doctorant.

ehess:Doctorant
        a                        owl
:Class ;
        rdfs
:label               "PhD Student"@en-US ;
        rdfs
:label               "Doctorant.e"@fr-FR ;
        dcterms
:description       "https://fr.wikipedia.org/wiki/Doctorant"@fr-FR ;
        rdfs
:subClassOf          vivo:GraduateStudent ;
        rdfs
:subClassOf
           
[ a owl:Class ;
              owl
:intersectionOf
           
( foaf:Person
             
[ a       owl:Restriction ;
                owl
:onProperty vivo:relatedBy ;
                owl
:someValuesFrom vivo:AppartenanceEnTantQueDoctorant
             
] )
       
].

Vivo seems to understand this syntax as it displays :

equivalent_class.png


Through the custom form, I attached <http://data.ehess.fr/individual/n7szb84w5x> to the laboratory <http://data.ehess.fr/individual/7tz7w75uo> as doctorant. As a result, i can see the expected triples :

< http://data.ehess.fr/individual/n7szb84w5x> <http://vivoweb.org/ontology/core#relatedBy>  <http://data.ehess.fr/individual/n1170>

and

<http://data.ehess.fr/individual/n1170> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://data.ehess.fr/ontology/vivo#AppartenanceEnTantQueDoctorant>

<http://data.ehess.fr/individual/n1170> <http://vivoweb.org/ontology/core#relates> <http://data.ehess.fr/individual/7tz7w75uo>
<http://data.ehess.fr/individual/n1170> <http://vivoweb.org/ontology/core#relates>  <http://data.ehess.fr/individual/n7szb84w5x>  

Everything is normal on the data side.

But even though I manually ran "recompute inferences" several times, the "Doctorant" type wasn't inferred...
1/ Are we beyond the capabilities of Vivo's inference engine or did we make a mistake in the owl?
2/ Does the inference engine run by itself when you modify a record or should wa call /recomputeInferences from a cron?
3/ Does anyone know the syntax to limit the attribution of the "Doctorant" type to people who belong as Phd students to a laboratory currently (considering start/end date)

Sorry for the complexity of our case.

Joachim

Brian Lowe

unread,
Mar 18, 2020, 6:21:37 AM3/18/20
to vivo...@googlegroups.com

Hi Joachim,

 

While VIVO’s inferred triples are updated incrementally as a listener detects changes to the data, this kind of inference is beyond the scope of VIVO’s built-in reasoning.  If you do want to make the inference you describe with a reasoner that’s capable of it, it looks like you’ll want to change your axioms so that Doctorant is equivalent to the intersection, not a subclass of it.  Otherwise, just being a member of the intersection class doesn’t automatically imply being a member of the subclass.  If you’re feeling adventurous, you could experiment with implementing the edu.cornell.mannlib.vitro.webapp.reasoner.ReasonerPlugin class to do your own custom triple listening and inference. (The plugin classes are enabled in WEB-INF/resources/reasoner_plugins.txt.)  You could also experiment with connecting VIVO to a triple store with its own built-in reasoning.

 

That said, I think you may end up wanting to rethink this approach, and your question about current laboratory membership hints at the general problem.  What you’re looking for there is a kind of non-monotonic reasoning, which is incompatible with OWL:  e.g., you want to remove the inference that someone is an instance of the Doctorant class when a new assertion is added about the end date of their laboratory membership.  That works fine with traditional database semantics, but doesn’t work in the knowledge base where we can always infer that an end date exists for any time interval, even if we don’t have an explicit triple (yet) recording what that end date actually is.  All of VIVO’s existing legacy subclasses of Person are likewise problematic and are a well-known area for future ontology improvement.  Things like Doctorant or Faculty Member or Librarian are really roles that are realized during the course of a person’s lifetime, not classes the person is an instance of.

 

Brian

 

De la: vivo...@googlegroups.com <vivo...@googlegroups.com> În numele J. Dornbusch
Trimis: miercuri, 18 martie 2020 11:44
Către: VIVO Tech <vivo...@googlegroups.com>
Subiect: [vivo-tech] Vivo not inferring a type

--
You received this message because you are subscribed to the Google Groups "VIVO Tech" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vivo-tech+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vivo-tech/d062c850-1664-4980-9f36-e3716b598b5f%40googlegroups.com.

J. Dornbusch

unread,
Mar 19, 2020, 3:55:39 AM3/19/20
to VIVO Tech
Hi Brian

Thank you for all these explanations.
So, I'm going to give up the " graceful " solution which was to infer the Doctorant type; more modestly we could add the 'Doctorant' type in the n3required of the custom generator.  The type will be asserted or deleted each time the person is attached to or detached from a research unit as Phd Student.
We would still have to consider the end date. Perhaps by adding a preprocessor to the generator ?

Joachim

Le mercredi 18 mars 2020 11:21:37 UTC+1, Brian Lowe a écrit :

Hi Joachim,

 

While VIVO’s inferred triples are updated incrementally as a listener detects changes to the data, this kind of inference is beyond the scope of VIVO’s built-in reasoning.  If you do want to make the inference you describe with a reasoner that’s capable of it, it looks like you’ll want to change your axioms so that Doctorant is equivalent to the intersection, not a subclass of it.  Otherwise, just being a member of the intersection class doesn’t automatically imply being a member of the subclass.  If you’re feeling adventurous, you could experiment with implementing the edu.cornell.mannlib.vitro.webapp.reasoner.ReasonerPlugin class to do your own custom triple listening and inference. (The plugin classes are enabled in WEB-INF/resources/reasoner_plugins.txt.)  You could also experiment with connecting VIVO to a triple store with its own built-in reasoning.

 

That said, I think you may end up wanting to rethink this approach, and your question about current laboratory membership hints at the general problem.  What you’re looking for there is a kind of non-monotonic reasoning, which is incompatible with OWL:  e.g., you want to remove the inference that someone is an instance of the Doctorant class when a new assertion is added about the end date of their laboratory membership.  That works fine with traditional database semantics, but doesn’t work in the knowledge base where we can always infer that an end date exists for any time interval, even if we don’t have an explicit triple (yet) recording what that end date actually is.  All of VIVO’s existing legacy subclasses of Person are likewise problematic and are a well-known area for future ontology improvement.  Things like Doctorant or Faculty Member or Librarian are really roles that are realized during the course of a person’s lifetime, not classes the person is an instance of.

 

Brian

 

De la: vivo...@googlegroups.com <vivo...@googlegroups.com> În numele J. Dornbusch
Trimis: miercuri, 18 martie 2020 11:44
Către: VIVO Tech <vivo...@googlegroups.com>
Subiect: [vivo-tech] Vivo not inferring a type

 

Hello everyone,

 

In our local ontology, we want to infer that as long as you belong to a laboratory as "doctorant" (Doctorant = PhdStudent, AppartenanceEnTantQueDoctorant = MembershipAsPhdStudent), you are a Doctorant.

ehess:Doctorant
        a                        owl
:Class ;
        rdfs
:label               "PhD Student"@en-US ;


        rdfs
:label               "Docto...@fr-FR ;

To unsubscribe from this group and stop receiving emails from it, send an email to vivo...@googlegroups.com.

Reply all
Reply to author
Forward
0 new messages