#sparql #rdf
Вопрос:
Я хочу сохранить некоторые факты в чистых данных RDF (ttl), например :
:Person :hasGender :Male, :Female ;
:drink :Liquor, :softDrinks .
if (:someone :hasGender :Male) then
:someone :drink :Liquor ;
else
:someone :drink :softDrinks .
:Susan a :Person ;
:hasGender :Female .
а затем прочитайте эти данные rdf (ttl) с помощью Sparql или другого приложения (rdf4j или rdflib) и получите :
:Susan :drink :softDrinks .
Я хочу использовать чистый RDF как можно больше для хранения данных, а не OWL, N3, RDF-star или SHACL, но я могу восстановить новый файл N3 или shacl из этих данных rdf, а затем получить выводимый результат.
Интересно, возможно ли это в RDF, и как я могу изменить эти данные RDF? Спасибо.
Комментарии:
1. простой RDF-это просто простые явные утверждения. И даже если вы используете RDFS, такой вывод невозможен . Именно поэтому люди придумали OWL и SWRL поверх RDF — чтобы сделать его более выразительным. Либо вы используете что-то поверх RDF, либо это просто невозможно. Это оно.
2. Спасибо вам за ваше объяснение. Я думаю, то, что ты сказал, имеет смысл. Я просто пытаюсь хранить простые условные данные для конкретных сценариев применения. Я думаю, что до сих пор этот подход в основном отвечает моим требованиям
Ответ №1:
Я сделал Это. вот данные.ttl :
@prefix : <http://example.org/#> .
:Person :drink :someLiquid .
:someLiquid :hasRule :rule1, :rule2.
:rule1 :forGender :Male ;
:beverage :liquor .
:rule2 :forGender :Female ;
:beverage :softDrinks .
:Susan a :Person ;
:hasGender :Female .
:John a :Person ;
:hasGender :Male .
вот запрос sparql:
PREFIX : <http://example.org/#>
SELECT ?person ?gender ?beverage
WHERE {
:Person :drink :someLiquid .
:someLiquid :hasRule ?rule .
?rule :forGender ?forGender ;
:beverage ?beverage .
?person a :Person;
:hasGender ?gender .
FILTER ( ?gender = ?forGender )
}
и я получаю результат:
1 person, gender, beverage
2 :Susan, :Female, :softDrinks
3 :John, :Male, :liquor