使用关系运算符的SPARQL查询

iNikkz

我想SPARQL查询使用关系AND / OR运算符

在这里查询:

SELECT DISTINCT ?dbpedia_link str(?name) as ?label str(?label1) as ?label1 ?freebase_link WHERE {
            ?dbpedia_link rdfs:label ?label1 . 
            ?dbpedia_link foaf:name ?name .
            {
                { ?dbpedia_link rdf:type dbpedia-owl:Film .}
                UNION
                { ?dbpedia_link rdf:type dbpedia-owl:Person .}
            }
            ?dbpedia_link owl:sameAs ?freebase_link .
            FILTER regex(?freebase_link, "^http://rdf.freebase.com") .
            FILTER (lang(?label1) = 'en'). 
            ?name bif:contains "Akshay_Kumar" . 
            ?dbpedia_link dcterms:subject ?sub 
        }

在此查询中,我使用了单个名称Akshay_Kumar现在,我想要如何使用关系AND / OR运算符一次使用多个名称简而言之,我们如何在sparql中使用关系运算符

执行sparql查询网址:http ://dbpedia.org/sparql

约书亚·泰勒(Joshua Taylor)

连词

AND很容易。如果要说X与属性P的Y以及Z与属性Q的Z都相关,则只需包含两个三元组:

X P Y .
X Q Z .

可以缩写为:

XPY; QZ。

现在,如果属性相同,那么您说X通过属性P与Y和Z相关,则变为:

X P Y ;
  P Z .

SPARQL为此提供了一个简写(它与RDF的Turtle序列化共享):

X P Y, Z .

析取

OR比较复杂,但是您已经展示了一种实现方法。如果你想说的是,X是与任何Y或Z,你可以这样做:

{ X P Y } UNION { X P Z }

SPARQL 1.1包含的功能VALUES可以使此操作更简单:

VALUES ?xpValue { Y Z }
X P ?xpValue

更新查询

您的查询实际上不是合法的SPARQL 1.1(或SPARQL),即使Virtuoso(DBpedia运行的端点)接受了该查询。您可以使用sparql.org的查询验证器进行测试还要注意,您正在使用bif:contains,它提供了一个字符串包含功能,但是SPARQL 1.1实际上提供了一个可以使用包含功能。它还提供了strstart,您可以使用它们来更有效地识别freebase链接。它还提供了langMatches,这是检查字符串的语言标签的正确方法。使用这些,我将像下面这样重写您的查询,该查询查找名称包含“ John”或“ Mary”的资源。(此限制仅是为了使结果简短)。

select ?resource ?name ?label ?freebase where {
  values ?type { dbpedia-owl:Film dbpedia-owl:Person }
  values ?namePart { "John" "Mary" }

  ?resource rdfs:label ?label ;
            foaf:name ?name ;
            a ?type ;
            owl:sameAs ?freebase .

  filter ( langMatches( lang(?label), 'en' ) &&
           strstarts(str(?freebase), "http://rdf.freebase.com" ) &&
           contains( ?name, ?namePart ) )
}
limit 10

SPARQL结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章