【问题标题】:Can a query infer a subClassOf?查询可以推断出 subClassOf 吗?
【发布时间】:2020-10-27 13:12:44
【问题描述】:

我有一组信息(当然不是全部显示):

s:Marshmallow    rdfs:subClassOf    s:Android
s:galaxyEdge6    s:OS       s:Marshmallow;
                 s:price    350.
...

我想查询同时是安卓且价格低于400的手机。

我的查询:

SELECT ?phone WHERE {
?phone     s:OS               ?system
?system    rdfs:subClassOf    s:Android
?phone     s:price            ?value
} FILTER (?value < 400)

根据我上面的查询,我是否需要包含?system rdfs:subClassOf s:Android?或者我可以删除该行并将其上方的行更改为:?phone s:OS s:Android

【问题讨论】:

  • 试一试,如果你这样做会怎样?剧透:它应该是空的,因为在您的数据中,图形模式是?phone s:OS ?system . ?system rdfs:subClassOf s:Android,即从手机到作为操作系统的 Android 的 2 条边
  • 另外,您应该知道您使用的是与类和个人相同的 URI。
  • 嗯?我不太清楚你的意思:/
  • 是什么意思?在您的数据中,手机连接到连接到 Android 的操作系统。所以你的 SPARQL 查询必须完全使用这个图形模式。只是做?phone s:OS s:Android 与您数据中的任何内容都不匹配。并且不可能进行推理。一个常见的推理规则是 X rdf:type C . C rdfs:subClassOf D =&gt; X rdf:type D - 这显然不在您的数据范围内。
  • 顺便说一句,您的问题包含一些错误/类型:s:Marshmaloows:Anroid 以及过滤器在查询之外。请使您的示例尽可能正确。

标签: database sparql rdf rdfs turtle-rdf


【解决方案1】:
s:Marshmallow    rdfs:subClassOf    s:Android

这意味着a s:Marshmallow 的任何个人也是a s:Android。你不使用a (rdf:type) 作为谓词,所以没有什么可推断的。

为了说明为什么推断这样的事情甚至应该是危险的,请考虑foaf:membershipClass。这将个人 (foaf:Group) 链接到其成员的一个类,从而两者是等价的(即,作为该组的成员推断具有特定的类,反之亦然)。然而,当owl:Thing 显然是这里的超类时,从foaf:membershipClass ex:MyClass 中推断出类似foaf:membershipClass owl:Thing 的东西是很危险的。

您有两种选择来处理这个问题。无需修改本体,只需将s:OS转为a,即可从s:galaxyEdge6 a s:Marshmallow推​​断s:galaxyEdge6 a s:Android。但是,我不喜欢这种方法,因为它离现实世界的“是”关系太远了,而且查询操作系统更难。

我个人会选择 SKOS 来对操作系统的概念进行建模,即拥有 s:Android a skos:Concepts:Marshmallow skos:broader s:Android。但是,您很可能还需要 OWL 来指定拥有 s:OS &lt;narrower&gt; 需要 s:OS &lt;broader&gt;(无论如何您都必须在不使用 SKOS 的情况下这样做)。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2021-10-17
    • 1970-01-01
    • 2022-10-17
    • 2018-04-25
    • 2021-05-28
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多