java - 如何使用 Jena 获取资源的 EXPLICIT listProperties(非推断属性)
问题描述
我正在使用这个家庭本体(www.cs.man.ac.uk/~stevensr/ontology/family.rdf.owl),我已经删除了所有现有的个人。通过使用 Jena,我在 Person 类中添加了 02 个实例“paul”和“sara”,并声明 sara 是 paul 的姐妹。
String u = "http://www.co-ode.org/roberts/family-tree.owl#";
String path = "src/main/resources/family.rdf.owl" ;
OntModel model = ModelFactory.createOntologyModel();
model.read(path);
OntClass c = model.getOntClass(u + "Person");
Individual s = c.createIndividual(u + "Sara");
Individual p = c.createIndividual(u+"Paul");
model.add(s, model.getObjectProperty(u+"isSisterOf"), p);
StmtIterator stmtIterator = s.listProperties();
stmtIterator.forEachRemaining(System.out::println);
s.listProperties()
返回语句sara isSisterOf paul
但也, , sara isDirectSiblingOf paul
, sara isSiblingOf paul
,sara isBloodRelationOf paul
似乎sara isRelationOf paul
也Resource.listProperties()
返回 INDIRECT 属性,因为 isSisterOf 是其他属性的子属性。我只想要我明确陈述的关系sara isSisterOf paul
,而不是必然的关系。
解决方案
最后,正如我所怀疑的那样,这是一个蕴涵问题。问题在于用于创建 OntModel 的 OntModelSpec 。
我正在使用:OntModel model = ModelFactory.createOntologyModel();
根据 Jena doc,它回答
一种新的本体模型,它将处理本体的内存模型,表示默认本体语言(OWL)
我已更改为OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
耶拿医生说
使用存储在内存 中且不进行额外蕴涵推理的OWL DL模型的规范
现在,只有 DIRECT 关系isSisterOf
由Resource#listProperties
@ssz 感谢您的回复,促使我以新的眼光看待我的问题。
推荐阅读
- python - 开始通话时间和结束通话时间的Python水平图表
- android - ScrollView 在添加边距/填充时会导致滚动,即使内容不需要额外空间
- python - How to solve module problem in Windows 10?
- command-line - How to pass env var to Docusaurus v2
- bash - 在bash中循环直到没有唯一的结果
- c# - SQLite, check if Database Exist and have correct data, More efficient way
- ios - iOS / EXIF 方向 - 如果 iOS 在上传之前调整文件大小,它会改变 exif 方向值
- sql - TSQL to find Null values
- datatables - 如何在 Salesforce 闪电数据表中将日期格式更改为 DD-MM-YYYY?
- java - Mkdir Creates Parent Directory If not exist