我知道这听起来像是一个非常愚蠢的问题,但我一直试图解决这个问题而且我找不到任何相关内容,尽管这显然应该是可行的。
我正在开发一些使用Manchester OWL语法和HermiT推理器通过其API查询OWL文件的东西。我也可以在Protege 4的DL Query选项卡上运行查询,以检查我在该文件上的查询结果。该文件基本上是添加数据实例的朋友之友(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添加的值相同。它存在于个人中。
它执行此查询:
Person and firstName value "Andrew"
所有数据属性都不是专门的数据类型。默认情况下被视为文字。
我真的不知道我做错了什么。有人可以帮忙吗?
答案 0 :(得分:7)
我知道这个问题已经发布一年多了,但我最近问了同样的问题并找到了以下解决方案:
只需将要查询的个人/成员的名称放在大括号中:
{MyIndividualEntityName}
通过这种方式,您甚至可以一次查询多个人:
{IndividualName1,IndividualName2}
请注意,这些查询形成了所谓的enumarated classes的类表达式。这意味着,此查询的结果不仅仅是您在查询中命名的所有个人的所有超类或子类的列表。相反,它指的是一个匿名类,它由您列出的个人组成。 匿名类是一个不在本体之外的类,因为此类没有可引用的owl实体(没有IRI可以引用)。
您可以在官方W3C specification找到有关OWL曼彻斯特语法的更多信息。