【问题标题】:How to query multiple tables using ARQ jena?如何使用 ARQ jena 查询多个表?
【发布时间】:2015-05-19 08:21:28
【问题描述】:

概述

我使用ARQ 来查询本地RDFfiles。该查询应用于 5 个文件,这些文件是:

  • a_m.nt、description.nt、labels.nt、links.nt、literals.nt

信息被建模为一组三元组:

  • 主语谓语宾语

算法

首先我想从 a_m.nt 文件中选择特定主题。其次,我想从 description.ntlabels.nt 中选择所选主题的标签和描述。以另一种方式,搜索 description.ntlabels.nt 以查找与从 a_m.nt。最后,我想从 links.ntliterals.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

问题

通过使用这个查询,我首先选择一个类型为music 的主题,然后选择它的描述、标签和其他属性。对吗?

【问题讨论】:

    标签: sparql jena arq


    【解决方案1】:

    在您当前的查询中,您似乎不需要 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. 
    }
    

    把它想象成一个表格,?x ?y ?p ?o 是列标题。一个可能的结果可能是:

    "this is foo" "foo" <type> <music>
    "this is foo" "foo" <description> "this is foo"
    "this is foo" "foo" <label> "foo"
    

    等等

    您的查询将取决于您的数据的组织方式。我的问题是,description.ntlabels.nt 中是否还有其他您想在结果中避免的属性?如果是这样,那么您可能希望将该数据加载到 named graph 并在查询中仅从该图中提取描述和标签。任意示例:

    SELECT ?a ?b
    FROM <A>
    FROM NAMED <B>
    WHERE
    {
      ?x a <foo> .
      GRAPH <B> { ?x ?a ?b }
    }
    

    【讨论】:

    • 是,description.nt 和 labels.nt 中是否还有其他您想在结果中避免的属性? 实际上没有。我还想将它们包含在最终结果中。据我了解,查询是错误的,这就是您认为我不想包含它们的原因。
    • 通过使用图表,我可以包含描述、标签、链接和文字吗?
    • 您的查询没有错,只是让我感到震惊的是,您在同一个结果绑定中混合了值和属性,尤其是在包含几乎可以获取所有内容的最后一个闭包时。使用图表,您可以在运行 SPARQL 时隔离某些三元组。这样,您可以从命名图中检索每个实体的描述和标签,并从默认图中检索其余绑定。这样你就不会在?topic ?p ?o 中重新获得描述和标签。这只是一种方法。
    • 我已经用更好的解释更新了我的答案。希望能帮助到你。这实际上取决于您对每个结果的要求以及处理每个结果的方式..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多