package org.obolibrary.oboformat; import static org.junit.Assert.assertEquals; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.Annotation; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.AnnotationAssertion; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.Class; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.Declaration; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.IRI; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.Literal; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.ObjectProperty; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.ObjectSomeValuesFrom; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.RDFSComment; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.RDFSLabel; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.SubAnnotationPropertyOf; import static org.semanticweb.owlapi.apibinding.OWLFunctionalSyntaxFactory.SubClassOf; import static org.semanticweb.owlapi.util.OWLAPIStreamUtils.asUnorderedSet; import static org.semanticweb.owlapi.vocab.OWL2Datatype.XSD_STRING; import java.util.Set; import org.junit.Test; import org.semanticweb.owlapi.api.test.baseclasses.TestBase; import org.semanticweb.owlapi.formats.OBODocumentFormat; import org.semanticweb.owlapi.io.StringDocumentSource; import org.semanticweb.owlapi.model.MissingImportHandlingStrategy; import org.semanticweb.owlapi.model.OWLAnnotationAssertionAxiom; import org.semanticweb.owlapi.model.OWLAnnotationProperty; import org.semanticweb.owlapi.model.OWLAnnotationSubject; import org.semanticweb.owlapi.model.OWLAnnotationValue; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLLiteral; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OntologyConfigurator; import com.google.common.collect.Sets; @SuppressWarnings("javadoc") public class LoadAnonymousTestCase extends TestBase { private static OWLLiteral literal(String s) { return Literal(s, XSD_STRING); } private static OWLAnnotationAssertionAxiom comment(OWLAnnotationSubject s, OWLAnnotationValue v) { return AnnotationAssertion(RDFSComment(), s, v); } private static OWLAnnotationAssertionAxiom label(OWLAnnotationSubject s, OWLAnnotationValue v) { return AnnotationAssertion(RDFSLabel(), s, v); } private static OWLAnnotationProperty ap(String s, String r) { return df.getOWLAnnotationProperty(s, r); } @Test public void shouldLoad() throws OWLOntologyCreationException { String input = "format-version: 1.2\n" + "date: 27:06:2013 17:08\n" + "saved-by: gkoutos\n" + "auto-generated-by: OBO-Edit 2.3\n" + "subsetdef: abnormal_slim \"Abnormal/normal slim\"\n" + "subsetdef: absent_slim \"Absent/present slim\"\n" + "subsetdef: attribute_slim \"Attribute slim\"\n" + "subsetdef: cell_quality \"cell_quality\"\n" + "subsetdef: disposition_slim \"Disposition slim\"\n" + "subsetdef: mpath_slim \"Pathology slim\"\n" + "subsetdef: prefix_slim \"prefix slim\"\n" + "subsetdef: relational_slim \"Relational slim: types of quality that require an additional entity in order to exist\"\n" + "subsetdef: scalar_slim \"Scalar slim\"\n" + "subsetdef: unit_group_slim \"unit group slim\"\n" + "subsetdef: unit_slim \"unit slim\"\n" + "subsetdef: value_slim \"Value slim\"\n" + "default-namespace: quality\n" + "namespace-id-rule: * UO:$sequence(7,0,9999999)$\n" + "remark: Filtered by Ancestor ID equals \"UO:0000000\"\n" + "ontology: uo\n" + "ontology: pato\n" + "ontology: pato\n" + "ontology: pato\n" + '\n' + "[Term]\n" + "id: UO:0000000\n" + "name: unit\n" + "namespace: unit.ontology\n" + "def: \"A unit of measurement is a standardized quantity of a physical quality.\" [Wikipedia:Wikipedia]\n" + "created_by: george gkoutos\n" + '\n' + "[Term]\n" + "id: UO:0000001\n" + "name: length unit\n" + "namespace: unit.ontology\n" + "def: \"A unit which is a standard measure of the distance between two points.\" [Wikipedia:Wikipedia]\n" + "subset: unit_group_slim\n" + "is_a: UO:0000000 ! unit\n" + "relationship: is_unit_of PATO:0001708 ! 1-D extent\n" + "created_by: george gkoutos"; StringDocumentSource streamDocumentSource = new StringDocumentSource(input, new OBODocumentFormat()); OntologyConfigurator loaderConfig = new OntologyConfigurator() .setMissingImportHandlingStrategy(MissingImportHandlingStrategy.SILENT); OWLOntology ontology = m1.loadOntologyFromOntologyDocument(streamDocumentSource, loaderConfig); OWLAnnotationProperty date = ap("http://www.geneontology.org/formats/oboInOwl#", "date"); OWLAnnotationProperty mpathSlim = ap("http://purl.obolibrary.org/obo/uo#", "mpath_slim"); OWLAnnotationProperty subsetProperty = ap("http://www.geneontology.org/formats/oboInOwl#", "SubsetProperty"); OWLAnnotationProperty attributeSlim = ap("http://purl.obolibrary.org/obo/uo#", "attribute_slim"); OWLAnnotationProperty hasOBONamespace = ap("http://www.geneontology.org/formats/oboInOwl#", "hasOBONamespace"); OWLAnnotationProperty autogeneratedby = ap("http://www.geneontology.org/formats/oboInOwl#", "auto-generated-by"); OWLAnnotationProperty hasDbXref = ap("http://www.geneontology.org/formats/oboInOwl#", "hasDbXref"); OWLAnnotationProperty defaultnamespace = ap("http://www.geneontology.org/formats/oboInOwl#", "default-namespace"); OWLAnnotationProperty hasOBOFormatVersion = ap("http://www.geneontology.org/formats/oboInOwl#", "hasOBOFormatVersion"); OWLAnnotationProperty iao0000115 = ap("http://purl.obolibrary.org/obo/", "IAO_0000115"); OWLAnnotationProperty namespaceIdRule = ap("http://www.geneontology.org/formats/oboInOwl#", "NamespaceIdRule"); OWLAnnotationProperty createdBy = ap("http://www.geneontology.org/formats/oboInOwl#", "created_by"); OWLAnnotationProperty inSubset = ap("http://www.geneontology.org/formats/oboInOwl#", "inSubset"); OWLAnnotationProperty savedby = ap("http://www.geneontology.org/formats/oboInOwl#", "saved-by"); OWLClass pato0001708 = Class(IRI("http://purl.obolibrary.org/obo/", "PATO_0001708")); OWLClass uo0 = Class(IRI("http://purl.obolibrary.org/obo/", "UO_0000000")); OWLClass uo1 = Class(IRI("http://purl.obolibrary.org/obo/", "UO_0000001")); OWLAnnotationProperty id = ap("http://www.geneontology.org/formats/oboInOwl#", "id"); OWLAnnotationProperty abnormalSlim = ap("http://purl.obolibrary.org/obo/uo#", "abnormal_slim"); OWLAnnotationProperty scalarSlim = ap("http://purl.obolibrary.org/obo/uo#", "scalar_slim"); OWLLiteral literal = literal("Wikipedia:Wikipedia"); OWLAnnotationProperty unitSlim = ap("http://purl.obolibrary.org/obo/uo#", "unit_slim"); OWLAnnotationProperty absentSlim = ap("http://purl.obolibrary.org/obo/uo#", "absent_slim"); OWLObjectProperty isUnitOf = ObjectProperty(IRI("http://purl.obolibrary.org/obo/uo#", "is_unit_of")); OWLAnnotationProperty cellQuality = ap("http://purl.obolibrary.org/obo/uo#", "cell_quality"); OWLAnnotationProperty unitGroupSlim = ap("http://purl.obolibrary.org/obo/uo#", "unit_group_slim"); OWLAnnotationProperty valueSlim = ap("http://purl.obolibrary.org/obo/uo#", "value_slim"); OWLAnnotationProperty prefixSlim = ap("http://purl.obolibrary.org/obo/uo#", "prefix_slim"); OWLAnnotationProperty dispositionSlim = ap("http://purl.obolibrary.org/obo/uo#", "disposition_slim"); OWLAnnotationProperty relationalSlim = ap("http://purl.obolibrary.org/obo/uo#", "relational_slim"); Set<OWLAxiom> expected = Sets.newHashSet(Declaration(date), Declaration(autogeneratedby), Declaration(hasDbXref), Declaration(defaultnamespace), Declaration(subsetProperty), Declaration(hasOBOFormatVersion), Declaration(iao0000115), Declaration(namespaceIdRule), Declaration(createdBy), Declaration(inSubset), Declaration(savedby), Declaration(pato0001708), Declaration(uo0), Declaration(RDFSComment()), Declaration(RDFSLabel()), Declaration(hasOBONamespace), Declaration(uo1), Declaration(id), SubAnnotationPropertyOf(mpathSlim, subsetProperty), AnnotationAssertion(hasOBONamespace, uo1.getIRI(), literal("unit.ontology")), comment(attributeSlim.getIRI(), literal("Attribute slim")), label(iao0000115.getIRI(), literal("definition")), AnnotationAssertion(hasOBONamespace, uo0.getIRI(), literal("unit.ontology")), SubAnnotationPropertyOf(unitSlim, subsetProperty), comment(valueSlim.getIRI(), literal("Value slim")), SubAnnotationPropertyOf(absentSlim, subsetProperty), SubAnnotationPropertyOf(abnormalSlim, subsetProperty), label(uo1.getIRI(), literal("length unit")), label(hasOBOFormatVersion.getIRI(), literal("has_obo_format_version")), label(namespaceIdRule.getIRI(), literal("namespace-id-rule")), SubClassOf(uo1, ObjectSomeValuesFrom(isUnitOf, pato0001708)), SubAnnotationPropertyOf(cellQuality, subsetProperty), comment(relationalSlim.getIRI(), literal( "Relational slim: types of quality that require an additional entity in order to exist")), SubAnnotationPropertyOf(prefixSlim, subsetProperty), SubAnnotationPropertyOf(scalarSlim, subsetProperty), comment(scalarSlim.getIRI(), literal("Scalar slim")), comment(abnormalSlim.getIRI(), literal("Abnormal/normal slim")), SubAnnotationPropertyOf(attributeSlim, subsetProperty), label(uo0.getIRI(), literal("unit")), SubAnnotationPropertyOf(dispositionSlim, subsetProperty), comment(unitSlim.getIRI(), literal("unit slim")), SubAnnotationPropertyOf(relationalSlim, subsetProperty), AnnotationAssertion(id, uo1.getIRI(), literal("UO:0000001")), comment(mpathSlim.getIRI(), literal("Pathology slim")), AnnotationAssertion(createdBy, uo1.getIRI(), literal("george gkoutos")), label(hasDbXref.getIRI(), literal("database_cross_reference")), SubClassOf(uo1, uo0), label(hasOBONamespace.getIRI(), literal("has_obo_namespace")), AnnotationAssertion(id, uo0.getIRI(), literal("UO:0000000")), AnnotationAssertion(createdBy, uo0.getIRI(), literal("george gkoutos")), comment(prefixSlim.getIRI(), literal("prefix slim")), comment(cellQuality.getIRI(), literal("cell_quality")), comment(absentSlim.getIRI(), literal("Absent/present slim")), label(subsetProperty.getIRI(), literal("subset_property")), SubAnnotationPropertyOf(unitGroupSlim, subsetProperty), comment(unitGroupSlim.getIRI(), literal("unit group slim")), comment(dispositionSlim.getIRI(), literal("Disposition slim")), label(inSubset.getIRI(), literal("in_subset")), SubAnnotationPropertyOf(valueSlim, subsetProperty), AnnotationAssertion(inSubset, uo1.getIRI(), unitGroupSlim.getIRI()), df.getOWLAnnotationAssertionAxiom(iao0000115, uo0.getIRI(), literal("A unit of measurement is a standardized quantity of a physical quality."), singleton(Annotation(hasDbXref, literal))), df.getOWLAnnotationAssertionAxiom(iao0000115, uo1.getIRI(), literal("A unit which is a standard measure of the distance between two points."), singleton(Annotation(hasDbXref, literal)))); assertEquals(expected, asUnorderedSet(ontology.axioms())); } }