D2RQ 与 MySQL 数据库的映射在 SPARQL 查询中未返回结果

问题描述 投票:0回答:1

我正在尝试设置 D2RQ 映射以将我的 MySQL 数据库公开为 RDF 并使用 SPARQL 对其进行查询。虽然我的数据库连接似乎工作正常并且我可以直接通过 SQL 查询检索数据,但我的 SPARQL 查询没有返回任何结果。以下是我的设置的详细信息:

本体(my_ontology.owl)

<?xml version="1.0"?>
<rdf:RDF xmlns="http://example.org/ontology#"
     xml:base="http://example.org/ontology"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
    <owl:Ontology rdf:about="http://example.org/ontology"/>
    
    <!-- Class Genre -->
    <owl:Class rdf:about="http://example.org/ontology#Genre"/>
    
    <!-- Subclasses of Genre -->
    <owl:Class rdf:about="http://example.org/ontology#Person">
        <rdfs:subClassOf rdf:resource="http://example.org/ontology#Genre"/>
    </owl:Class>
    <owl:Class rdf:about="http://example.org/ontology#Organization">
        <rdfs:subClassOf rdf:resource="http://example.org/ontology#Genre"/>
    </owl:Class>

    <!-- Class Knowledge -->
    <owl:Class rdf:about="http://example.org/ontology#Knowledge"/>
    
    <!-- Property relatesTo -->
    <owl:ObjectProperty rdf:about="http://example.org/ontology#relatesTo">
        <rdfs:domain rdf:resource="http://example.org/ontology#Knowledge"/>
        <rdfs:range rdf:resource="http://example.org/ontology#Genre"/>
    </owl:ObjectProperty>
</rdf:RDF>

映射文件(mapping.ttl)

@prefix map: <#> .
@prefix db: <> .
@prefix vocab: <vocab/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
@prefix jdbc: <http://d2rq.org/terms/jdbc/> .

*# Load ontology*
map:ontology a d2rq:File;
    d2rq:dataStorage map:database;
    d2rq:fileName "C:/Users/samue/OneDrive/Desktop/my_ontology.owx".

map:database a d2rq:Database;
    d2rq:jdbcDriver "com.mysql.cj.jdbc.Driver";
    d2rq:jdbcDSN "jdbc:mysql://localhost:3306/my_database";
    d2rq:username "root";
    d2rq:password "test123";
    jdbc:zeroDateTimeBehavior "convertToNull";
    jdbc:autoReconnect "true";
    .

*# Table genre mapping*
map:Genre a d2rq:ClassMap;
    d2rq:dataStorage map:database;
    d2rq:class <http://example.org/ontology#Genre>;
    d2rq:uriPattern "genre/@@genre.genre_id@@";
    d2rq:classDefinitionLabel "genre";
    d2rq:labelColumn "genre.genre_name".

*# Table knowledge mapping*
map:Knowledge a d2rq:ClassMap;
    d2rq:dataStorage map:database;
    d2rq:class <http://example.org/ontology#Knowledge>;
    d2rq:uriPattern "knowledge/@@knowledge.knowledge_id@@";
    d2rq:classDefinitionLabel "knowledge";
    d2rq:labelColumn "knowledge.label".

*# Table knowledge_to_genre mapping*
map:KnowledgeToGenre a d2rq:ClassMap;
    d2rq:dataStorage map:database;
    d2rq:class <http://example.org/ontology#KnowledgeToGenre>;
    d2rq:uriPattern "knowledge_to_genre/@@knowledge_to_genre.knowledge_id@@_@@knowledge_to_genre.genre_id@@".

*# Mapping for relatesTo property*
map:Knowledge_Genre_Relation a d2rq:PropertyBridge;
    d2rq:belongsToClassMap map:Knowledge;
    d2rq:property <http://example.org/ontology#relatesTo>;
    d2rq:refersToClassMap map:Genre;
    d2rq:join "knowledge.knowledge_id = knowledge_to_genre.knowledge_id";
    d2rq:join "genre.genre_id = knowledge_to_genre.genre_id".

有效的 SQL 查询

此 SQL 查询正确地从我的数据库检索数据:

mySQL 查询:(https://i.sstatic.net/p9bTIRfg.png)

SELECT * FROM knowledge
JOIN knowledge_to_genre ON knowledge.knowledge_id = knowledge_to_genre.knowledge_id
JOIN genre ON genre.genre_id = knowledge_to_genre.genre_id;
SPARQL Queries

我尝试了几个 SPARQL 查询,但没有一个返回任何结果。以下是一些例子:

PREFIX ont: <http://example.org/ontology#>
SELECT ?knowledge ?genre
WHERE {
  ?knowledge ont:relatesTo ?genre .
}
LIMIT 10

仅基本查询

(SELECT DISTINCT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10)
返回结果,显示流派表中的一些数据。 数据映射似乎是正确的,因为 SQL 查询返回了预期结果。

任何帮助或建议将不胜感激!

sparql rdf owl ontology d2rq
1个回答
0
投票

我认为D2rq已经很多年没有维护了。它的现代替代品位于顶部: https://github.com/ontop/ontop

© www.soinside.com 2019 - 2024. All rights reserved.