在 java 中指定 ontology IRI
Specifying ontology IRI in java
我正在尝试合并两个本体来创建一个新的单一 ontology。为此,我应该如何指定新ontology的IRI?它应该是新文件的路径还是一些 url?
这是我的代码:
void createRepOntology(OWLOntology O1, OWLOntology O2) throws IOException, OWLOntologyCreationException, OWLOntologyStorageException
{
OWLOntologyManager man = OWLManager.createOWLOntologyManager();
OWLDataFactory fac = man.getOWLDataFactory();
OWLOntology ont;
FileWriter writer = new FileWriter(new File(System.getProperty("user.dir") + "/repOnt.owl"));
String url = "file://" + System.getProperty("user.dir") + "/repOnt.owl";
IRI iri = IRI.create(url);
ont = man.createOntology(iri);
. . .
OWLClass c = fac.getOWLClass(IRI.create(url1));
OWLAxiom ax = fac.getOWLDeclarationAxiom(c);
man.addAxiom(ont, ax);
man.saveOntology(ont);
}
创建的ontology开始如下:
<?xml version="1.0"?>
<rdf:RDF xmlns="file:///home/repOnt.owl#"
xml:base="file:///home/repOnt.owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:productCatalog="http://www.semanticweb.org/ontologies/2015/11/productCatalog#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ElectronicDevices="http://www.semanticweb.org/ontologies/2015/9/ElectronicDevices#"
xmlns:Acer_Backpack_15="http://www.semanticweb.org/ontologies/2015/11/productCatalog#Acer_Backpack_15.6''">
<owl:Ontology rdf:about="file:///home/repOnt.owl"/>
xmlns
的值为文件路径。但是当我将 url 指定为新的 ontology 的 IRI 时,例如:http://www.semanticweb.org/ontologies/2015/11/productCatalog#
,它会给出以下异常:
Exception in thread "main" org.semanticweb.owlapi.model.OWLOntologyStorageException: java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
at org.semanticweb.owlapi.util.AbstractOWLOntologyStorer.storeOntology(AbstractOWLOntologyStorer.java:147)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:841)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:827)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:821)
at ontomap.RepOnt.createRepOntology(RepOnt.java:112)
at ontomap.RepOnt.run(RepOnt.java:85)
at ontomap.RepOnt.main(RepOnt.java:49)
Caused by: java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1074)
at org.semanticweb.owlapi.util.AbstractOWLOntologyStorer.storeOntology(AbstractOWLOntologyStorer.java:105)
... 6 more
Java Result: 1
那么指定新 ontology 的 IRI 的正确方法是什么?
Should it be the path to the new file or some url?
ontology IRI 应该是一个 IRI。虽然有 "file IRIs"(例如 file://something-here
),但您通常希望 ontology IRI 有用,如果您打算在线发布 ontology,它可以帮助(但不是强制性的)使 ontology IRI 成为一个 IRI,您可以从中检索实际的 ontology。
让 OWL API 知道在哪里保存您创建的 ontology 的问题确实是一个不同的问题。 OWL API 文档中的示例包括一个名为 shouldSaveOntology that shows that there's a version of OWLOntologyManager#saveOntology() 的测试用例,它采用两个参数,ontology 和保存它的路径,并提供了一个示例:
File file = folder.newFile("owlapiexamples_saving.owl");
manager.saveOntology(ontology, IRI.create(file.toURI()));
我正在尝试合并两个本体来创建一个新的单一 ontology。为此,我应该如何指定新ontology的IRI?它应该是新文件的路径还是一些 url?
这是我的代码:
void createRepOntology(OWLOntology O1, OWLOntology O2) throws IOException, OWLOntologyCreationException, OWLOntologyStorageException
{
OWLOntologyManager man = OWLManager.createOWLOntologyManager();
OWLDataFactory fac = man.getOWLDataFactory();
OWLOntology ont;
FileWriter writer = new FileWriter(new File(System.getProperty("user.dir") + "/repOnt.owl"));
String url = "file://" + System.getProperty("user.dir") + "/repOnt.owl";
IRI iri = IRI.create(url);
ont = man.createOntology(iri);
. . .
OWLClass c = fac.getOWLClass(IRI.create(url1));
OWLAxiom ax = fac.getOWLDeclarationAxiom(c);
man.addAxiom(ont, ax);
man.saveOntology(ont);
}
创建的ontology开始如下:
<?xml version="1.0"?>
<rdf:RDF xmlns="file:///home/repOnt.owl#"
xml:base="file:///home/repOnt.owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:productCatalog="http://www.semanticweb.org/ontologies/2015/11/productCatalog#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ElectronicDevices="http://www.semanticweb.org/ontologies/2015/9/ElectronicDevices#"
xmlns:Acer_Backpack_15="http://www.semanticweb.org/ontologies/2015/11/productCatalog#Acer_Backpack_15.6''">
<owl:Ontology rdf:about="file:///home/repOnt.owl"/>
xmlns
的值为文件路径。但是当我将 url 指定为新的 ontology 的 IRI 时,例如:http://www.semanticweb.org/ontologies/2015/11/productCatalog#
,它会给出以下异常:
Exception in thread "main" org.semanticweb.owlapi.model.OWLOntologyStorageException: java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
at org.semanticweb.owlapi.util.AbstractOWLOntologyStorer.storeOntology(AbstractOWLOntologyStorer.java:147)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:841)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:827)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:821)
at ontomap.RepOnt.createRepOntology(RepOnt.java:112)
at ontomap.RepOnt.run(RepOnt.java:85)
at ontomap.RepOnt.main(RepOnt.java:49)
Caused by: java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1074)
at org.semanticweb.owlapi.util.AbstractOWLOntologyStorer.storeOntology(AbstractOWLOntologyStorer.java:105)
... 6 more
Java Result: 1
那么指定新 ontology 的 IRI 的正确方法是什么?
Should it be the path to the new file or some url?
ontology IRI 应该是一个 IRI。虽然有 "file IRIs"(例如 file://something-here
),但您通常希望 ontology IRI 有用,如果您打算在线发布 ontology,它可以帮助(但不是强制性的)使 ontology IRI 成为一个 IRI,您可以从中检索实际的 ontology。
让 OWL API 知道在哪里保存您创建的 ontology 的问题确实是一个不同的问题。 OWL API 文档中的示例包括一个名为 shouldSaveOntology that shows that there's a version of OWLOntologyManager#saveOntology() 的测试用例,它采用两个参数,ontology 和保存它的路径,并提供了一个示例:
File file = folder.newFile("owlapiexamples_saving.owl"); manager.saveOntology(ontology, IRI.create(file.toURI()));