【问题标题】:sparql - how to query through multiple entities?sparql - 如何通过多个实体进行查询?
【发布时间】:2023-03-08 20:08:01
【问题描述】:

我有一个 rdf 模式和海龟语法中的三元组(摘录):

@prefix dbr: <http://dbpedia.org/resource/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

#own, TODO change it
@prefix japany: <http://vschuberth.bplaced.net/rdfschema.ttl#> .

japany:import a rdfs:Class.
japany:food a rdfs:Class.
japany:radioactiveIngredients a rdfs:Class.

japany:imports a rdf:Property;
    rdfs:range dbr:PopulatedPlace;
    rdfs:domain japany:import.

japany:exports a rdf:Property;
    rdfs:range dbr:PopulatedPlace;
    rdfs:domain japany:import.

japany:importQuantity a rdf:Property;
    rdfs:range xsd:integer;
    rdfs:domain japany:import.

japany:importValue a rdf:Property;
    rdfs:range xsd:integer;
    rdfs:domain japany:import.

japany:year a rdf:Property;
    rdfs:range xsd:gYear;
    rdfs:domain japany:import.

japany:isPartOf a rdf:Property;
    rdfs:range japany:import;
    rdfs:domain japany:food.

japany:nameOfIng a rdf:Property;
    rdfs:range rdf:Class;
    rdfs:domain japany:radioactiveIngredients.

japany:amount a rdf:Property;
    rdfs:range japany:bqkg;
    rdfs:domain japany:radioactiveIngredients.

japany:nameOfFood a rdf:Property;
    rdfs:range rdf:Class;
    rdfs:domain japany:food.

japany:dateOfSampling a rdf:Property;
    rdfs:range xsd:date;
    rdfs:domain japany:radioactiveIngredients.

japany:isIn a rdf:Property;
    rdfs:range xsd:food;
    rdfs:domain japany:radioactiveIngredients.

<#Import_of_Olivenöl>
japany:imports dbr:Germany;
japany:exports dbr:Japan;
japany:importQuantity 0;
japany:importValue 36;
japany:year "2011"^^xsd:gYear.

<#Olivenöl_Class>
japany:isPartOf <#Import_of_Olivenöl>.

<#Iodine131_in_Olivenöl>
japany:nameOfIng "Iodine131";
japany:amount "< 2,3";
japany:nameOfFood "Olivenöl";
japany:dateOfSampling "15.04.2011"^^xsd:date;
japany:isIn <#Import_of_Olivenöl>.

<#Cesium134_in_Olivenöl>
japany:nameOfIng "Caesium134";
japany:amount "< 1,54";
japany:nameOfFood "Olivenöl";
japany:dateOfSampling "15.04.2011"^^xsd:date;
japany:isIn <#Import_of_Olivenöl>.

<#Cesium137_in_Olivenöl>
japany:nameOfIng "Caesium137";
japany:amount "< 1,95";
japany:nameOfFood "Olivenöl";
japany:dateOfSampling "15.04.2011"^^xsd:date;
japany:isIn <#Import_of_Olivenöl>.

我很困惑如何查询所有这些实体。它们是相互关联的。例如:我想编写一个查询/查询来获取每年每种食物的 importValue 和 importQuantity 并列出每种放射性成分的含量。

这个查询会给我不正确的数据:

PREFIX japany: <http://vschuberth.bplaced.net/rdfschema.ttl#>


SELECT ?importValue ?importQuantity ?name ?year
WHERE {
  ?trade japany:importValue ?importValue;
         japany:year ?year;
  japany:importQuantity ?importQuantity.
  ?food japany:nameOfFood ?name.

}
ORDER BY ?importQuantity

有人可以帮忙吗?

【问题讨论】:

    标签: sparql rdf semantic-web turtle-rdf


    【解决方案1】:

    问题是?foodjapany:import 在您的查询中没有链接。

    这是一个有效的查询:

    PREFIX japany: <http://vschuberth.bplaced.net/rdfschema.ttl#>
    
    SELECT ?importValue ?importQuantity ?name ?year
    WHERE {
      ?food japany:isPartOf ?import .
      ?import japany:importValue ?importValue ;
                    japany:importQuantity ?importQuantity ;
                    japany:year ?year .
      ?food japany:nameOfFood ?name.
    }
    ORDER BY ?importQuantity
    

    但这太可怕了:

    japany:nameOfFood a rdf:Property;
        rdfs:range rdf:Class.
    

    为什么不将其创建为 DatatypeProperty 并因此存储 Literal

    【讨论】:

    • 不幸的是结果是空的...fuseki 说没有可用的数据。你知道为什么吗?谢谢,我改变了令人毛骨悚然的东西 tordf:DatatypeProperty 和 rdf:Literal;
    • 也许您可以尝试在每行之前添加“可选”过滤器,看看哪个是空的。 OPTIONAL 将允许无法为每个值提供响应的答案。
    • @Fehler40 没有rdf:DataProperty ...这是OWL的一部分,因此,它是owl:DatatypeProperty
    • @Gilles-Antoine Nys ...在每行添加 OPTIONAL 后,只出现 ?name 的值,所以似乎只有最后一行有效。但是如果“?food japany:isPartOf japany:import”这行不是可选的,我根本没有得到任何数据。
    • 我编辑了答案。 japany:import 很糟糕,但 ?import 似乎很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多