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 .
然后通过 Sparql 或其他应用程序(rdf4j 或 rdflib)读取此 rdf 数据(ttl),并获取:
:Susan :drink :softDrinks .
我想尽可能使用纯RDF来存储数据,而不是OWL、N3、RDF-star或者SHACL,但是我可以从这些rdf数据中重构一个新的N3或者shacl文件,然后得到推断结果。我想知道这在 RDF 中是否可行,我该如何修改这个 RDF 数据?谢谢。
解决方案
我搞定了。这是 data.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
推荐阅读
- python - 如何在运行 exe 遇到错误时整理所有必要的 Pyinstaller 隐藏导入,而无需进行故障排除
- javascript - Angular typescript object.assign 不起作用(它返回错误无法读取 null 的“长度”)
- python - 绑定滑块以适应音频位置而不会导致性能下降
- mongodb - 使用 mongoDB 和 express.js 实现分页 REST API
- fortran - 临时数组创建和例程 GEMM
- coq - `Set` 类型的具体例子是什么,`Set` 的含义是什么?
- javascript - Angular 9按钮单击多次触发
- visual-studio-code - 信任作者对话框中的复选框和是选项有什么区别?
- linux - 要为 arm(多功能板)编译和构建 linux-5.8.10 映像并使用 Qemu 模拟它:
- reactjs - 为什么道具传递到另一个页面时为空 - React?