我有一个短语,我分为单词。每个单词都有一个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函数{position}。
答案 0 :(得分:1)
我觉得你差不多了。以下查询将检索文本中给定文本之前的所有单词。第一个过滤器类似于您尝试的过滤器(单词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" .
}