我对RDF架构中的多态性有疑问。
我创建了一个“MobilePhone”类:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix my: <http://localhost/> .
my:MobilePhone rdf:type rdfs:Class .
my:MobilePhone rdfs:subClassOf schema:Product .
my:MobilePhone rdfs:label "MobilePhone" .
然后我执行了两个查询:
PREFIX : <http://schema.org/>
PREFIX my: <http://localhost/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?instance
WHERE {
?instance a my:MobilePhone .
}
和
PREFIX : <http://schema.org/>
PREFIX my: <http://localhost/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?instance
WHERE {
?instance a :Product .
}
我希望第二个查询检索所有产品。甚至是“MobilePhone”产品。但那并没有发生。我不得不使用:
PREFIX : <http://schema.org/>
PREFIX my: <http://localhost/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?instance
WHERE {
?class rdfs:subClassOf* :Product .
?instance rdf:type ?class .
}
有谁知道是否可以更新我的架构,以便搜索所有产品的第一个查询可以工作?
答案 0 :(得分:3)
可以更新您的数据(而不是您的架构[或本体])以提供所需的结果,通过&#34;正向链接&#34; - 即明确包括a my:MobilePhone
的每个实体也是a :Product
的陈述。
也可以使用&#34;反向链接&#34;提供理想的结果;具体情况因您的三/四商店和其他软件而异。 (My employer的解决方案Virtuoso使用DEFINE input:inference
pragma到activate an inference rule set for each query。)
这两个都可以被视为&#34;推理&#34;或者&#34;推理&#34;,尽管常见用法通常仅将这些术语应用于动态操作 - 这种情况发生在&#34;反向链接&#34;中的每个查询中,以及一次,预查询,通常在数据期间加载,&#34;正向链接&#34;。