gpt4 book ai didi

semantic-web - 如何查询匿名类型的实例?

转载 作者:行者123 更新时间:2023-12-04 22:03:05 24 4
gpt4 key购买 nike

假设我有一个类( cls )、一个对象属性( has_part )和一个个体( ind )。个人是 rdf:type'd 是(在曼彻斯特语法中)(has_part only cls) .基本上,个人被认为是匿名类,其部分是 cls .

使用stardog 作为三元组存储,我将如何编写一个查询来拉取所有类型为(has_part only cls) 的个体。 ?

使用 OWLIM 作为三元组存储,我能够编写以下内容:

select ?ind where {
?ind rdf:type ?restriction .
?restriction owl:onProperty has_part .
?restriction owl:allValuesFrom cls
}

据我所知,这在 Stardog 中不起作用,无论我使用什么推理级别。此查询应该如何显示?

谢谢!

编辑 1

我想我过于简化了。如果个人有更复杂的类型,例如 (clsa and (has_part only clsb)) ,下面的查询应该工作吗?
select ?ind where {
?ind rdf:type ?restriction .
?restriction owl:onProperty has_part .
?restriction owl:allValuesFrom clsB
}

如果是这样,那么也许stardog 对我代表的另一部分提出了异议。

编辑 2

约书亚泰勒在下面提供了一个很好的答案。我仍在努力解决它,但它似乎是合理的。

我想写下为什么上述查询适用于 OWLIM 而不适用于 Stardog。 OWLIM 在插入时预先计算所有推理。这意味着,使用上面的例子, (clsa and (has_part only clsb)) , ind断言类型为 clsa(has_part only clsb)直接地。 Stardog 不这样做,这意味着 ind仅推断为 (has_part only clsb)并且,由于(如下所述)Stardog 不支持通过推理检索匿名类的实例,因此不会提取这些实例。

Stardog 的等效查询可能是
select ?ind where {
?ind rdf:type ?anon.
?anon owl:intersectionOf ?a .
?a rdf:first clsa .
?a rdf:rest ?b .
?b rdf:first ?restriction .
?b rdf:rest rdf:nil .
?restriction owl:onProperty has_part .
?restriction owl:allValuesFrom clsB
}

但是,正如 Joshua 在下面指出的那样,这只会选取特定指定为该类型的个人,这意味着被断言为 clsa 的个人。然后断言为 (has_part only clsb)不会被选中,这很可能不是我们想要的。

我仍在尝试让 Joshua 的查询起作用,但对我来说看起来不错。 (我有点像 SPARQL 新手,但我已经到了。)

谢谢您的帮助!

编辑 3

上面没有所有中间变量的查询:
select ?ind where {
?ind rdf:type [
owl:intersectionOf [
rdf:first clsa ;
rdf:rest [
rdf:rest rdf:nil ;
rdf:first [
owl:onProperty has_part ;
owl:allValuesFrom clsB ;
] ;
] ;
] ;
] ;
}

最佳答案

Stardog(从 2.1 版开始)不支持通过推理检索匿名类的实例。但是,在您的示例中,您可以简单地运行查询而无需推理,并且您应该得到预期的结果,因为个人是直接输入限制的。

关于semantic-web - 如何查询匿名类型的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21607859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com