Rdf 文本的推理和数据类型
在Turtle RDF中,可以方便地省略字符串文本的数据类型扩展名Rdf 文本的推理和数据类型,rdf,owl,reasoning,stardog,turtle-rdf,Rdf,Owl,Reasoning,Stardog,Turtle Rdf,在Turtle RDF中,可以方便地省略字符串文本的数据类型扩展名^^xsd:string。但是,当我尝试使用StarDog进行推理时,只有扩展名为“green”的个人:YYY被发现是:GreenButton @prefix : <http://stackoverflow.com/q/29075078/1281433#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix owl:
^^xsd:string
。但是,当我尝试使用StarDog进行推理时,只有扩展名为“green”的个人:YYY
被发现是:GreenButton
@prefix : <http://stackoverflow.com/q/29075078/1281433#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:color a owl:DatatypeProperty ;
rdfs:range xsd:string ;
rdfs:domain :Button .
:XXX :color "green" .
:YYY :color "green"^^xsd:string .
:Button a rdfs:Class .
:GreenButton a rdfs:Class ;
owl:equivalentClass [ a owl:Restriction;
owl:onProperty :color ;
owl:hasValue "green"
] .
:TestButton a :GreenButton .
@前缀:。
@前缀rdfs:。
@前缀owl:。
@前缀xsd:。
@前缀rdf:。
:为owl:DatatypeProperty着色;
rdfs:range xsd:string;
rdfs:domain:Button。
:XXX:颜色为“绿色”。
:YYY:color“green”^^xsd:string。
:按钮a rdfs:Class。
:绿色按钮a rdfs:Class;
owl:等价类[a owl:限制;
owl:onProperty:color;
猫头鹰:hasValue“绿色”
] .
:测试按钮a:绿色按钮。
推理结果:
+-------------+----------+----------------------------------------------------+
| s | p | o |
+-------------+----------+----------------------------------------------------+
| :XXX | rdf:type | :Button |
| :YYY | rdf:type | :Button |
| :YYY | rdf:type | :GreenButton |
| :TestButton | rdf:type | :GreenButton |
| :TestButton | :color | "green"^^<http://www.w3.org/2001/XMLSchema#string> |
...
+-------------+----------+----------------------------------------------------+
|s|p|o|
+-------------+----------+----------------------------------------------------+
|:XXX | rdf:类型|:按钮|
|:YYY | rdf:type |:按钮|
|:YYY | rdf:type |:绿色按钮|
|:TestButton | rdf:type |:绿色按钮|
|:测试按钮|:颜色|“绿色”^|
...
最好的解决方法是什么?根据:
Stardog中的RDF解析是严格的:它需要类型化的RDF文本来进行解析
在某些情况下,匹配它们的显式数据类型、格式良好的URI等
在某些情况下,严格解析并不理想,可以使用
--严格解析=FALSE
然而,即使禁用了严格解析,Stardog的RDF解析器也可能
遇到无法恢复的分析错误。和加载数据
在lax模式下,可能会导致意外的SPARQL查询结果。例如
筛选器求值中使用的格式错误的文本(“2.5”^^xsd:int)可能导致
导致不希望的结果
您是否尝试过禁用严格解析并查看其效果
p、 见约书亚在问题中的评论。我不建议关闭严格解析,但如果处理的是稀疏类型的任意/外部数据(假设它确实解决了问题),则这可能是唯一的选择。根据:
Stardog中的RDF解析是严格的:它需要类型化的RDF文本来进行解析
在某些情况下,匹配它们的显式数据类型、格式良好的URI等
在某些情况下,严格解析并不理想,可以使用
--严格解析=FALSE
然而,即使禁用了严格解析,Stardog的RDF解析器也可能
遇到无法恢复的分析错误。和加载数据
在lax模式下,可能会导致意外的SPARQL查询结果。例如
筛选器求值中使用的格式错误的文本(“2.5”^^xsd:int)可能导致
导致不希望的结果
您是否尝试过禁用严格解析并查看其效果
p、 见约书亚在问题中的评论。我不建议关闭严格解析,但如果处理类型稀少的任意/外部数据(假设它确实解决了问题),它可能是唯一的选择。根据OWL语义
“green”
和“green”^^xsd:string
实际上是等效的。它们在RDF 1.1中也是等效的。Stardog还不支持RDF1.1,正如您所注意到的,还有一个bug wrt字符串文字推理。您的观察是正确的:OWL axioms中的普通文本会自动转换为xsd:string
,但实例断言中的文本不会。对此有一个公开的通知单(#2340),您可以在将来查看发行说明以查看何时修复。在此之前,解决方法是始终对实例使用xsd:string
。根据OWL语义“绿色”
和“绿色”^^xsd:string
实际上是等效的。它们在RDF 1.1中也是等效的。Stardog还不支持RDF1.1,正如您所注意到的,还有一个bug wrt字符串文字推理。您的观察是正确的:OWL axioms中的普通文本会自动转换为xsd:string
,但实例断言中的文本不会。对此有一个公开的通知单(#2340),您可以在将来查看发行说明以查看何时修复。在此之前,解决方法是始终对实例使用xsd:string
。谢谢您的谷歌搜索;-)我还尝试通过“bin/stardog admin db create-n myDatabase-o strict.parsing=FALSE--/tmp/test.ttl”禁用严格解析,但它似乎没有任何效果。@rmv那么这对您的应用是否有效?这似乎是一个非常好的答案,您将其标记为已接受,但您的评论使其看起来似乎不起作用…@Jushua:问题是“处理它的最佳方式是什么?”据我所知,答案是:在上面的示例中,使用键入的RDF文本,如“green”^^xsd:string。我接受了这个答案。我的评论只涉及关闭严格解析的(不推荐)解决方案。如果有更好/更具硼酸酯的解决方案,可以取消标记答案。约书亚最初的评论当然是对的。rdf和RDF1.1之间确实存在差异,因此这可能是一个因素。我已经稍微更新了我的答案。@chris:对我来说,“绿色”与“绿色”不同没关系^xsd:string。没问题。但我有点困惑,类定义中的语句owl:hasValue“green”会自动转换为“green”^^xsd:string,这可以在推理结果表中看到。谢谢你的谷歌搜索;-)我还尝试通过“bin/stardog admin db create-n myDatabase-o strict.parsing=FALSE--/tmp/test”禁用严格解析。