Sparql查询以获取作为“a”的子类的所有类;物业类别“;

Sparql查询以获取作为“a”的子类的所有类;物业类别“;,sparql,semantic-web,owl,protege,Sparql,Semantic Web,Owl,Protege,我需要通过向某些类添加属性来“注释”它们。我需要这样做,以便让我的应用程序的视图层提取正确的类 我所做的是: 创建一个名为uiProperty的对象属性,并编辑这些类,使其成为此类的子类: uiProperty some 因此,我的类的最终OWL代码如下所示: rdfs:subClassOf owebs:RealEstate , [ rdf:type owl:Restriction ;

我需要通过向某些类添加属性来“注释”它们。我需要这样做,以便让我的应用程序的视图层提取正确的类

我所做的是:

创建一个名为uiProperty的对象属性,并编辑这些类,使其成为此类的子类:

uiProperty some
因此,我的类的最终OWL代码如下所示:

rdfs:subClassOf owebs:RealEstate ,
                                [ rdf:type owl:Restriction ;
                                  owl:onProperty owebs:uiProperty ;
                                  owl:someValuesFrom owl:Thing
                                ] ;
现在我想构建一个sparql查询来获取这些类。我做了以下工作:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owbes: <http://www.isep.org/desco/2015/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT $uri $label WHERE {
    $uri rdfs:subClassOf owbes:RealEstate.
    $uri rdfs:subClassOf $x.
    $x owl:onProperty owbes:uiProperty.
    $uri rdfs:label $label
}
前缀rdfs:
前缀owbes:
前缀owl:
选择$uri$标签,其中{
$uri rdfs:owbes子类:不动产。
$uri rdfs:x的子类。
$x owl:onProperty owbes:uiProperty。
$uri rdfs:label$label
}
问题 该查询的结果是类太多。同一节课重复了很多次。例如:

我的问题 为什么会这样? 如何解决呢

我需要通过向某些类添加属性来“注释”它们。我需要 这样做是为了让我的应用程序的视图层提取 正确的班级

这实际上就是注释属性(如rdfs:label)的用途。您可以定义自己的注释属性,然后通过查询SPARQL更直接地检索这些类。例如,这里有一个具有三个特殊类的本体:


真的
真的
我需要通过向某些类添加属性来“注释”它们。我需要 这样做是为了让我的应用程序的视图层提取 正确的班级

这实际上就是注释属性(如rdfs:label)的用途。您可以定义自己的注释属性,然后通过查询SPARQL更直接地检索这些类。例如,这里有一个具有三个特殊类的本体:


真的
真的

如果
选择distinct$uri$label WHERE…,会发生什么情况?结果有点奇怪。也许你使用的是推理机,推理机推断维拉属于那种类型或其他类型时,每种方式都会得到一个结果?@JoshuaTaylor使用
distinct
确实解决了这个问题。我正在使用Fuseki sparql端点。然而,我想知道这些奇怪结果的原因。另外,可能我用错了
子类
。如果没有看到您的数据,我不知道我们是否可以回答这个问题。如果
选择distinct$uri$label WHERE…
,会发生什么情况?结果有点奇怪。也许你使用的是推理机,推理机推断维拉属于那种类型或其他类型时,每种方式都会得到一个结果?@JoshuaTaylor使用
distinct
确实解决了这个问题。我正在使用Fuseki sparql端点。然而,我想知道这些奇怪结果的原因。另外,可能我用错了
子类
。我不知道如果没有看到你的数据,我不知道我们能回答这个问题。请问为什么我有这些奇怪的副本?有什么解决方案而不是独特的吗?对不起,你的意思是我用错了
uiProperty some
?我得走了,我一小时后回来,对不起,我希望一小时后我们可以继续hour@WilliamKinaan好吧,如果这只是为了确定一些类,那么你可能真的不想对它们做出合乎逻辑的断言。说“一个子类[some uiProperty]”意味着类A的每个实例都有一个属性uiProperty的值。这就是你想说的吗?那么我想我的答案就是你想要的。只需要像我一样定义一个新的注释属性,注释你的类,然后你就可以查询具有该属性的类。请问为什么我有这些奇怪的重复项?有什么解决方案而不是独特的吗?对不起,你的意思是我用错了
uiProperty some
?我得走了,我一小时后回来,对不起,我希望一小时后我们可以继续hour@WilliamKinaan好吧,如果这只是为了确定一些类,那么你可能真的不想对它们做出合乎逻辑的断言。说“一个子类[some uiProperty]”意味着类A的每个实例都有一个属性uiProperty的值。这就是你想说的吗?那么我想我的答案就是你想要的。只需像我一样定义一个新的注释属性,注释类,然后就可以查询具有该属性的类。