@Override public void visit(OWLSubClassAxiom owlSubClassAxiom) { // get the complex description out of the axiom List<OWLDescription> descriptions = new ArrayList<OWLDescription>(owlSubClassAxiom.getDescriptions()); for (OWLDescription description : descriptions) { // visit the description and record replacment description.accept(descriptionVisitor); } // construct new Axiom OWLDescription subReplace = descriptionVisitor.getReplacements().get(owlSubClassAxiom.getSubClass()); OWLDescription superReplace = descriptionVisitor.getReplacements().get(owlSubClassAxiom.getSuperClass()); if (subReplace == null) { subReplace = owlSubClassAxiom.getSubClass(); } if (superReplace == null) { superReplace = owlSubClassAxiom.getSuperClass(); } OWLSubClassAxiom replacementAxiom = owlDataFactory.getOWLSubClassAxiom(subReplace, superReplace); // create the changeevents that have to be performed on the ontology try { List<OWLAxiomChange> replaceEvent = OWLUtils.createReplaceAxiomEvents(owlOntology, owlSubClassAxiom, replacementAxiom); axiomChanges.addAll(replaceEvent); } catch (OWLOntologyChangeException e) { e .printStackTrace(); // To change body of catch statement use File | Settings | File // Templates. } // clear the description visitor descriptionVisitor.clear(); super.visit(owlSubClassAxiom); }
private void _createNewOntology() throws Exception { assert namespace.matches(".*(/|#)"); String baseUri = namespace.replaceAll("(/|#)+$", ""); // removing any trailing slash/hash manager = new SKOSManager(); if (namespace.endsWith("#")) { // Ok, OWLAPI v2 works fine with hash separator: dataset = manager.createSKOSDataset(URI.create(baseUri)); } else { ///////////////////////////////////////////////////////////////////////////////////////////// // TODO NOTE: workaround for bug in OWLAPI v2: // Instead of using a baseUri without separator, // use the namespace itself (ie, w/ fragment separator): dataset = manager.createSKOSDataset(URI.create(namespace)); // In this way, the resulting ontology looks OK except that the xml:base is // written with the separator: // // <rdf:RDF xmlns="http://mmisw.org/ont/mmi/cf/parameter/" // xml:base="http://mmisw.org/ont/mmi/cf/parameter/" <<<--- WITH trailing slash // xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#" // xmlns:xsd="http://www.w3.org/2001/XMLSchema#" // xmlns:owl2="http://www.w3.org/2006/12/owl2#" // xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" // xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" // xmlns:owl="http://www.w3.org/2002/07/owl#" // xmlns:skos="http://www.w3.org/2004/02/skos/core#"> // <owl:Ontology rdf:about=""/> // ... // <!-- http://mmisw.org/ont/mmi/cf/parameter/CfStdName --> // // <skos:ConceptScheme rdf:about="CfStdName"/> // // // <!-- http://mmisw.org/ont/mmi/cf/parameter/age_of_stratospheric_air --> // // <skos:Concept rdf:about="age_of_stratospheric_air"> // <skos:inScheme rdf:resource="CfStdName"/> // </skos:Concept> // // // <!-- http://mmisw.org/ont/mmi/cf/parameter/air_density --> // // <skos:Concept rdf:about="air_density"> // <skos:inScheme rdf:resource="CfStdName"/> // </skos:Concept> // // ... ///////////////////////////////////////////////////////////////////////////////////////////// } SAXBuilder builder = new SAXBuilder(); Document document = builder.build(new StringReader(inputContents)); standard_name_table = document.getRootElement(); _getProperty(standard_name_table, "version_number"); _getProperty(standard_name_table, "last_modified"); _getProperty(standard_name_table, "institution"); _getProperty(standard_name_table, "contact"); // TODO assign version_number, last_modified as some properties to the ontology itself. dataFactory = manager.getSKOSDataFactory(); allEntities = new ArrayList<SKOSEntity>(); conceptScheme = dataFactory.getSKOSConceptScheme(URI.create(namespace + CONCEPT_SCHEME)); concepts = new HashSet<SKOSConcept>(); URI topConceptUri = URI.create(namespace + TOP_CONCEPT); topConcept = dataFactory.getSKOSConcept(topConceptUri); concepts.add(topConcept); objectRelationAssertions = new ArrayList<SKOSObjectRelationAssertion>(); dataRelationAssertions = new ArrayList<SKOSDataRelationAssertion>(); // skos:hasTopConcept objectRelationAssertions.add( dataFactory.getSKOSObjectRelationAssertion( conceptScheme, dataFactory.getSKOSHasTopConceptProperty(), topConcept)); ///////////////////////////////////////////////// // OWL API stuff owlManager = manager.getOWLManger(); owlOntology = owlManager.getOntology(URI.create(namespace)); owlDataFactory = owlManager.getOWLDataFactory(); canonicalUnitsProp = owlDataFactory.getOWLDataProperty(URI.create(namespace + "canonical_units")); gribProp = owlDataFactory.getOWLDataProperty(URI.create(namespace + "grib")); amipProp = owlDataFactory.getOWLDataProperty(URI.create(namespace + "amip")); rdfsLabel = owlDataFactory.getOWLDataProperty(URI.create("http://www.w3.org/2000/01/rdf-schema#label")); rdfsComment = owlDataFactory.getOWLDataProperty( URI.create("http://www.w3.org/2000/01/rdf-schema#comment")); owlChanges = new ArrayList<AddAxiom>(); _addOwlChange(topConceptUri, TOP_CONCEPT.replace('_', ' '), "", null, null, null); }
private void _addOwlChange( URI conceptUri, String id, String description, String canonicalUnits, String grib, String amip) { OWLIndividual conceptOwlIndiv = owlDataFactory.getOWLIndividual(conceptUri); // rdfs:label if (id.trim().length() > 0) { OWLTypedConstant owlc = owlDataFactory.getOWLTypedConstant(id.trim()); OWLDataPropertyAssertionAxiom addProp = owlDataFactory.getOWLDataPropertyAssertionAxiom(conceptOwlIndiv, rdfsLabel, owlc); owlChanges.add(new AddAxiom(owlOntology, addProp)); } // rdfs:comment if (description.trim().length() > 0) { OWLTypedConstant owlc = owlDataFactory.getOWLTypedConstant(description.trim()); OWLDataPropertyAssertionAxiom addProp = owlDataFactory.getOWLDataPropertyAssertionAxiom(conceptOwlIndiv, rdfsComment, owlc); owlChanges.add(new AddAxiom(owlOntology, addProp)); } // canonicalUnits if (canonicalUnits != null && canonicalUnits.trim().length() > 0) { OWLTypedConstant owlc = owlDataFactory.getOWLTypedConstant(canonicalUnits.trim()); OWLDataPropertyAssertionAxiom addProp = owlDataFactory.getOWLDataPropertyAssertionAxiom( conceptOwlIndiv, canonicalUnitsProp, owlc); owlChanges.add(new AddAxiom(owlOntology, addProp)); } // grib if (grib != null && grib.trim().length() > 0) { OWLTypedConstant owlc = owlDataFactory.getOWLTypedConstant(grib.trim()); OWLDataPropertyAssertionAxiom addProp = owlDataFactory.getOWLDataPropertyAssertionAxiom(conceptOwlIndiv, gribProp, owlc); owlChanges.add(new AddAxiom(owlOntology, addProp)); } // amip if (amip != null && amip.trim().length() > 0) { OWLTypedConstant owlc = owlDataFactory.getOWLTypedConstant(amip.trim()); OWLDataPropertyAssertionAxiom addProp = owlDataFactory.getOWLDataPropertyAssertionAxiom(conceptOwlIndiv, amipProp, owlc); owlChanges.add(new AddAxiom(owlOntology, addProp)); } }