Skip to content

Commit

Permalink
Making prefix mapping less strict, fixes #702
Browse files Browse the repository at this point in the history
Adds test that currently codifies ambiguous behavior.

See also #760 for broader issue.

This PR also extends the obo test suite to include this,
and adds some derived files previously missing.
  • Loading branch information
cmungall committed May 15, 2024
1 parent aef24c8 commit ebcd75d
Show file tree
Hide file tree
Showing 26 changed files with 773 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/oaklib/interfaces/basic_ontology_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def converter(self) -> curies.Converter:
:return: A converter
"""
if self._converter is None:
self._converter = curies.Converter.from_prefix_map(self.prefix_map())
self._converter = curies.Converter.from_prefix_map(self.prefix_map(), strict=False)
return self._converter

def set_metamodel_mappings(self, mappings: Union[str, Path, List[Mapping]]) -> None:
Expand Down
61 changes: 61 additions & 0 deletions tests/input/obo-compliance.obo
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,53 @@ idspace: Y http://example.org/Y/
id: X:1
created_by: Y:1

!! name: prefixes-conflict-oio
!! description: tests conflicting prefixes/contractions for oboInOwl namespace, where oio might be built-in
!! unstable: true
!! seeAlso: https://github.com/INCATools/ontology-access-kit/issues/760
idspace: oboInOwl http://www.geneontology.org/formats/oboInOwl#

[Term]
id: X:1
name: X:1
def: "." []

!! name: prefixes-conflict-skos
!! description: tests conflicting prefixes for the SKOS namespace
!! unstable: true
!! seeAlso: https://github.com/INCATools/ontology-access-kit/issues/760
idspace: skos http://example.org/not-skos/

[Term]
id: X:1
property_value: skos:exactMatch Y:1

[Typedef]
id: skos:exactMatch
is_metadata_tag: true

!! name: prefixes-conflict-main-idspace
!! description: tests conflicting prefixes for the main ID space
!! invalid: true
!! seeAlso: https://github.com/INCATools/ontology-access-kit/issues/760
idspace: X http://example.org/X/
idspace: FAKEX http://example.org/X/

[Term]
id: X:1
name: X:1

!! name: expansion-conflict-main-idspace
!! description: tests conflicting expansions for the main ID space
!! invalid: true
!! seeAlso: https://github.com/INCATools/ontology-access-kit/issues/760
idspace: X http://example.org/X/
idspace: X http://example.org/FAKEX/

[Term]
id: X:1
name: X:1

!! # #########
!! # Headers
!! # #########
Expand Down Expand Up @@ -658,6 +705,20 @@ subset: S {source="PMID:123464"}
id: X:1
disjoint_from: X:2 {source="PMID:123465"}

!! name: gci-relation
!! description: General Class Inclusion relation

[Term]
id: X:1
relationship: R:1 X:2 {gci_predicate="R:2", gci_filler="X:3"}

!! name: gci-is-a
!! description: General Class Inclusion is_a

[Term]
id: X:1
is_a: X:2 {gci_predicate="R:2", gci_filler="X:3"}

!! name: created_by-annotated
!! description: Metadata for creator with annotation

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name: expansion-conflict-main-idspace
name: expansion-conflict-main-idspace
description: tests conflicting expansions for the main ID space
invalid: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
format-version: 1.4
ontology: expansion-conflict-main-idspace
idspace: X http://example.org/X/
idspace: X http://example.org/FAKEX/

[Term]
id: X:1
name: X:1


31 changes: 31 additions & 0 deletions tests/input/obo-compliance/gci-is-a/gci-is-a.expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"graphs" : [ {
"id" : "http://purl.obolibrary.org/obo/gci-is-a.owl",
"meta" : {
"basicPropertyValues" : [ {
"pred" : "http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion",
"val" : "1.4"
} ]
},
"nodes" : [ {
"id" : "http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion",
"lbl" : "has_obo_format_version",
"type" : "PROPERTY"
}, {
"id" : "http://www.geneontology.org/formats/oboInOwl#id",
"lbl" : "id",
"type" : "PROPERTY"
} ],
"edges" : [ {
"sub" : "http://purl.obolibrary.org/obo/X_1",
"pred" : "is_a",
"obj" : "http://purl.obolibrary.org/obo/X_2",
"meta" : {
"basicPropertyValues" : [ {
"pred" : "http://www.geneontology.org/formats/oboInOwl#gci_predicate",
"val" : "R:2"
} ]
}
} ]
} ]
}
83 changes: 83 additions & 0 deletions tests/input/obo-compliance/gci-is-a/gci-is-a.expected.owl
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?xml version="1.0"?>
<rdf:RDF xmlns="http://purl.obolibrary.org/obo/gci-is-a.owl#"
xml:base="http://purl.obolibrary.org/obo/gci-is-a.owl"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:oboInOwl="http://www.geneontology.org/formats/oboInOwl#">
<owl:Ontology rdf:about="http://purl.obolibrary.org/obo/gci-is-a.owl">
<oboInOwl:hasOBOFormatVersion>1.4</oboInOwl:hasOBOFormatVersion>
</owl:Ontology>



<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Annotation properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->




<!-- http://www.geneontology.org/formats/oboInOwl#gci_predicate -->

<owl:AnnotationProperty rdf:about="http://www.geneontology.org/formats/oboInOwl#gci_predicate"/>



<!-- http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion -->

<owl:AnnotationProperty rdf:about="http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion">
<rdfs:label>has_obo_format_version</rdfs:label>
</owl:AnnotationProperty>



<!-- http://www.geneontology.org/formats/oboInOwl#id -->

<owl:AnnotationProperty rdf:about="http://www.geneontology.org/formats/oboInOwl#id">
<rdfs:label>id</rdfs:label>
</owl:AnnotationProperty>



<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->




<!-- http://purl.obolibrary.org/obo/X_1 -->

<owl:Class rdf:about="http://purl.obolibrary.org/obo/X_1">
<rdfs:subClassOf rdf:resource="http://purl.obolibrary.org/obo/X_2"/>
<oboInOwl:id>X:1</oboInOwl:id>
</owl:Class>
<owl:Axiom>
<owl:annotatedSource rdf:resource="http://purl.obolibrary.org/obo/X_1"/>
<owl:annotatedProperty rdf:resource="http://www.w3.org/2000/01/rdf-schema#subClassOf"/>
<owl:annotatedTarget rdf:resource="http://purl.obolibrary.org/obo/X_2"/>
<oboInOwl:gci_predicate>R:2</oboInOwl:gci_predicate>
</owl:Axiom>



<!-- http://purl.obolibrary.org/obo/X_2 -->

<owl:Class rdf:about="http://purl.obolibrary.org/obo/X_2"/>
</rdf:RDF>



<!-- Generated by the OWL API (version 4.5.26) https://github.com/owlcs/owlapi -->

3 changes: 3 additions & 0 deletions tests/input/obo-compliance/gci-is-a/gci-is-a.meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name: gci-is-a
name: gci-is-a
description: General Class Inclusion is_a
7 changes: 7 additions & 0 deletions tests/input/obo-compliance/gci-is-a/gci-is-a.obo
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
format-version: 1.4
ontology: gci-is-a

[Term]
id: X:1
is_a: X:2 {gci_predicate="R:2", gci_filler="X:3"}

31 changes: 31 additions & 0 deletions tests/input/obo-compliance/gci-relation/gci-relation.expected.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"graphs" : [ {
"id" : "http://purl.obolibrary.org/obo/gci-relation.owl",
"meta" : {
"basicPropertyValues" : [ {
"pred" : "http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion",
"val" : "1.4"
} ]
},
"nodes" : [ {
"id" : "http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion",
"lbl" : "has_obo_format_version",
"type" : "PROPERTY"
}, {
"id" : "http://www.geneontology.org/formats/oboInOwl#id",
"lbl" : "id",
"type" : "PROPERTY"
} ],
"edges" : [ {
"sub" : "http://purl.obolibrary.org/obo/X_1",
"pred" : "http://purl.obolibrary.org/obo/R_1",
"obj" : "http://purl.obolibrary.org/obo/X_2",
"meta" : {
"basicPropertyValues" : [ {
"pred" : "http://www.geneontology.org/formats/oboInOwl#gci_predicate",
"val" : "R:2"
} ]
}
} ]
} ]
}
104 changes: 104 additions & 0 deletions tests/input/obo-compliance/gci-relation/gci-relation.expected.owl
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?xml version="1.0"?>
<rdf:RDF xmlns="http://purl.obolibrary.org/obo/gci-relation.owl#"
xml:base="http://purl.obolibrary.org/obo/gci-relation.owl"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:oboInOwl="http://www.geneontology.org/formats/oboInOwl#">
<owl:Ontology rdf:about="http://purl.obolibrary.org/obo/gci-relation.owl">
<oboInOwl:hasOBOFormatVersion>1.4</oboInOwl:hasOBOFormatVersion>
</owl:Ontology>



<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Annotation properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->




<!-- http://www.geneontology.org/formats/oboInOwl#gci_predicate -->

<owl:AnnotationProperty rdf:about="http://www.geneontology.org/formats/oboInOwl#gci_predicate"/>



<!-- http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion -->

<owl:AnnotationProperty rdf:about="http://www.geneontology.org/formats/oboInOwl#hasOBOFormatVersion">
<rdfs:label>has_obo_format_version</rdfs:label>
</owl:AnnotationProperty>



<!-- http://www.geneontology.org/formats/oboInOwl#id -->

<owl:AnnotationProperty rdf:about="http://www.geneontology.org/formats/oboInOwl#id">
<rdfs:label>id</rdfs:label>
</owl:AnnotationProperty>



<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->




<!-- http://purl.obolibrary.org/obo/R_1 -->

<owl:ObjectProperty rdf:about="http://purl.obolibrary.org/obo/R_1"/>



<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->




<!-- http://purl.obolibrary.org/obo/X_1 -->

<owl:Class rdf:about="http://purl.obolibrary.org/obo/X_1">
<rdfs:subClassOf rdf:nodeID="genid1"/>
<oboInOwl:id>X:1</oboInOwl:id>
</owl:Class>
<owl:Restriction rdf:nodeID="genid1">
<owl:onProperty rdf:resource="http://purl.obolibrary.org/obo/R_1"/>
<owl:someValuesFrom rdf:resource="http://purl.obolibrary.org/obo/X_2"/>
</owl:Restriction>
<owl:Axiom>
<owl:annotatedSource rdf:resource="http://purl.obolibrary.org/obo/X_1"/>
<owl:annotatedProperty rdf:resource="http://www.w3.org/2000/01/rdf-schema#subClassOf"/>
<owl:annotatedTarget rdf:nodeID="genid1"/>
<oboInOwl:gci_predicate>R:2</oboInOwl:gci_predicate>
</owl:Axiom>



<!-- http://purl.obolibrary.org/obo/X_2 -->

<owl:Class rdf:about="http://purl.obolibrary.org/obo/X_2"/>
</rdf:RDF>



<!-- Generated by the OWL API (version 4.5.26) https://github.com/owlcs/owlapi -->

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name: gci-relation
name: gci-relation
description: General Class Inclusion relation
7 changes: 7 additions & 0 deletions tests/input/obo-compliance/gci-relation/gci-relation.obo
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
format-version: 1.4
ontology: gci-relation

[Term]
id: X:1
relationship: R:1 X:2 {gci_predicate="R:2", gci_filler="X:3"}

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name: prefixes-conflict-main-idspace
name: prefixes-conflict-main-idspace
description: tests conflicting prefixes for the main ID space
invalid: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
format-version: 1.4
ontology: prefixes-conflict-main-idspace
idspace: X http://example.org/X/
idspace: FAKEX http://example.org/X/

[Term]
id: X:1
name: X:1

Loading

0 comments on commit ebcd75d

Please sign in to comment.