如何使用 ARQ jena 查询多个表?
How to query multiple tables using ARQ jena?
概览
我正在使用 ARQ 来查询本地 RDF
文件。查询应用于 5 个文件,这些文件是:
- a_m.nt、description.nt、labels.nt、links.nt、literals.nt
信息被建模为一组三元组:
- 主语谓语宾语
算法
首先,我想 select 来自 a_m.nt 文件的特定主题。其次,我想 select 来自 description.nt 和 labels.nt[ 的 selected 主题的标签和描述=54=]。另一种方式,搜索 description.nt 和 labels.nt 寻找与主题相同的描述和标签摘自 a_m.nt。最后我想从 links.nt 和 literals.nt.
中提取其余属性
查询
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?x ?y ?p ?o
where {
?topic rdf:type music.
?topic rdf:description ?x.
?topic rdf:label ?y.
?topic ?p ?o.
}
命令行
sparql --data a_m.nt --data description.nt --data label.nt --data links.nt --data literals.nt --query query_sparql
问题
通过使用此查询,首先我 select 一个类型为 music
的主题,然后我 select 它的描述、标签和其他属性。对吗?
在您当前的查询中,您似乎不需要 where 子句中的所有这些绑定,因为您无论如何都会使用最后一条语句 ?topic ?p ?o
检索所有内容。您需要正确命名 music
变量,并可能将 DISTINCT
添加到 select 子句。所以也许可以像这样重写查询:
PREFIX : <http://example.org/>
select DISTINCT ?topic ?p ?o
where {
?topic a :music.
?topic ?p ?o.
}
可能的结果可能是:
<foo> <type> <music>
<foo> <description> "this is foo"
<foo> <label> "foo"
<bar> <type> <music>
<bar> <label> "bar"
这与您的查询不同,更笼统。您基本上可以取回 music
类型的所有内容以及与它们关联的所有属性和值。在您的查询中,您只会返回具有一些描述和标签(并且类型为 music
)的结果,以及与它们关联的所有属性和值:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX : <http://example.org/>
select ?x ?y ?p ?o
where {
?topic rdf:type :music.
?topic rdf:description ?x.
?topic rdf:label ?y.
?topic ?p ?o.
}
将其视为 table,?x ?y ?p ?o
是列 headers。可能的结果可能是:
"this is foo" "foo" <type> <music>
"this is foo" "foo" <description> "this is foo"
"this is foo" "foo" <label> "foo"
等等
您的查询将取决于您的数据的组织方式。我的问题是,description.nt
和 labels.nt
中是否还有您希望在结果中避免的其他属性?如果是这样,那么您可能希望将该数据加载到 named graph 中,并在查询中仅从该图表中提取描述和标签。任意示例:
SELECT ?a ?b
FROM <A>
FROM NAMED <B>
WHERE
{
?x a <foo> .
GRAPH <B> { ?x ?a ?b }
}
概览
我正在使用 ARQ 来查询本地 RDF
文件。查询应用于 5 个文件,这些文件是:
- a_m.nt、description.nt、labels.nt、links.nt、literals.nt
信息被建模为一组三元组:
- 主语谓语宾语
算法
首先,我想 select 来自 a_m.nt 文件的特定主题。其次,我想 select 来自 description.nt 和 labels.nt[ 的 selected 主题的标签和描述=54=]。另一种方式,搜索 description.nt 和 labels.nt 寻找与主题相同的描述和标签摘自 a_m.nt。最后我想从 links.nt 和 literals.nt.
中提取其余属性查询
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?x ?y ?p ?o
where {
?topic rdf:type music.
?topic rdf:description ?x.
?topic rdf:label ?y.
?topic ?p ?o.
}
命令行
sparql --data a_m.nt --data description.nt --data label.nt --data links.nt --data literals.nt --query query_sparql
问题
通过使用此查询,首先我 select 一个类型为 music
的主题,然后我 select 它的描述、标签和其他属性。对吗?
在您当前的查询中,您似乎不需要 where 子句中的所有这些绑定,因为您无论如何都会使用最后一条语句 ?topic ?p ?o
检索所有内容。您需要正确命名 music
变量,并可能将 DISTINCT
添加到 select 子句。所以也许可以像这样重写查询:
PREFIX : <http://example.org/>
select DISTINCT ?topic ?p ?o
where {
?topic a :music.
?topic ?p ?o.
}
可能的结果可能是:
<foo> <type> <music>
<foo> <description> "this is foo"
<foo> <label> "foo"
<bar> <type> <music>
<bar> <label> "bar"
这与您的查询不同,更笼统。您基本上可以取回 music
类型的所有内容以及与它们关联的所有属性和值。在您的查询中,您只会返回具有一些描述和标签(并且类型为 music
)的结果,以及与它们关联的所有属性和值:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX : <http://example.org/>
select ?x ?y ?p ?o
where {
?topic rdf:type :music.
?topic rdf:description ?x.
?topic rdf:label ?y.
?topic ?p ?o.
}
将其视为 table,?x ?y ?p ?o
是列 headers。可能的结果可能是:
"this is foo" "foo" <type> <music>
"this is foo" "foo" <description> "this is foo"
"this is foo" "foo" <label> "foo"
等等
您的查询将取决于您的数据的组织方式。我的问题是,description.nt
和 labels.nt
中是否还有您希望在结果中避免的其他属性?如果是这样,那么您可能希望将该数据加载到 named graph 中,并在查询中仅从该图表中提取描述和标签。任意示例:
SELECT ?a ?b
FROM <A>
FROM NAMED <B>
WHERE
{
?x a <foo> .
GRAPH <B> { ?x ?a ?b }
}