SPARQL - запрос всех свойств данных без свойств верхнего уровня - PullRequest
0 голосов
/ 09 января 2019

Я хотел бы запросить все свойства данных конкретного человека.

Мои свойства данных определены в онтологии

В моей онтологии я определил деревья свойств данных.

See Protege Screenshot: Data Properties

Целевое лицо, которое будет запрошено

Моя целевая личность в моей сове определяется следующим образом:

<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>

В Протеже это выглядит так: See Protege Screenshot: Individual in Protege

Прицельный результат

Цель / задача - запросить все определенные свойства данных, показанные в Protege или во фрагменте OWL. Ожидаемый результат для этого запроса должен быть:

----------------------------------------------------------------------------------------------------------------------------------------------------------
| 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"                            |

Может быть, один из вас может объяснить мне, почему это происходит, а также может помочь мне улучшить запрос, чтобы получить нацеленный результат.

1 Ответ

0 голосов
/ 09 января 2019

Решение

Необходимый намек пришел от AKSW:

что не так с результатом запроса? Я имею в виду, это очевидно из-за умозаключение. Так что мое предположение - и вы не показали тип модели, которую вы использовал - вы используете модель вывода. Я прав? Знаешь что умозаключение ака рассуждение есть? Я хочу, чтобы вы только утверждали данные Простейший случай - использовать модель по умолчанию и загрузить данные в этот один - AKSW

Проблема заключалась в использовании модели логического вывода (логического вывода) в Йене:

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!

...