Как получить сконструированный результат с учетом онтологии

Я играю (пока что, но целенаправленно) с GraphDB и SPARQL. Чего я сейчас пытаюсь добиться, так это запрашивать из внешнего источника (в данном случае DBPedia) и использовать локально загруженную онтологию для анализа результата. Для этого я импортировал в свой репозиторий GraphDB онтологию DBPedia в виде именованного графа только схему (без инструкций data).

Теперь я выдаю следующий запрос:

PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

construct {
    ?city dbo:country ?country .
    ?city dbo:population ?apop .
}
WHERE {    
    SERVICE <https://dbpedia.org/sparql> 
    {
        {
            ?city   dbo:populationTotal | dbo:totalPopulation | dbo:population ?apop ;
                                                               a dbo:City ;
                                                               dbo:country ?country
            .
            FILTER(?apop > 1000000)
        }
    }
}

dbo:population определяется как свойство в онтологии:

<owl:ObjectProperty rdf:about="http://dbpedia.org/ontology/population">
    <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
    <rdfs:label xml:lang="en">population</rdfs:label>
    <rdfs:domain rdf:resource="http://dbpedia.org/ontology/PopulatedPlace"/>
    <rdfs:range rdf:resource="http://dbpedia.org/ontology/Population"/>
    <prov:wasDerivedFrom rdf:resource="http://mappings.dbpedia.org/index.php/OntologyProperty:population"/>
</owl:ObjectProperty>

Табличное представление содержит эти свойства. Тем не менее, когда я пытаюсь визуализировать результат, он говорит мне, что у городов нет собственности:

введите здесь описание изображения

Я даже пытался добавить dbo:population a rdf:Property, чтобы это утверждение появилось на графике, но не более того. Следуя совету из здесь, я построил объединение графика dbo и моего результата:

PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

construct {
    ?city dbo:country ?country .
    ?city dbo:population ?apop .
    ?o ?p ?s.
}
FROM <http://dbpedia.org/ontology/owl>
WHERE {
    {
        ?o ?p ?s
    }
    UNION {
        SERVICE <https://dbpedia.org/sparql> 
        {
            {
                ?city   dbo:populationTotal | dbo:totalPopulation | dbo:population ?apop ;
                                                               a dbo:City ;
                                                               dbo:country ?country
                FILTER(?apop > 1000000)            
            }
        }   
    }
}

В результате получился большой график, который я не смог визуализировать, но табличное представление показывало все, начиная с онтологии DBPedia и удаленного результата.

Virtuoso обрабатывает схемы отдельно, их можно импортировать, но нет встроенного визуализатора. Мне не удалось найти способ указать визуализатору GraphDB использовать определенную схему для графика. Репозиторий имеет набор правил по умолчанию RDFS-Plus (оптимизированный), а ранее добавленное вручную объявление свойства было правильно определено как owl:ObjectProperty.

Я немного смущен. Как я могу правильно «объединить» объединенный набор результатов с локальной онтологией?


person ZorgoZ    schedule 22.10.2019    source источник
comment
вы пробовали { VALUES ?p {dbo:populationTotal dbo:totalPopulation dbo:population dbo:country} ?p ?o ?s . } UNION { - вы также должны попробовать construct { ?city dbo:country ?country . ?city dbo:populationTotal ?apop ., потому что dbo:population является свойством объекта в DBpedia   -  person UninformedUser    schedule 22.10.2019
comment
@AKSW dbo:populationTotal было моим первым предположением, но дает тот же результат. Запрос с VALUES добавил к графу дополнительные операторы из онтологии, но не свойства к городам.   -  person ZorgoZ    schedule 22.10.2019
comment
Хм, я не могу воспроизвести это. Я попробовал ваш первый запрос на factforge.net/sparql - он работает и извлекает свойства, даже не содержащиеся в запросе, через Принцип связанных данных. Можете ли вы попробовать это на конечной точке Factforge SPARQL. Это то, что вы ожидаете, верно?   -  person UninformedUser    schedule 22.10.2019
comment
@AKSW Да, вроде того. Но в этом инструменте все данные предварительно загружены из DBPedia. Мой экземпляр GraphDB показывает свойства при запросе из локальных данных.   -  person ZorgoZ    schedule 22.10.2019
comment
Я понимаю. Я попробовал это локально, обнаружил, что проблема в запросе SERVICE. Все эти вещи, такие как цвет узла, метка, поиск, поиск свойств, основаны на запросах, которые вы можете настроить в представлении Visual Graph, где вы можете настроить пользовательскую конфигурацию. НО: все эти запросы не работают с результатом запроса CONSTRUCT. Это означает, например, что на дополнительной вкладке Node вы должны настроить запрос таким образом, чтобы он выполнял поиск по ключевому слову SERVICE.   -  person UninformedUser    schedule 23.10.2019