【问题标题】:querying rdf triples查询 rdf 三元组
【发布时间】:2012-05-14 20:25:11
【问题描述】:

如果我有以下示例,我如何编写 sparql 查询来比较变量(?a,?b)? (这有什么问题吗?):

<ont:XXXXX rdf:about="http://www.myOntDomain#C">
   <ro:part_of rdf:resource="http://www.myOntDomain#A">
   <ro:part_of rdf:resource="http://www.myOntDomain#B">
</ont:XXXXX>

这并没有给我想要的:

select ?s ?a ?b
where {
   ?s a ont:XXXXX; ro:part_of ?a; ro:part_of ?b .
   filter(str(?a) = "http://www.myOntDomain#A" && str(?b) = "http://www.myOntDomain#B")
}

我想要:

http://www.myOntDomain#C http://www.myOntDomain#A http://www.myOntDomain#B

非常感谢。

【问题讨论】:

    标签: rdf sparql owl virtuoso


    【解决方案1】:

    您的问题,或者说您的意图,相当不清楚,因为您所写的查询中唯一未知的是:C。您已经知道:A 和:B 的身份,因为您在查询本身中引用了他们的URI。

    我可以对你想要做的事情有两种解释:

    首先,您只想知道?s 是ont:XXXXX 并具有part_of :A 和:B:

    select ?s where {
        ?s a ont:XXXXX ;
           ro:part_of <http://www.myOntDomain#A> ;
           ro:part_of <http://www.myOntDomain#B>
    }
    

    或者,您想知道?s 是ont:XXXXX 并且(至少)有两个不同的部分:

    select ?s ?a ?b where {
        ?s a ont:XXXXX ;
           ro:part_of ?a, ?b
           FILTER (?a != ?b)
    }
    

    如果这些都不符合你实际想要做的,你需要让问题更清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多