我知道这听起来像是一个非常愚蠢的问题,但我一直在试图解决这个问题,但我找不到任何关于此的信息,尽管这似乎是可行的。
我正在开发一些使用曼彻斯特 OWL 语法和 HermiT 推理器通过其 API 查询 OWL 文件的东西。我也可以在 Protege 4 中的 DL 查询选项卡上运行查询,以检查我对该文件的查询结果。该文件基本上是添加了数据实例的 friend 之友 (FOAF) 本体。
问题:我找不到通过唯一标识符查询实例的方法。
它应该是URI所以例如对于具有 URI http://xmlns.com/foaf/0.1/Andrew_Kuchling
的 Person 对象,我尝试运行以下查询:
Person and URI value "http://xmlns.com/foaf/0.1/Andrew_Kuchling"
Person value "http://xmlns.com/foaf/0.1/Andrew_Kuchling"
Person and URI value "Andrew_Kuchling"
Person that "Andrew_Kuchling"
这些都不起作用。 (URI 是通过在您输入的任何字符串前面加上前缀
http://xmlns.com/foaf/0.1/
来构造的,而 URI 在本体中实际上并未标识为属性)。在 FOAF,
mbox_sha1sum
是邮箱的 sha1sum。邮箱与个人唯一相关。所以我尝试了以下查询:Person and mbox_sha1sum value "mbox_sha1sum-property-value-here"
但是,它甚至不执行此查询,因为它感觉查询不正确。
mbox_sha1sum
值与我为此人添加的值相同。它存在于个体中。它确实执行此查询:
Person and firstName value "Andrew"
所有数据属性都不是专门的数据类型。默认情况下被视为文字。
我真的不知道我做错了什么。有人可以请帮忙吗?
最佳答案
我知道这个问题已经在一年多前发布了,但我最近问了我同样的问题并找到了以下解决方案:
只需将您要查询的个人/成员的姓名放在大括号中:
{MyIndividualEntityName}
通过这种方式,您甚至可以一次查询多个人:
{IndividualName1,IndividualName2}
请注意,这些查询形成所谓的 enumarated classes 的类表达式。 .这意味着,此查询的结果将不仅仅是您在查询中命名的所有个人的所有父类(super class)或子类的列表。相反,它指的是一个匿名类,该类完全由您列出的个人组成。
匿名类是不能从本体外部获得的类,因为该类没有可引用的 owl 实体(没有可引用的 IRI)。
您可以在官方 W3C specification 中找到有关 OWL 曼彻斯特语法的更多信息.
关于uri - 如何在 DL Manchester OWL Syntax 中查询个人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086277/