1

^^xsd:string在 Turtle-RDF 中,省略字符串文字的数据类型扩展是很方便的。但是当我尝试用 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> |
  ...

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

4

2 回答 2

4

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

于 2015-06-09T14:14:48.500 回答
3

根据文档

Stardog 中的 RDF 解析是严格的:它需要类型化的 RDF 文字以匹配其显式数据类型、URI 格式正确等。在某些情况下,严格解析并不理想——它可以使用 --strict-parsing= 禁用错误的。

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

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

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

于 2015-06-09T10:05:59.530 回答