我有三个类,我们称它们为:A
,:B
还有:C
一个 property :p
。
每个语句X: :p :Y
都应该成为:A
, when:X a :B
和:Y a :C
目前我更喜欢使用 OWL 的解决方案,但也可以使用 SPARQL 和/或 SHACL。
用于独立三元组的明显 SPARQL 解决方案:
PREFIX : <http://example.com/ontology#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
CONSTRUCT {
[] a :A, rdf:Statement ;
rdf:subject ?X ;
rdf:predicate :p ;
rdf:object ?Y
}
WHERE {
?X a :B .
?X :p ?Y .
?Y a :C .
}
使用 Jena 规则,您可能可以使用makeSkolem(...)
.
如果没有对您要表达的内容的直观假设,您的问题相当模棱两可,而且完全不可能解析。这可能是由于您为了避免复杂的精确性而选择了非正式的,或者是对 RDF 和 OWL 概念的含义的混淆。
我最初解释这句话的方式:
每个语句
X: :p :Y
都应该成为:A
那是:
形式的每个 RDF 三元组
?x :p ?y
(其中?x
和?y
分别是任何主语和宾语)都可以推断为 class 的成员:A
。
在这种情况下很容易回答这个问题:它不能用 RDF、RDFS、OWL、SWRL、RIF、SPARQL、SPIN、SHACL 中的任何一种来表示。原因是在任何这些形式和语言中,永远不可能限制任何类包含 RDF 三元组。为此,有必要将 RDF 三元组作为该语言的一等公民。
如果存在混淆,则可能是该类rdf:Statement
经常被错误地认为是 RDF 三元组的类。rdf:Statement
,尽管被描述为一种表达关于语句的语句的方式,但无论您如何编写数据、本体、查询、形状、规则等,它都不受任何方式的约束以包含 RDF 三元组。该类rdf:Statement
只是形式上的一个任意类别的资源。
但是,查看评论和答案,很可能我对您使用“声明”和“成为会员”的解释不适合您想要实现的目标。
已修改... 这可能无法满足您的需求,因为它是在推断rdf:Statement,而不是独立的三元组。如果没有具体化,我无法弄清楚如何做到这一点。也许有命名图的东西,尽管这通常与 OWL 实现不兼容。也许你会喜欢Blazegraph 的“Reification Done Right”
此外,也许您已经知道如何做到这一点。
断言lemonTest 是一个rdf:Statement。在 Hermit 推理的情况下,可以推断出 lemonTest 是一个风味语句。
@prefix : <http://example.com/ontology#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.w3.org/2002/07/owl#> .
[ rdf:type owl:Ontology ;
owl:imports rdf: ,
rdfs:
] .
:flavor rdf:type owl:ObjectProperty .
:flavorStatement rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty rdf:object ;
owl:someValuesFrom :flavor
] ,
[ rdf:type owl:Restriction ;
owl:onProperty rdf:subject ;
owl:someValuesFrom :fruit
] ;
rdfs:subClassOf rdf:Statement .
:fruit rdf:type owl:Class .
:lemon a :fruit .
:lemonTest rdf:type owl:NamedIndividual ,
rdf:Statement ;
rdf:object :flavor ;
rdf:predicate :result ;
rdf:subject :lemon .
:sour a :flavor .
第一次尝试: 我也不是 OWL 专家,但 Protégé 中的隐士推理者并没有抱怨这一点:
@prefix : <http://example.com/ontology#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:root a owl:Class .
:A a rdf:Statement ;
rdf:subject :X ;
rdf:predicate :p ;
rdf:object :Y ;
rdfs:subClassOf :root .
:B rdfs:subClassOf :root .
:C rdfs:subClassOf :root .
:X a :B .
:p a owl:ObjectProperty .
:Y a :C .