在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> |
...
处理它的最佳方法是什么?
答案 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。看约书亚在这个问题上的评论。我并不建议关闭严格的解析,但如果处理稀疏类型的任意/外部数据(假设它确实解决了问题),它可能是唯一的选择。