文字的推理和数据类型

时间:2015-06-09 09:38:15

标签: rdf owl reasoning stardog turtle-rdf

在Turtle-RDF中,为字符串文字省略数据类型扩展名^^xsd:string很方便。但是,当我尝试使用StarDog http://www.stardog.com/进行推理时,只有:YYY个人"green"^^xsd:string被发现是: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 .

推理结果:

+-------------+----------+----------------------------------------------------+
|      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> |
  ...

处理它的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

根据OWL语义"green""green"^^xsd:string实际上是等价的。它们在RDF 1.1中也是等效的。 Stardog还不支持RDF 1.1,你注意到有一个字符串字面推理错误。您的观察是正确的:OWL公理中的普通文字会自动转换为xsd:string,但实例断言中的文字不会。有一个打开的票据(#2340),您可以在将来检查发行说明,看看何时修复。在此之前,解决方法是始终使用xsd:string作为实例。

答案 1 :(得分:3)

根据docs

  

Stardog中的RDF解析是严格的:它需要类型化的RDF文字   匹配他们的显式数据类型,URI格式正确,等等   在这种情况下,严格的解析并不理想 - 可以使用   --strict-解析= FALSE。

     

然而,即使禁用严格的解析,Stardog的RDF解析器也可能   遇到无法恢复的解析错误。并加载数据   在松弛模式下可能会导致意外的SPARQL查询结果。例如,   过滤器评估中使用的格式错误的文字(“2.5”^^ xsd:int)可能会导致   不希望的结果。

您是否尝试过禁用严格解析并查看效果是什么?

P.S。看约书亚在这个问题上的评论。我并不建议关闭严格的解析,但如果处理稀疏类型的任意/外部数据(假设它确实解决了问题),它可能是唯一的选择。