有没有一种方法可以从 OWL 本体文件中获取基本名称空间,而不使用 DOM 或类似的东西,而只使用 Jena 的 API?例如,来自 OWL 文件:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
xmlns="http://www.owl-ontologies.com/Ontology1254827934.owl#"
xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:swrl="http://www.w3.org/2003/11/swrl#"
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://www.owl-ontologies.com/Ontology1254827934.owl">
Run Code Online (Sandbox Code Playgroud)
我怎样才能http://www.owl-ontologies.com/Ontology1254827934.owl在运行时得到?
我用RDFS创建了一个本体,使用相对URIrefs来保存击键.现在,我想用Jena加载本体并使用它来构建我的数据.但是,当我读入文件m.read("file:flow-schema.rdf");并显示它时m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");,相对URIrefs的前缀是file:flow-schema.rdf,而不是http://flowschema/#.如何更改从文件加载的本体的默认前缀?
这是我的本体文件:
<?xml version="1.0" ?>
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:base="http://flowschema/#">
<rdfs:Class rdf:ID="Flow" />
<rdf:Property rdf:ID="srcIP">
<rdfs:domain rdf:resource="#Flow" />
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal" />
</rdf:Property>
<rdf:Property rdf:ID="dstIP">
<rdfs:domain rdf:resource="#Flow" />
<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal" />
</rdf:Property>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)
这是从文件中读取本体的Java代码:
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM);
m.read("file:flow-schema.rdf");
m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");
Run Code Online (Sandbox Code Playgroud) 我正在使用Protégé4.3创建一个简单的本体,并尝试创建一个模型,以使C类的每个实例对于给定的属性p都具有特定的值v,它是V类的实例。我可以使用公理来得到这个推论
C subClassOf(p 值 v)
但我想我希望能够按照
C subClassOf(p 一些 V)
因为我实际上希望C的每个实例都与V的每个实例相关。
我的示例是汽车和动作-我想为汽车创建一组动作。当我创建汽车的新实例时,我希望每个实例都有一套动作。如果我添加了新的动作实例,我希望所有汽车实例都能反映出它们所有相关的动作。
为了进一步说明,我定义了Auto类和两个子类:Car和Truck。我还定义了一个Action类和一个子类TruckAction。我定义了具有域自动和范围动作的hasAction属性,以关联自动和动作。我进一步创建了几个不同类型的人:
当我将Car 设为(hasAction值Accelerate)的子类时,我可以看到ChevyMalibu具有推断的对象属性hasAction Accelerate,但这似乎类似于对对象属性断言进行硬编码。我想为ChevyMalibu推断所有的汽车动作,以及为F150推断所有的 TruckActions 。我不太确定为什么做类似使Car成为(hasAction和Action的子类)之类的事情不会使我到那里。
我认为对 …
我有一个本体(dgo.owl)和一个简单的程序(SparqlQuery.java)来查询相同的本体.在运行查询时,我没有得到任何结果.经过长时间的调试后,我认为将它放入社区是件好事.
查询脚本如下:
OntModel ontmodque = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
InputStream in=FileManager.get().open("ontologies/dgo.owl");
if (ontmodque.isEmpty())
{
ontmodque.read(in,"RDF/XML");
}
String qr= "PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#>\n" +
"PREFIX dgo: <http://www.iiitd.edu.in/~haroonr/ontologies/DGO#>\n" +
"SELECT \n"+
"?property \n"+
"WHERE\n"+
"{ \n"+
"dgo:DiningRoom ssn:hasProperty ?property .\n " +
"}";
Query qy = QueryFactory.create(qr);
QueryExecution qe = QueryExecutionFactory.create(qy,ontmodque);
ResultSet rs= qe.execSelect();
ResultSetFormatter.out(System.out, rs, qy) ;
ontmodque.close();
qe.close();
Run Code Online (Sandbox Code Playgroud)
获得的输出是:

我知道hasProperty对象关系存在于所述本体中.此外,DiningRoom的可能属性应返回Illuminance,Temperature,Co2Content,AbsoluteHumidity.
我不确定我们是否可以从他们的限制中推断两个类的关系...如果我们有两个类:
owl:class1 rdfs:subClassOf [restriction1...], [restriction2...], [restriction3].
owl:class2 rdfs:subClassOf [restriction1...], [restriction2...].
Run Code Online (Sandbox Code Playgroud)
我们可以从这些知识中得出什么推论?看起来owl:class2比广泛owl:class1.我们能推断owl:class1 rdfs:subClassOf owl:class2.一下吗?
我是Protégé的新手。我正在开发一个本体。我的本体类的一部分通过“具有”关系与其他类连接。例如:
Activity has Location
Household has Location
Intervention has CloseWork
Run Code Online (Sandbox Code Playgroud)
我在Protege中将活动,家庭,位置,干预和CloseWork声明为类。我声明“具有”为ObjectProperty。为了显示类之间的关系,我设置了“具有” ObjectProperty的域和范围。例如:为了显示“活动具有位置”,我将“活动”设置为域,并将“位置”设置为范围。我将本体保存为RDF / XML语法。文件显示了我的“具有”对象属性,如下所示:
<owl:ObjectProperty rdf:about="www.ndssl.vbi.vt.edu/epidl#has">
<rdfs:domain rdf:resource="www.ndssl.vbi.vt.edu/epidl#Activity"/>
<rdfs:domain rdf:resource="www.ndssl.vbi.vt.edu/epidl#Household"/>
<rdfs:range rdf:resource="www.ndssl.vbi.vt.edu/epidl#Location"/>
<rdfs:domain rdf:resource="www.ndssl.vbi.vt.edu/epidl#Intervention"/>
<rdfs:range rdf:resource="www.ndssl.vbi.vt.edu/epidl#CloseWork"/>
</owl:ObjectProperty>
Run Code Online (Sandbox Code Playgroud)
从上述RDF语句中,不可能找出哪个域连接到哪个范围(例如,活动具有位置)。请让我知道如何解决它。
这是我的最低数据:
@prefix : <http://example.org/rs#>
:item :hasContext [:weight 0.1 ; :doNotRecommend true] , [:weight 0.2 ] .
:anotherItem :hasContext [:weight 0.4] , [ :weight 0.5 ] .
Run Code Online (Sandbox Code Playgroud)
如您所见,每个item都有一个或多个 hasContext,它的对象hasContext是一个可以有doNotRecommed谓词的实例。
我想要的是,如果这些实例之一(hasContext 的对象)包含 donNotRecommed,我希望总和为零。** 和总和我的意思是权重的总和**,所以换句话说,如果该属性存在,忽略所有权重(无论它们是否存在),只需将其设为零
select ?item (SUM(?finalWeight) as ?summedFinalWeight) {
?item :hasContext ?context .
optional
{
?context :doNotRecommend true .
bind( 0 as ?cutWeight)
}
optional
{
?context :weight ?weight .
}
bind ( if(bound(?cutWeight), ?cutWeight , if(bound(?weight), ?weight, 0.1) ) …Run Code Online (Sandbox Code Playgroud) 我尝试在互联网上搜索,但找不到合适的工具,所以如果有人可以为我提供指向该工具的链接,该工具可以解析和显示 RDF 和 OWL 本体的图形。
这是我用protege 5创建的本体论.
如果我做cl1和cl2不相交,那么本体就是不一致的,但是如果我取消is_friend_of反复,那么本体就不再是不一致了.什么是我的本体错误?
我只希望cl1班上的人拥有is_friend_of财产.
我知道如何获得维基数据实体的直接超类。为此,我使用 SPARQL 代码,例如:
SELECT ?item ?itemLabel
WHERE
{
wd:Q125977 wdt:P279 ?item.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
Run Code Online (Sandbox Code Playgroud)
其中wdt:P279表示subclass of- 属性。
但是,这种直接方法需要对 Wikidata API 进行多次单一请求。
如何通过单个 SPARQL 查询获得相同的信息?
(请注意,上面的示例图仅显示了一个缩略版本。所有超类的最终所需图为 13 层深,有 69 个节点,这意味着 68 个单个请求,如果有兴趣,请参阅此 jupyter notebook。)