Sparql 确保word-1紧跟在word-2之前

Sparql 确保word-1紧跟在word-2之前,sparql,Sparql,我有一个短语,我把它切分成几个词。每个单词都有一个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

我有一个短语,我把它切分成几个词。每个单词都有一个
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 .
    }
但我得到:

未定义URI函数{position}


我想你差点就成功了。下面的查询将检索文本中位于给定单词前面的所有单词。第一个过滤器类似于您尝试的过滤器(单词2的位置减去单词1的位置是“right before”,通常意味着“right before”,但“is”在您的句子中出现了两次。您能否更准确地说明要求?我非常确定您想要的是可能的。我还有第二个问题:-然后请在单独的StackOverflow问题中提问。原因是您只能将一个答案标记为已接受,因此,如果您的每个子问题最好由不同的so答案回答,并且您仅将一个标记为已接受,则未来的访问者将不再清楚哪个答案实际解决了所述问题。我为了更加清晰,我提出了两个独立的问题(但实际上这是一个有2个需求的sparql查询)。这里我只想问一下如何确保word1紧跟在word2之前。您所说的“如何进行查询以确保ex:word-1紧跟在ex:word-2之前”是什么意思通过任何用于生成RDF的分段过程,根据定义,ex:word-2紧跟在ex:word-1之后。您想要回答的实际问题是什么?比如“单词”后面跟着“帮助”之类的问题,或者是“给我所有相邻单词对”之类的问题嗨,Daniel,谢谢你的回答。我尝试了你在1-Virtuoso中提出的两种查询过滤器,这会导致错误“sparql非数值参数到算术运算”在2-Allegrograph中,这给出了0个结果。你确定你的rdf已经验证了吗?我对你发布的内容有一些问题。例如,你没有使用xsd前缀来分配双值。我在将这个rdf转换为这个rdf时验证了这两个查询
FILTER(ex:position(?position1, ?position2) < 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))
    }
FILTER((?p2 - ?p1)=1) 
select ?word1 ?word2
    {
      ?word1  ex:precedes ?word2 .
      ?word2  ex:label "your label" .
    }