我有一个短语,我把它分成几个词。每个单词都有一个ex:position属性,在短语中标记其顺序,如下所示:
"Jack is painting and Mary is helping him"
ex:phrase ex:hasWord ex:word-1 .
ex:word-1 ex:label "Jack" .
ex:word-1 ex:position "1"^^double .
ex:phrase ex:hasWord ex:word-2 .
ex:word-2 ex:label "is" .
ex:word-2 :position "2"^^double .
…如何进行查询,以确保ex:word-1位于ex:word-2之前。
PREFIX ex: <http://www.w3.org/namespace/>
select ?word1 ?word2
{
?word1 ex:label ?label1 .
?word2 ex:label ?label2 .
}为了限制ex:word-1和ex:word-2之间的距离,我尝试了
FILTER(ex:position(?position1, ?position2) < 2) 但我明白:
未定义URI函数{位置}。
发布于 2014-10-16 20:01:41
我想你差点就拿到了。下面的查询将检索文本中给定单词之前的所有单词。第一个过滤器与您尝试的类似(单词2的位置减去单词1的位置是<2),但是差异应该是正的(因此过滤器中的第二个条件):
PREFIX ex: <http://www.w3.org/namespace/>
select ?word1 ?word2
{
?word1 ex:label ?label1 .
?word1 ex:position ?p1 .
?word2 ex:label "label of the word you want" .
?word2 ex:position ?p2 .
FILTER(((?p2 - ?p1)<2) && (?p2>?p1))
}我一直在用Twinkle做一些测试,以下也是允许的:
FILTER((?p2 - ?p1)=1) 这就简化了一切。最后,既然您似乎在控制rdf中断言的内容,那么为什么不创建一个"ex:precedes“关系呢?这样你就可以通过这样的方式得到你的答案:
select ?word1 ?word2
{
?word1 ex:precedes ?word2 .
?word2 ex:label "your label" .
}https://stackoverflow.com/questions/26397153
复制相似问题