Как мне получить единицу квалификатора в группе операторов в SPARQL?

#sparql #wikidata

#sparql #викиданные

Вопрос:

Я пытаюсь получить все объекты IBA cocktail, включая их рецепт, из Викиданных. Все термины, которые я использую, взяты из документации викиданных.

Запрос должен возвращать название коктейля, все ингредиенты и их количество (количество и единица измерения). Мой запрос возвращает все, что я перечислил, кроме единицы ингредиента:

 SELECT ?cocktail ?cocktailLabel ?cocktailDescription ?material ?quantity ?unit ?ingredient ?ingredientLabel WHERE {
  ?cocktail wdt:P31 wd:Q2536409; # cocktails from the IBA official cocktail list
            p:P186 ?material.    # get statement of materials used
  ?material ps:P186 ?ingredient; # get ingredient entity from materials used
            pq:P1114 ?quantity.  # get quantity of the relation
  OPTIONAL {
    ?cocktail p:P186/psn:P186 [wikibase:quantityUnit ?unit ].
  }
  MINUS { ?material wdt:P31 wd:Q81727. } #remove cups from materials
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
  

Этот узел оператора должен выдавать идентификатор коньяка, этикетку коньяка, количество (в данном случае 3) и единицу измерения 3 коньяка (в данном случае сантилитры).

Что я должен добавить в запрос?

Комментарии:

1. SELECT ?cocktail ?cocktailLabel ?cocktailDescription ?materialStmt ?quantity ?unitLabel ?ingredient ?ingredientLabel WHERE { ?cocktail wdt:P31 wd:Q2536409; p:P186 ?materialStmt. ?materialStmt ps:P186 ?ingredient; pqv:P1114 [ wikibase:quantityAmount ?quantity ; wikibase:quantityUnit ?unit ]. MINUS { ?material wdt:P31 wd:Q81727. } SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } } ORDER BY DESC(?cocktail)

2. привет, спасибо за ваш вклад. это мне очень помогло и решило мою проблему! вы хотите опубликовать свой комментарий в разделе ответов? тогда я могу пометить проблему как решенную, и вы будете отмечены как участник, который ее решил 🙂