sparql — как сделать запрос через несколько объектов?

У меня есть 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

кто-нибудь может помочь?


person Fehler40    schedule 12.06.2018    source источник


Ответы (1)


Проблема в том, что ?food и japany: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?

person Gilles-Antoine Nys    schedule 12.06.2018
comment
к сожалению, результат пустой... фусеки говорит, что данных нет. ты знаешь почему? и спасибо, я изменил жуткие вещи tordf:DatatypeProperty и rdf:Literal; - person Fehler40; 12.06.2018
comment
Возможно, вы можете попробовать добавить НЕОБЯЗАТЕЛЬНЫЙ фильтр перед каждой строкой и посмотреть, какая из них пуста. НЕОБЯЗАТЕЛЬНЫЙ разрешит ответы, которые не могут предоставить ответ для каждого значения. - person Gilles-Antoine Nys; 13.06.2018
comment
@ Fehler40 Fehler40 Нет rdf:DataProperty ... это часть OWL, поэтому это owl:DatatypeProperty - person UninformedUser; 13.06.2018
comment
@Gilles-Antoine Nys ... после добавления OPTIONAL к каждой строке появляется только значение ?name, поэтому кажется, что работает только последняя строка. но я вообще не получаю данных, если строка «food japany:isPartOf japany:import» не является обязательной. - person Fehler40; 13.06.2018
comment
Я отредактировал ответ. Япония: импорт был плохим, но? Импорт кажется хорошим - person Gilles-Antoine Nys; 13.06.2018
comment
Благодарность! все заработало ..выяснилось, что у меня неправильные отношения: nameOfFood не принадлежит еде. Я изменил его, и с вашим отредактированным ответом все сработало. большое спасибо. - person Fehler40; 13.06.2018