使用 Jena 进行推断
InfModel infmodel = ModelFactory.createInfModel(reasoner, m);
Resource vegetarian = infmodel.getResource(source + "Vegetarian");
Resource margherita = infmodel.getResource(source + "Example-Margherita");
if (infmodel.contains(margherita, RDF., vegetarian)) {
System.out.println("Margherita is a memberOf Vegetarian pizza");
}
上面给出的例子是由正式的 Pizza.owl 构成的。在这只猫头鹰中,Example-Margherita 是 Margherita 类的个体。所以,它已经写在owl文件中了。然而,问题是推理者应该推断 margherita-example 也应该是素食披萨。 谁能举一个例子来说明如何像 Protege 中那样找到一个人可能的推断类?(Protege 正确地推断出 Example-Margherita 是素食披萨。但是,我无法以编程方式推断)
InfModel infmodel = ModelFactory.createInfModel(reasoner, m);
Resource vegetarian = infmodel.getResource(source + "Vegetarian");
Resource margherita = infmodel.getResource(source + "Example-Margherita");
if (infmodel.contains(margherita, RDF., vegetarian)) {
System.out.println("Margherita is a memberOf Vegetarian pizza");
}
The example given above is formed by formal pizza.owl. In this owl, Example-Margherita is an individual of Margherita class. So, it is already written in owl file. However, the problem is that the reasoner should infer that margherita-example should be also an vegetarian pizza.
Could anyone please give an example that shows how to find an individual's possible inferred classes like in Protege ?(Protege correctly infers that Example-Margherita is a Vegetarian Pizza. However, I can't infer programmatically)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我解决了我的问题。我认为我的本体有问题。因此,我创建了另一个本体来推断个体。我创建的本体包含 Person 和 Person 的子类:MalePerson、FemalePerson 和 MarriedPerson。并且,有两个对象属性(hasSpouse、hasSibling)和一个数据类型属性(hasAge)。
而且,我创建了 3 个个体。
约翰 - 男性 - hasAge(20) - hasSibling(Jane)
Jane - 女性 - hasSibling(John) - hasSpouse(Bob)
Bob - MalePerson - hasSpouse(Jane)
而且,我对 MalePerson 和 FemalePerson 类设置了两个限制。
对于男性:
拥有配偶 最多 1
有配偶仅限男性
对于女性:
拥有配偶 最多 1
hasSpouse only FemalePerson
最后,我将 MarriedPerson 定义为一个定义的类。在推理之前,MarriedPerson 没有个体。但是,该模型应该推断 Jane 和 Bob 已婚。因此,最后 MarriedPerson 类应该有 2 个人。
当我使用 Jena 在 Java 中运行此代码时,我推断出了 2 个个体。
I solved my question. I think there was a problem with my ontology. Therefore, I created another ontology to infer individuals. The ontology that I created contains Person and subclasses of Person : MalePerson, FemalePerson and MarriedPerson. And, there are two object properties(hasSpouse, hasSibling) and one data type property(hasAge).
And, I created 3 individuals.
John - MalePerson - hasAge(20) - hasSibling(Jane)
Jane - FemalePerson - hasSibling(John) - hasSpouse(Bob)
Bob - MalePerson - hasSpouse(Jane)
And, I put two restrictions for MalePerson and FemalePerson classes.
For MalePerson :
hasSpouse max 1
hasSpouse only MalePerson
For FemalePerson :
hasSpouse max 1
hasSpouse only FemalePerson
Lastly, I made MarriedPerson to be a defined class. Before reasoning, MarriedPerson has no individual. However, the model should infer that Jane and Bob are married. Therefore, at the end, MarriedPerson class should have 2 individuals.
When I ran this code in Java using Jena, I got 2 inferred individuals.