gpt4 book ai didi

python - 使用关系运算符的 SPARQL 查询

转载 作者:太空狗 更新时间:2023-10-29 22:26:12 26 4
gpt4 key购买 nike

我想在 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 查询 URL:http://dbpedia.org/sparql

最佳答案

连词

AND 很简单。如果你想说 X 通过属性 P 与 Y 相关,通过属性 Q 与 Z 相关,你只需包括这两个三元组:

X P Y .
X Q Z .

可以缩写为:

X P Y ; Q Z .

现在,如果属性相同,那么你说 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's query validator 进行测试.另请注意,您使用的是 bif:contains,它提供了字符串包含功能,但 SPARQL 1.1 实际上提供了一个 contains。您可以使用的功能。它还提供strstarts您可以使用它来更有效地识别 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 results

关于python - 使用关系运算符的 SPARQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25424787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com