Rdf 检查值是否对SPARQL中的自定义数据类型有效

Rdf 检查值是否对SPARQL中的自定义数据类型有效,rdf,sparql,owl,Rdf,Sparql,Owl,以下是我使用自定义数据类型定义的一些RDF/OWL属性,如下所示: :myProp a rdf:Property; rdfs:range [ a rdfs:Datatype ; owl:onDatatype xsd:float ; owl:withRestrictions ( [ xsd:minInclusive 0 ; xsd:maxInclusive 100 ] ) ]; 现在查询可能包含特定值

以下是我使用自定义数据类型定义的一些RDF/OWL属性,如下所示:

:myProp a rdf:Property;
    rdfs:range [
      a rdfs:Datatype ;
      owl:onDatatype xsd:float ;
      owl:withRestrictions ( [
        xsd:minInclusive 0 ;
        xsd:maxInclusive 100
      ] )
    ];
现在查询可能包含特定值的属性时,我当前的查询如下所示:

SELECT ?prop
WHERE {
 ?prop rdfs:range / owl:withRestrictions / rdf:first ?prop_range .
 ?prop_range xsd:minInclusive ?prop_range_min ;
             xsd:maxInclusive ?prop_range_max .
 FILTER( ?prop_range_min < 10 ) .
 FILTER( ?prop_range_max > 10 )
}
SELECT?道具
在哪里{
?道具rdfs:范围/owl:有限制/rdf:第一个?道具范围。
?道具范围xsd:minInclusive?道具范围最小;
xsd:maxInclusive?prop_range_max。
过滤器(?属性范围最小值<10)。
过滤器(?属性范围最大值>10)
}
现在将
10
作为示例值。以这种方式进行查询感觉是不对的


那么,SPARQL中是否有方法检查某个值是否在数据类型的范围内?

看起来您现在几乎有了一个有效的解决方案(即,一个SPARQL查询,用于检查该值是否在指定范围内)。你在寻找什么样的替代方案?但是请注意,数字有{min,max}{Inclusive,Exclusive},您应该使用
=
来表示Inclusive facet。不过,还有其他方面,如正则表达式模式等。SPARQL是一种RDF查询语言,XSD数据类型验证和OWL查询稍微复杂一些。我不认为您会在普通SPARQL中找到任何“更正确”的东西。@JoshuaTaylor对我来说,最佳解决方案是类似于其他操作符的东西,如
isLiteral()
isURI()
,它们也会检查数据类型约束。目前我只看到两个选项:(a)限制我的数据类型只使用
min/maxInclusive
,或者(b)为每个可能的限制组合提供一个特定的查询片段,这将是大量的代码。因此,我想让类似于
isOfType(?myVal,:someCustomType)
的东西来检查给定的值是否在定义的限制范围内。许多SPARQL端点都有一些添加附加函数的选项,因此类似于
isOfType(?val,:type)
的东西可以是一个选项,但它是端点特定的。XSD和OWL数据类型验证可能比您在纯SPARQL中要做的更复杂。看起来您现在几乎有了一个可行的解决方案(即,检查值是否在指定范围内的SPARQL查询)。你在寻找什么样的替代方案?但是请注意,数字有{min,max}{Inclusive,Exclusive},您应该使用
=
来表示Inclusive facet。不过,还有其他方面,如正则表达式模式等。SPARQL是一种RDF查询语言,XSD数据类型验证和OWL查询稍微复杂一些。我不认为您会在普通SPARQL中找到任何“更正确”的东西。@JoshuaTaylor对我来说,最佳解决方案是类似于其他操作符的东西,如
isLiteral()
isURI()
,它们也会检查数据类型约束。目前我只看到两个选项:(a)限制我的数据类型只使用
min/maxInclusive
,或者(b)为每个可能的限制组合提供一个特定的查询片段,这将是大量的代码。因此,我想让类似于
isOfType(?myVal,:someCustomType)
的东西来检查给定的值是否在定义的限制范围内。许多SPARQL端点都有一些添加附加函数的选项,因此类似于
isOfType(?val,:type)
的东西可以是一个选项,但它是端点特定的。XSD和OWL数据类型验证可能比您希望在纯SPARQL中执行的更复杂。