我有三个课程,我们称他们为:A
,:B
和:C
以及属性:p
。
X: :p :Y
和:A
:X a :B
都应成为:Y a :C
的成员
目前我更喜欢使用OWL的解决方案,但也可以使用SPARQL和/或SHACL。
答案 0 :(得分:1)
明显的独立三元组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(...)
。
答案 1 :(得分:1)
你的问题很模糊,如果没有关于你想要表达的内容的直观假设,就很难解析。这可能是由于您选择非正式以避免复杂的精确度,或者是对RDF和OWL概念含义的混淆。
我最初解释句子的方式是:
每个声明
的成员X: :p :Y
都应成为:A
那是:
?x :p ?y
形式的每个RDF三元组(其中?x
和?y
分别是任何主题和对象)可以推断为类:A
的成员。
在这种情况下很容易回答这个问题:它不能用任何RDF,RDFS,OWL,SWRL,RIF,SPARQL,SPIN,SHACL表示。原因是永远不可能限制任何类包含任何这些形式和语言中的RDF三元组。要做到这一点,就必须将RDF三元组作为该语言的一等公民。
如果存在混淆,可能是类rdf:Statement
经常被错误地认为是RDF三元组的类。 rdf:Statement
虽然被描述为表达语句陈述的一种方式,但无论如何编写数据,本体,查询,形状,规则等,都不以任何方式限制RDF三元组。正式地说,{1}}是一类任意资源。
然而,看看评论和答案,我对你使用“陈述”和“成为会员”的解释很可能不适合你想要实现的目标。
答案 2 :(得分:0)
修改...... 这可能无法满足您的需求,因为它正在推断 rdf:Statement ,而非独立三联 EM>。如果没有重新表达,我无法想象如何做到这一点。也许是带有命名图的东西,尽管它通常与OWL实现不兼容。也许你想要Blazegraph's "Reification Done Right"
另外,也许你已经知道如何做到这一点。
断言lemonTest是一个rdf:Statement。通过Hermit推理,可以推断出lemonTest是一种flavorStatement。
@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é的Hermit推理员并没有抱怨这个:
@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 .