Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SPARQL“ASK”查询,用于检查两个类之间是否存在对象属性(不是b/w个体)_Sparql_Jena_Owl - Fatal编程技术网

SPARQL“ASK”查询,用于检查两个类之间是否存在对象属性(不是b/w个体)

SPARQL“ASK”查询,用于检查两个类之间是否存在对象属性(不是b/w个体),sparql,jena,owl,Sparql,Jena,Owl,我想查询,在OWL2文件中的两个类之间是否存在某些ObjectProperty OP。我正在使用JENA API构造SPARQL查询 到目前为止,我一直在尝试: 首先,我使用SELECT查询检查给定OP的类: " { SELECT ?domain ?range WHERE {\n" + ":isManagedBy rdfs:domain ?domain; \n" + " rdfs:range ?range. \n } }" +

我想查询,在OWL2文件中的两个类之间是否存在某些ObjectProperty OP。我正在使用JENA API构造SPARQL查询

到目前为止,我一直在尝试:

首先,我使用SELECT查询检查给定OP的类:

  " { SELECT ?domain ?range WHERE {\n" +
        ":isManagedBy rdfs:domain ?domain; \n" +
        " rdfs:range ?range. \n } }"  +
                        "}";
然后我用ASK query包装了它

" ASK WHERE { \n" +
     " { SELECT ?domain ?range WHERE {\n" +
        ":isManagedBy rdfs:domain ?domain; \n" +
         " rdfs:range ?range. \n } }"  +
    "}";
这似乎给了我答案,但我想,我在这个问题中混淆了很多东西:

我的目标是查询OWL文件中是否存在某些事实

例如:猫头鹰片段

<owl:ObjectProperty rdf:ID="isManagedBy">
          <rdf:type rdf:resource="owl#FunctionalProperty" />
            <rdfs:domain rdf:resource="#FunctionManagement" />
            <rdfs:range rdf:resource="#SymposiumPlanner2013"/>
    </owl:ObjectProperty>   

我想检查的是:isManagedByFunctionManagement,SymposiumPlanner2013是否存在

在我看来,您似乎想要获取某个属性的域和范围,并且想要验证它们是否与其他特定值匹配。如果是这种情况,并且给出了示例数据,那么第二个查询是正确的

需要注意的一点是,在两个类之间的谓词保持和一个类的两个成员之间的谓词保持的概念之间似乎有一点混淆

示例数据表明,如果您看到:isManagedBy的一个实例,比如三元组:steve:isManagedBy:bill,那么我们可以推断:steve rdf:type:FunctionManagement和:bill rdf:type:SymposiumPlanner2013。这并没有说明类本身,只说明属性实例的主体和对象

如果您试图查看某个属性是否与该类相关,例如:FunctionManagement:isManagedBy some:SymposiumPlanner2013的所有成员,那么您将使用一个限制在数据中表示该属性。然后,您的查询将更改以反映用于解释它的结构。下面是一个指定该约束的小型本体的示例

<owl:ObjectProperty rdf:about="#isManagedBy"/>


<owl:Class rdf:about="#FunctionManagement">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="#isManagedBy"/>
            <owl:someValuesFrom rdf:resource="#SymposiumPlanner2013"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>


<owl:Class rdf:about="#SymposiumPlanner2013"/>

在我看来,您希望获取某个属性的域和范围,并希望验证它们是否与其他特定值匹配。如果是这种情况,并且给出了示例数据,那么第二个查询是正确的

需要注意的一点是,在两个类之间的谓词保持和一个类的两个成员之间的谓词保持的概念之间似乎有一点混淆

示例数据表明,如果您看到:isManagedBy的一个实例,比如三元组:steve:isManagedBy:bill,那么我们可以推断:steve rdf:type:FunctionManagement和:bill rdf:type:SymposiumPlanner2013。这并没有说明类本身,只说明属性实例的主体和对象

如果您试图查看某个属性是否与该类相关,例如:FunctionManagement:isManagedBy some:SymposiumPlanner2013的所有成员,那么您将使用一个限制在数据中表示该属性。然后,您的查询将更改以反映用于解释它的结构。下面是一个指定该约束的小型本体的示例

<owl:ObjectProperty rdf:about="#isManagedBy"/>


<owl:Class rdf:about="#FunctionManagement">
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="#isManagedBy"/>
            <owl:someValuesFrom rdf:resource="#SymposiumPlanner2013"/>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>


<owl:Class rdf:about="#SymposiumPlanner2013"/>

我认为我链接的可能的重复可能足够接近回答您的问题,但是这里没有必要将select查询包装到ask查询中。您正在询问您的数据是否包含三元组:

:isManagedBy rdfs:domain :FunctionManagement .
:isManagedBy rdfs:range  :SymposiumPlanner2013 .
您只需要查询该数据是否存在:

prefix :     <…>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ask {
    :isManagedBy rdfs:domain :FunctionManagement .
    :isManagedBy rdfs:range  :SymposiumPlanner2013 .
}
您甚至可以使用一些缩写来使其更加简洁:

prefix :     <…>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ask {
    :isManagedBy rdfs:domain :FunctionManagement ;
                 rdfs:range  :SymposiumPlanner2013 .
}

我认为我链接的可能的重复可能足够接近回答您的问题,但是这里没有必要将select查询包装到ask查询中。您正在询问您的数据是否包含三元组:

:isManagedBy rdfs:domain :FunctionManagement .
:isManagedBy rdfs:range  :SymposiumPlanner2013 .
您只需要查询该数据是否存在:

prefix :     <…>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ask {
    :isManagedBy rdfs:domain :FunctionManagement .
    :isManagedBy rdfs:range  :SymposiumPlanner2013 .
}
您甚至可以使用一些缩写来使其更加简洁:

prefix :     <…>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ask {
    :isManagedBy rdfs:domain :FunctionManagement ;
                 rdfs:range  :SymposiumPlanner2013 .
}

可能的重复如重复中所述,对象属性不适用于类之间,对象属性适用于个体之间。您询问的是属性的域和范围是否是特定的类。可能的副本显示了如何查找具有给定域和范围的属性;要将其转换为ask,只需指定属性,并使用ask而不是select。例如,ask{:isManagedBy rdfs:domain:FunctionManagement;rdfs:range:SymposiumPlanner}。可能的重复如重复中所述,对象属性在类之间不起作用,对象属性在个体之间起作用。您询问的是属性的域和范围是否是特定的类。可能的副本显示了如何查找具有给定域和范围的属性;要将其转换为ask,只需指定属性,并使用ask而不是select。例如,询问{:isManagedBy-rdfs:domain:FunctionManagement;rdfs:range:SymposiumPlanner}。