为什么 owl:Restriction 推理在 Blazegraph 中不起作用?
Why is owl:Restriction reasoning not working in Blazegraph?
在 Blazegraph 中使用以下 RDF(取自 this answer):
:eats rdf:type owl:ObjectProperty .
:Vegetable rdf:type owl:Class ;
rdfs:subClassOf owl:Thing .
:Vegetarian rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :eats ;
owl:someValuesFrom :Vegetable
] .
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .
以下 SPARQL 返回空白:
select ?who
where
{
?who a :Vegetarian .
}
这里是 Blazegraph 命名空间配置(Blazegraph 运行 作为命令行中的 NanoSparqlServer):
com.bigdata.namespace.kb.spo.com.bigdata.btree.BTree.branchingFactor 1024
com.bigdata.relation.container test-ng-2
com.bigdata.journal.AbstractJournal.bufferMode DiskRW
com.bigdata.journal.AbstractJournal.file bigdata.jnl
com.bigdata.journal.AbstractJournal.initialExtent 209715200
com.bigdata.rdf.store.AbstractTripleStore.vocabularyClass com.bigdata.rdf.vocab.DefaultBigdataVocabulary
com.bigdata.rdf.store.AbstractTripleStore.textIndex false
com.bigdata.btree.BTree.branchingFactor 128
com.bigdata.namespace.kb.lex.com.bigdata.btree.BTree.branchingFactor 400
com.bigdata.rdf.store.AbstractTripleStore.axiomsClass com.bigdata.rdf.axioms.OwlAxioms
com.bigdata.service.AbstractTransactionService.minReleaseAge 1
com.bigdata.rdf.sail.truthMaintenance true
com.bigdata.journal.AbstractJournal.maximumExtent 209715200
com.bigdata.rdf.sail.namespace test-ng-2
com.bigdata.relation.class com.bigdata.rdf.store.LocalTripleStore
com.bigdata.rdf.store.AbstractTripleStore.quads false
com.bigdata.relation.namespace test-ng-2
com.bigdata.btree.writeRetentionQueue.capacity 4000
com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers true
我错过了什么?
原因似乎是
:Carrot rdf:type :Vegetable ,
你从大写字母开始 Carrot,但在
:eats :carrot .
你使用小写字母。
此数据格式不正确:
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .
您还需要说明 :carrot 是 :Carrot 类型的个体,断言如下:
:carrot rdf:type owl:NamedIndividual , owl:Thing, :Carrot .
然后,由于 :carrot 将是 :Carrot 的实例,而 :Carrot 是 :Vegetable 的子类,您可以推断 :carrot 是 :Vegetable 的实例,因此 :John :eats some :蔬菜。如果 Blazegraph 支持 OWL 推理(例如,不仅仅是 RDFS 推理),那应该足以让您推断出 :John 是一个 :Vegetarian(至少根据这个非标准的素食定义)。
存在一些 RDF 语法问题,但根本原因是 Blazegraph 不支持 OWL 开箱即用的推理。查看当前 support。已经有一些针对 ELK Reasoner 的工作。
关于此示例中的 RDF,这里有一个更新已验证可在 Blazegraph 1.5.1 中加载。它结合了上面的反馈并添加了命名空间。我使用上面的属性创建了一个属性 (test.properties) 文件,并使用来自 Sourceforge 的可执行 jar 加载了 Blazegraph。
java -Xmx2g -Dbigdata.propertyFile=test.properties -jar bigdata-bundled.jar
转到 workbench:http://localhost:9999/bigdata/ 并将下面的 RDF 粘贴到 workbench 上的 "Update" 选项卡中,选择 "RDF Data",格式为 "Turtle"。
@prefix : <http://whosebug.com/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:eats rdf:type owl:ObjectProperty .
:Vegetable rdf:type owl:Class ;
rdfs:subClassOf owl:Thing .
:Vegetarian rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :eats ;
owl:someValuesFrom :Vegetable
] .
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:carrot rdf:type owl:NamedIndividual , owl:Thing, :Carrot .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .
如果您随后转到查询选项卡并运行类似以下内容:
select * where { ?s ?p ?o }
您将看到 OWLAxiomsVocabulary 推断出的所有三元组。
在 Blazegraph 中使用以下 RDF(取自 this answer):
:eats rdf:type owl:ObjectProperty .
:Vegetable rdf:type owl:Class ;
rdfs:subClassOf owl:Thing .
:Vegetarian rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :eats ;
owl:someValuesFrom :Vegetable
] .
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .
以下 SPARQL 返回空白:
select ?who
where
{
?who a :Vegetarian .
}
这里是 Blazegraph 命名空间配置(Blazegraph 运行 作为命令行中的 NanoSparqlServer):
com.bigdata.namespace.kb.spo.com.bigdata.btree.BTree.branchingFactor 1024
com.bigdata.relation.container test-ng-2
com.bigdata.journal.AbstractJournal.bufferMode DiskRW
com.bigdata.journal.AbstractJournal.file bigdata.jnl
com.bigdata.journal.AbstractJournal.initialExtent 209715200
com.bigdata.rdf.store.AbstractTripleStore.vocabularyClass com.bigdata.rdf.vocab.DefaultBigdataVocabulary
com.bigdata.rdf.store.AbstractTripleStore.textIndex false
com.bigdata.btree.BTree.branchingFactor 128
com.bigdata.namespace.kb.lex.com.bigdata.btree.BTree.branchingFactor 400
com.bigdata.rdf.store.AbstractTripleStore.axiomsClass com.bigdata.rdf.axioms.OwlAxioms
com.bigdata.service.AbstractTransactionService.minReleaseAge 1
com.bigdata.rdf.sail.truthMaintenance true
com.bigdata.journal.AbstractJournal.maximumExtent 209715200
com.bigdata.rdf.sail.namespace test-ng-2
com.bigdata.relation.class com.bigdata.rdf.store.LocalTripleStore
com.bigdata.rdf.store.AbstractTripleStore.quads false
com.bigdata.relation.namespace test-ng-2
com.bigdata.btree.writeRetentionQueue.capacity 4000
com.bigdata.rdf.store.AbstractTripleStore.statementIdentifiers true
我错过了什么?
原因似乎是
:Carrot rdf:type :Vegetable ,
你从大写字母开始 Carrot,但在
:eats :carrot .
你使用小写字母。
此数据格式不正确:
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .
您还需要说明 :carrot 是 :Carrot 类型的个体,断言如下:
:carrot rdf:type owl:NamedIndividual , owl:Thing, :Carrot .
然后,由于 :carrot 将是 :Carrot 的实例,而 :Carrot 是 :Vegetable 的子类,您可以推断 :carrot 是 :Vegetable 的实例,因此 :John :eats some :蔬菜。如果 Blazegraph 支持 OWL 推理(例如,不仅仅是 RDFS 推理),那应该足以让您推断出 :John 是一个 :Vegetarian(至少根据这个非标准的素食定义)。
存在一些 RDF 语法问题,但根本原因是 Blazegraph 不支持 OWL 开箱即用的推理。查看当前 support。已经有一些针对 ELK Reasoner 的工作。
关于此示例中的 RDF,这里有一个更新已验证可在 Blazegraph 1.5.1 中加载。它结合了上面的反馈并添加了命名空间。我使用上面的属性创建了一个属性 (test.properties) 文件,并使用来自 Sourceforge 的可执行 jar 加载了 Blazegraph。
java -Xmx2g -Dbigdata.propertyFile=test.properties -jar bigdata-bundled.jar
转到 workbench:http://localhost:9999/bigdata/ 并将下面的 RDF 粘贴到 workbench 上的 "Update" 选项卡中,选择 "RDF Data",格式为 "Turtle"。
@prefix : <http://whosebug.com/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:eats rdf:type owl:ObjectProperty .
:Vegetable rdf:type owl:Class ;
rdfs:subClassOf owl:Thing .
:Vegetarian rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :eats ;
owl:someValuesFrom :Vegetable
] .
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:carrot rdf:type owl:NamedIndividual , owl:Thing, :Carrot .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .
如果您随后转到查询选项卡并运行类似以下内容:
select * where { ?s ?p ?o }
您将看到 OWLAxiomsVocabulary 推断出的所有三元组。