iNi*_*kkz 6 python nlp sparql dbpedia
我想在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
}
Run Code Online (Sandbox Code Playgroud)
在这个查询中,我使用了单个名称的Akshay_Kumar.现在我想要,我如何使用关系AND/OR运算符一次使用多个名称.简而言之,我们如何在sparql中使用关系运算符.
执行sparql查询URL:http://dbpedia.org/sparql
而且很容易.如果你想说X与属性P的Y和属性Q的Z相关,你只需要包含两个三元组:
X P Y .
X Q Z .
Run Code Online (Sandbox Code Playgroud)
这可以缩写为:
XPY; QZ.
现在,如果属性相同,那么你说X与属性P的Y和Z相关,它变为:
X P Y ;
P Z .
Run Code Online (Sandbox Code Playgroud)
SPARQL提供了一个简写(并且它与RDF的Turtle序列化共享):
X P Y, Z .
Run Code Online (Sandbox Code Playgroud)
或者有点复杂,但你已经展示了一种方法.如果你想说的是,X是与任何 Y或Z,你可以这样做:
{ X P Y } UNION { X P Z }
Run Code Online (Sandbox Code Playgroud)
SPARQL 1.1包含VALUES哪些可以使这更简单:
VALUES ?xpValue { Y Z }
X P ?xpValue
Run Code Online (Sandbox Code Playgroud)
您的查询实际上不是合法的SPARQL 1.1(或SPARQL),即使Virtuoso(DBpedia运行的端点)接受它.您可以使用sparql.org的查询验证程序进行测试.另请注意,您正在使用bif:contains,它提供了字符串包含功能,但SPARQL 1.1实际上提供了一个可以使用的包含函数.它还提供了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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3932 次 |
| 最近记录: |