gpt4 book ai didi

rdf - 使用 SPARQL 查询链接电影数据库 (LMDB)

转载 作者:行者123 更新时间:2023-12-02 00:16:26 24 4
gpt4 key购买 nike

给定一个像这样的 RDF 图:

:Matrix [rdfs:label] :The Matrix .
:Matrix [movie:id] :23 .
:Matrix [movie:actor] :Keanu Reaves .
:Matrix [movie:actor] :Laurence Fishburne .
:Die Hard 3 [rdfs:label] :Die Hard 3 .
:Die Hard 3 [movie:id] :42 .
:Die Hard 3 [movie:actor] :Bruce Willis .
:Die Hard 3 [movie:actor] :Samuel L. Jackson .

和这样的查询:

SELECT ?id ?name ?actor
WHERE {
?instance movie:id ?id .
?instance rdfs:label ?name .
?instance movie:actor ?actor .
}

我期望这样的结果:

id | name       | actor
23 | The Matrix | Laurence Fishburne
23 | The Matrix | Keanu Reaves
42 | Die Hard 3 | Bruce Willis
42 | Die Hard 3 | Samuel L. Jackson

但我只得到:

id | name       | actor
23 | The Matrix | Laurence Fishburne
42 | Die Hard 3 | Bruce Willis

这是怎么回事?

顺便说一句,当我使用这个查询时:

SELECT *
WHERE {
?instance movie:id ?id .
?instance rdfs:label "The Matrix" .
?instance movie:actor ?actor .
}

结果是(如预期的那样):

id | name       | actor
23 | The Matrix | Laurence Fishburne
23 | The Matrix | Keanu Reaves

最佳答案

使用 Jena 的 ARQ,我能够使用以下查询从链接电影数据库 SPARQL 端点获取您似乎感兴趣的数据类型:

PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX movie: <http://data.linkedmdb.org/resource/movie/>

SELECT ?id ?filmTitle ?actorName WHERE {
VALUES ?filmTitle { "The Matrix" }
SERVICE <http://data.linkedmdb.org/sparql> {
?film a movie:film ;
movie:filmid ?id ;
dcterms:title ?filmTitle ;
movie:actor [ a movie:actor ;
movie:actor_name ?actorName ].
}
}

data.n3 是一个空文件,因为 arq 需要一个 --data 参数,即使 SERVICE 关键字表示我们正在查询远程数据。

$ arq --query query.sparql --data data.n3 
-----------------------------------------------------------------------------------------
| id | filmTitle | actorName |
=========================================================================================
| "38146"^^<http://www.w3.org/2001/XMLSchema#int> | "The Matrix" | "Keanu Reeves" |
| "38146"^^<http://www.w3.org/2001/XMLSchema#int> | "The Matrix" | "Laurence Fishburne" |
| "38146"^^<http://www.w3.org/2001/XMLSchema#int> | "The Matrix" | "Hugo Weaving" |
| "38146"^^<http://www.w3.org/2001/XMLSchema#int> | "The Matrix" | "Joe Pantoliano" |
| "38146"^^<http://www.w3.org/2001/XMLSchema#int> | "The Matrix" | "Gloria Foster" |
| "38146"^^<http://www.w3.org/2001/XMLSchema#int> | "The Matrix" | "Carrie-Anne Moss" |
-----------------------------------------------------------------------------------------

当然,删除 VALUES ?filmTitle ... 行可以将搜索范围扩大到所有电影及其 Actor 。

您的查询中使用的属性与 LMDB 中使用的实际属性有很大不同,因此很难看出这些不同可能有什么意义。它可能是 rdfs:label 而不是 dcterms:title,或者带或不带语言标签的字符串,等等。

关于rdf - 使用 SPARQL 查询链接电影数据库 (LMDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864893/

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