【问题标题】:SPARQL - Query all data properties without upper-level-propertiesSPARQL - 查询没有上层属性的所有数据属性
【发布时间】:2019-01-08 22:30:26
【问题描述】:

我想查询特定个人的所有数据属性。

我在本体中定义的数据属性

在我的本体中,我定义了数据属性树。

要查询的目标个体

我的目标个体在我的猫头鹰中,定义如下:

<owl:NamedIndividual rdf:about="http://www.owl.de/ontology/i40component-01#I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest">
    <rdf:type rdf:resource="http://www.owl.de/ontology/i40component-01#Manifest"/>
    <decription rdf:datatype="http://www.w3.org/2001/XMLSchema#string">An example work cell.</decription>
    <ele rdf:datatype="http://www.w3.org/2001/XMLSchema#string">35.0</ele>
    <lat rdf:datatype="http://www.w3.org/2001/XMLSchema#string">52.518611</lat>
    <lon rdf:datatype="http://www.w3.org/2001/XMLSchema#string">13.376111</lon>
    <name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">I40 Work Cell 1</name>
    <production_date rdf:datatype="http://www.w3.org/2001/XMLSchema#string">2012-12-31T23:57:00</production_date>
    <uuid rdf:datatype="http://www.w3.org/2001/XMLSchema#string">e41bdfaa-7163-46ed-8cb3-350fa226bbaf</uuid>
</owl:NamedIndividual>

在 Protege 中它看起来像:

目标结果

目标/目的是查询 Protege 或 OWL sn-p 中显示的所有已定义数据属性。此查询的预期结果应该是:

----------------------------------------------------------------------------------------------------------------------------------------------------------
| I40Component                                                                       | dataProperty             | datatypeValue                          |
==========================================================================================================================================================
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:uuid             | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:production_date  | "2012-12-31T23:57:00"                  |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:name             | "I40 Work Cell 1"                      |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lon              | "13.376111"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat              | "52.518611"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:ele              | "35.0"                                 |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:decription       | "An example work cell."                |
----------------------------------------------------------------------------------------------------------------------------------------------------------

我当前的 SPARQL 查询和结果

我当前的测试方法如下所示。它构建并执行一个 SPARQL 查询。

@Test
public void showDataPropertiesOfWholeManifest() {
    SelectBuilder sb = new SelectBuilder() //Building a Query template
            .addPrefix("i40comp", owl.getI40NameSpace() + "#")
            .addPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#")
            .addPrefix("xsd", "http://www.w3.org/2001/XMLSchema#")
            .addPrefix("owl", "http://www.w3.org/2002/07/owl#")
            .addPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");

    //Define Variables      
    sb.addVar("?I40Component");
    sb.addVar("?dataProperty");
    sb.addVar("?datatypeValue");

    //Find Individuals for Type "Manifest"
    sb.addWhere("?I40Component", "rdf:type", URI.generateSparqlURI(I40VOC.Classes.AssetAdministrationShell.Manifest));

    //Find Individual with UUID "e41bdfaa-7163-46ed-8cb3-350fa226bbaf"
    sb.addWhere("?I40Component", "i40comp:uuid", "e41bdfaa-7163-46ed-8cb3-350fa226bbaf"); //Filter I40Component

    //Get all properties of this individual
    sb.addWhere("?dataProperty", "?", "owl:DatatypeProperty");

    // Results preparation
    sb.addWhere("?I40Component", "?dataProperty", "?datatypeValue");

    //Filters blanks and literals
    try {
        sb.addFilter("!isBlank(?datatypeValue)");
        sb.addFilter("isLiteral(?datatypeValue)");
    } catch (ParseException e) {
        e.printStackTrace();
    }

    //Build query and print result
    Query q = sb.build();
    executeSPARQLqueryAndPrintResult(q);
}

或者再次作为查询字符串:

PREFIX  xsd:  <http://www.w3.org/2001/XMLSchema#>
PREFIX  i40comp: <http://www.owl.de/ontology/i40component-01#>
PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  owl:  <http://www.w3.org/2002/07/owl#>
PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT  ?I40Component ?dataProperty ?datatypeValue
WHERE
  { ?I40Component
              rdf:type       i40comp:Manifest ;
              i40comp:uuid   "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" .
    ?dataProperty
              ?              owl:DatatypeProperty .
    ?I40Component
              ?dataProperty  ?datatypeValue
    FILTER ( ! isBlank(?datatypeValue) )
    FILTER isLiteral(?datatypeValue)
  }

不幸的是,结果不是我需要的结果。查看以下结果:

----------------------------------------------------------------------------------------------------------------------------------------------------------
| I40Component                                                                       | dataProperty             | datatypeValue                          |
==========================================================================================================================================================
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:uuid             | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:production_date  | "2012-12-31T23:57:00"                  |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:name             | "I40 Work Cell 1"                      |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lon              | "13.376111"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat              | "52.518611"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:ele              | "35.0"                                 |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:decription       | "An example work cell."                |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "52.518611"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "52.518611"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "An example work cell."                |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "I40 Work Cell 1"                      |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "2012-12-31T23:57:00"                  |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "35.0"                                 |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "35.0"                                 |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:aas              | "13.376111"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "13.376111"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "2012-12-31T23:57:00"                  |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "An example work cell."                |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:manifest         | "I40 Work Cell 1"                      |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "52.518611"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "35.0"                                 |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "13.376111"                            |
----------------------------------------------------------------------------------------------------------------------------------------------------------

SPARQL 查询不知何故进入“上层数据属性”并选择它们作为结果并打印实际子属性的值。 喜欢:

| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:wpt_gps_location | "52.518611"                            |

应该是正常的:

| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat              | "52.518611"                            |

也许你们中的某个人可以向我解释为什么会发生这种情况,并且还可以通过改进查询来支持我以获得目标结果。

【问题讨论】:

  • 那行显然是错误的:sb.addWhere("?dataProperty", "?", "owl:DatatypeProperty"); - 查询解析器肯定会失败。它必须是rdf:type 作为谓词
  • 查询结果有什么问题?我的意思是,这显然是由于推理。所以我的猜测 - 你没有显示你使用的模型类型 - 你正在使用推理模型。我对吗?你知道什么是推理吗?我只想要断言的数据,最简单的情况是使用默认模型并将数据加载到这个模型中
  • 顺便说一句,RDF 和 OWL 支持的数据类型不仅仅是xsd:string ...
  • 嗨@AKSW,(1.)关于您的第一条评论:我没有收到任何错误消息,并且在我更改“?”后结果没有改变到“rdf:类型”。但感谢您的提示,以后我将使用“rdf:type”。 (2.) 关于你的第二条命令。非常感谢这个消息,你是完全正确的。我将OntModel mONT = ModelFactory.createOntologyModel(); 更改为mONT= ModelFactory.createDefaultModel();,然后我得到了目标结果。我是本体领域的新手,必须学习推理的东西。 (3.) 关于您的第三条评论:谢谢!我将更改数据类型,例如GPS坐标

标签: sparql jena ontology


【解决方案1】:

解决方案

所需的提示来自 AKSW:

查询结果有什么问题?我的意思是,这显然是由于 推理。所以我的猜测 - 你没有展示你的模型类型 used - 您正在使用推理模型。我对吗?你知道吗 推理又名推理是什么?我你只想要断言的数据 最简单的情况是使用默认模型并将数据加载到此 一——AKSW

问题是在 Jena 中使用了推理模型(inference aka 推理):

OntModel mONT = ModelFactory.createOntologyModel();

此类模型也会提供干扰数据。

要仅获取我的场景中所针对的断言数据,最简单的方法是仅使用默认模型而不是本体模型(Model 而不是 OntModel):

Model mONT = ModelFactory.createDefaultModel()

通过此更改,我只能获得断言数据和目标结果:

---------------------------------------------------------------------------------------------------------------------------------------------------------
| I40Component                                                                       | dataProperty            | datatypeValue                          |
=========================================================================================================================================================
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lon             | "13.376111"                            |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:ele             | "35.0"                                 |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:decription      | "An example work cell."                |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:name            | "I40 Work Cell 1"                      |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:production_date | "2012-12-31T23:57:00"                  |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:uuid            | "e41bdfaa-7163-46ed-8cb3-350fa226bbaf" |
| i40comp:I40Component_e41bdfaa-7163-46ed-8cb3-350fa226bbaf_I40WorkCell1_AASmanifest | i40comp:lat             | "52.518611"                            |
---------------------------------------------------------------------------------------------------------------------------------------------------------

谢谢 AKSW!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2021-04-06
    • 2022-11-22
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多