Why is Protege not able to infer all implicit axioms in one operation? - ontology

I use Pellet/Hermit to reason on the following family ontology and export all the inferred axioms to a new family ontology. Then I reason on the new ontology and export all the inferred axioms to another new family ontology again. New axioms are found to be inferred. Is it necessary to reason on the ontology repeatedly to get all implicit axioms which can be inferred from the ontology?
Code body is limited to 30000 characters by StackOverflow, however, the family ontology contains 149200 characters.
The following 143KB family is the original ontology which contains 728 axioms;
The 202KB one is the exported ontology containing axioms inferred on the 143KB one by pellet (once) and having 1306 axioms;
The 516KB one is the exported ontology containing axioms inferred on the 202KB one by pellet (twice) and having 3987 axioms;
The 543KB one is the exported ontology containing axioms inferred on the 516KB one by pellet (three times) and having 4220 axioms. For example, there is no hasSon(aunt_0_RQM, child_8_ACF) in family_inferred2 which is contained by family_inferred3.
there is no hasSon(aunt_0_RQM, child_8_ACF) in family_inferred2 which is contained by family_inferred3
Every time I reason on the exported ontology, new axioms are inferred. Therefore, there are always some axioms not inferred by the reasoner.
download link for family: 143KB
download link for family_inferred1: 202KB
download link for family_inferred2: 516KB
download link for family_inferred3: 543KB

Related

How to retrieve database cross references linked to definitions in OBO ontologies using ROBOT?

Some entities in OBO ontologies are documented with a database_cross_reference --> PMID as reference for an entry. For example, https://ontobee.org/ontology/CL?iri=http://purl.obolibrary.org/obo/CL_0000742 has the definition A round chondrocyte that first differentiates in the late embryonic growth plate of bone. [database_cross_reference: PMID:15951842]
I am currently using the following snippet to retrieve a table of entities in an ontology:
robot export --input data/$1.owl \
--header "ID|LABEL|IAO_0000115|hasDbXref|subClassOf [ID]" \
--export data/$1.csv
Is there a way to also retrieve these cross references linked to definitions? In the .owl file it looks like:
<owl:Axiom>
<owl:annotatedSource rdf:resource="http://purl.obolibrary.org/obo/CL_0000742"/>
<owl:annotatedProperty rdf:resource="http://purl.obolibrary.org/obo/IAO_0000115"/>
<owl:annotatedTarget rdf:datatype="http://www.w3.org/2001/XMLSchema#string">A round chondrocyte that first differentiates in the late embryonic growth plate of bone.</owl:annotatedTarget>
<oboInOwl:hasDbXref rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PMID:15951842</oboInOwl:hasDbXref>
</owl:Axiom>
ROBOT doesn't support retrieval of axiom annotations using the export command, so the only way to do this in ROBOT is with a custom SPARQL query over the OWL reification model, as this is the way cross references linked to definitions are stored in the Cell Ontology (CL) and many other ontologies.
Note that other ontologies such as the Ontology of Biomedical Investigations (OBI) do this in a different way, using a plain entity annotation, this is retrievable using ROBOT export. Always remember that ontologies use annotations in a heterogeneous fashion, so approaches that work on one may not work on another (see this issue for context and discussion of unifying these styles).
If you are willing to consider a different approach, OAK can be used to retrieve definitions alongside axiom annotations, bridging across the different modeling styles in different ontologies, see this example.

Ontology comparison in owlapi

I am using OWLAPI for a project, and I need to compare two ontologies for differences between them. This would ignore blank nodes so that, for instance, I can determine whether the same OWL restrictions are in both ontologies. Not only do I need to know whether there are differences, but I need to find out what those differences are. does such functionality exist in the OWLAPI, oz is there a relatively simple way to do this?
The equality between anonymous class expressions is not based on the blank node ids - anonymous class expressions only have blank nodes in the textual output, in memory the ids are ignored. So checking if an axiom exists in an ontology will by default match expressions correctly for your diff.
This is not true for individuals - anonymous individuals will not be found to be the same across ontologies, and this is by specs. An anonymous individual in one ontology cannot be found in another, because the anonymous individual ids are scoped to the containing ontology.
Note: the unit tests for OWLAPI have to carry out a very similar task, to verify that an ontology can be parsed, written and parsed again without change (i.e., roundtripped between input syntax and output syntax), so there is code that you can look at to take inspiration. See TestBase.java - equal() method for more details. This includes code to deal with different ids for anonymous individuals.

Difference between rdf:seeAlso and rdfs:seeAlso

What is the difference between rdf:seeAlso and rdfs:seeAlso?
When I can use rdf:seeAlso and when I can use rdfs:seeAlso?
Can you do any examples?
First, note that rdf and rdfs are prefixes commonly used to reference the RDF syntax and RDF schema vocabularies respectively. The rdf is typically used for http://www.w3.org/1999/02/22-rdf-syntax-ns#, so that rdf:seeAlso would expand to http://www.w3.org/1999/02/22-rdf-syntax-ns#seeAlso. However, if you follow the vocabulary reference, you won't find a term defined for seeAlso. The RDF syntax is used for basic types such as rdf:type, rdf:XMLLiteral, and rdf:langString. the RDF Schema vocabulary is typically bound to the rdfs prefix, and is at http://www.w3.org/2000/01/rdf-schema#. It is mostly used to define terms useful in performing simple reasoning over RDF graphs, such as rdfs:subClassOf, rdfs:domain, and rdfs:range.
In reality, the terms defined between the two vocabularies end up being in arbitrary locations, and on retrospect, there should have probably been just a single vocabulary definition and a more easily understood location (such as http://www.w3.org/ns/rdf#), but too late for that now.
Why use rdfs:seeAlso is unclear. The description says "Further information about the subject resource.", but there's rules defined for how to use it. In Linked Data, it can be used to do just what it says, and a hypothetical linked data client might dereference IRI values of rdfs:seeAlso to find out more information that might be useful.
You can find out more in the RDF Concepts document and other publications of the RDF Working Group.
What is the difference between rdfs:seeAlso and rdfs:isDefinedBy?
These are defined pretty clearly in the specification:
5.4.1 rdfs:seeAlso
rdfs:seeAlso is an instance of rdf:Property that is used to indicate a
resource that might provide additional information about the subject
resource.
A triple of the form:
S rdfs:seeAlso O
states that the resource O may provide additional
information about S. It may be possible to retrieve representations of
O from the Web, but this is not required. When such representations
may be retrieved, no constraints are placed on the format of those
representations.
5.4.2 rdfs:isDefinedBy
rdfs:isDefinedBy is an instance of rdf:Property that is used to
indicate a resource defining the subject resource. This property may
be used to indicate an RDF vocabulary in which a resource is
described.
A triple of the form:
S rdfs:isDefinedBy O
states that the resource O defines S. It may be
possible to retrieve representations of O from the Web, but this is
not required. When such representations may be retrieved, no
constraints are placed on the format of those representations.
rdfs:isDefinedBy is a subproperty of rdfs:seeAlso.
When I can use rdfs:seeAlso and when I can use rdfs:isDefinedBy?
Can you do any examples for me?
You can use these whenever they're appropriate. Just include the appropriate triples in your data. I don't think there's really a whole lot of need for examples in this case; if something's a related resource, add a seeAlso link. If something has a definition by another resource, add a isDefinedBy link. Note that last bit, "rdfs:isDefinedBy is a subproperty of rdfs:seeAlso". That means that whenever you assert that "x rdfs:isDefinedBy y", you're implicitly asserting that "x rdfs:seeAlso y".
rdfs:seeAlso is an instance of rdf:Property that is used to indicate a resource that might provide additional information about the subject resource.
rdf is the original resource description framework whereas rdfs provides the schema information

What "pun", "punning" stand for in terms of Protege?

I'am a new to ontologies and Protege and I sometimes meet such words as "pun" or "punning". However, I do not have a clue what they mean. Can you clarify it for me?
"Punning" is not something that comes from Protégé but it's a feature of the Web Ontology Language OWL 2 DL, which Protégé is an editor for. "Punning" refers to the possibility of naming terms of different natures with the same IRI. For instance, you can use the same IRI for a class and for an instance, for a property and an instance, or for a class and a property. In OWL 2 DL, the context always makes it clear whether the IRI is used as a class, a property or an instance. See Section 2.4.1 of OWL 2 New Features and Rationale.

How to convert ontology from DAML to OWL

I'm trying to convert this DAML ontology into OWL (or any other supported by Protege) format. I found an online converter, but the attempt of opening the result of conversion by protege entailed the following error message:
org.semanticweb.owlapi.rdf.syntax.RDFParserException: [line=21:column=39] IRI '#To Interpret' cannot be resolved against curent base IRI file:/home/citxx/Downloads/musicV1.0.xml
There is the result of conversion.
What is wrong with the mentioned converter? Or is there another ways of conversion DAML ontologies into Protege-compatible format?
Two things, spaces can't be in the rdf:ID unless they are escaped, those have to end up forming valid URI's. Also, it doesnt look like there's a defined xml base in that file, which is also a problem.
You might be better off just doing the conversion by hand, its a very basic ontology, and it would not take you long to recreate it in Protege.

Resources