0

我在 java 中有以下代码来查询后端数据库(postgreSQL)上的 SPARQL 查询。

import rdfProcessing.RDFRepository;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.manager.LocalRepositoryManager;
import org.openrdf.repository.manager.RepositoryManager;
import org.openrdf.sail.config.SailImplConfig;
import org.openrdf.sail.memory.config.MemoryStoreConfig;
import org.openrdf.repository.config.RepositoryImplConfig;
import org.openrdf.repository.sail.config.SailRepositoryConfig;
import org.openrdf.repository.config.RepositoryConfig;

public class Qeryrdf {
    Connection connection;

        private static final String REPO_ID = "C:\\RDF_triples\\univData10m\\repositories\\SYSTEM\\memorystore.data";
        private static final String q1 = ""
                        + "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>" +
                        "PREFIX ub:<http://univ.org#>" + 
                        "PREFIX owl:<http://www.w3.org/2002/07/owl#>" +
                        "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
                        " select distinct  ?o ?p  where"+
                        "{ ?s rdf:type ?o." +
                        "}";

        public static void main(String[] args)
                        throws Exception {
            LocalRepositoryManager manager = new LocalRepositoryManager(new File("C:\\RDF triples\\univData1"));
                manager.initialize();
                try {
                    Qeryrdf queryrdf = new Qeryrdf();
                    queryrdf.executeQueries(manager);
                } finally {
                        manager.shutDown();
                }
        }

        private void executeQueries(RepositoryManager manager)
                        throws Exception {


            SailImplConfig backendConfig = new MemoryStoreConfig();
            RepositoryImplConfig repositoryTypeSpec = new SailRepositoryConfig(backendConfig);

            String repositoryId = REPO_ID;
            RepositoryConfig repConfig = new RepositoryConfig(repositoryId, repositoryTypeSpec);
            manager.addRepositoryConfig(repConfig);

            Repository repo = manager.getRepository(repositoryId);
                repo.initialize();
                RepositoryConnection con = repo.getConnection();

                RDFRepository repository = new RDFRepository();
                String repoDir = "C:\\RDF triples\\univData1" ;
                repository.initializeRepository(repoDir );

                System.out.println("Executing the query");
                executeQuery(q1, con);
                con.close();
                repo.shutDown();
        }

        private void executeQuery(String query, RepositoryConnection con) {
            getConnection();
                try {
                        TupleQueryResult result = con.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate();
                        int resultCount = 0;
                        long time = System.currentTimeMillis();
                        while (result.hasNext()) {
                                result.next();
                                resultCount++;
                        }
                        time = System.currentTimeMillis() - time;
                        System.out.printf("Result count: %d in %fs.\n", resultCount, time / 1000.0);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        public void getConnection() {
            try {
                Class.forName("org.postgresql.Driver");
                connection = DriverManager.getConnection(
                        "jdbc:postgresql://localhost:5432/myDB01", "postgres",
                        "aabbcc");
            } catch (Exception e) {
                e.printStackTrace();
                System.err.println(e.getClass().getName() + ": " + e.getMessage());
                System.exit(0);
            }
            System.out.println("The database opened successfully");
        }
}



我得到了以下结果:

16:46:44.546 [main] DEBUG org.openrdf.sail.memory.MemoryStore - Initializing MemoryStore...
16:46:44.578 [main] DEBUG org.openrdf.sail.memory.MemoryStore - Reading data from C:\RDF triples\univData1\repositories\SYSTEM\memorystore.data...
16:46:44.671 [main] DEBUG org.openrdf.sail.memory.MemoryStore - Data file read successfully
16:46:44.671 [main] DEBUG org.openrdf.sail.memory.MemoryStore - MemoryStore initialized
16:46:44.765 [main] DEBUG org.openrdf.sail.memory.MemoryStore - syncing data to file...
16:46:44.796 [main] DEBUG org.openrdf.sail.memory.MemoryStore - Data synced to file
16:46:44.796 [main] DEBUG o.o.r.manager.LocalRepositoryManager - React to commit on SystemRepository for contexts [_:node18j9mufr0x1]
16:46:44.796 [main] DEBUG o.o.r.manager.LocalRepositoryManager - Processing modified context _:node18j9mufr0x1.
16:46:44.796 [main] DEBUG o.o.r.manager.LocalRepositoryManager - Is _:node18j9mufr0x1 a repository config context?
16:46:44.796 [main] DEBUG o.o.r.manager.LocalRepositoryManager - Reacting to modified repository config for C:\RDF triples\univData1\repositories\SYSTEM\memorystore.data
16:46:44.796 [main] DEBUG o.o.r.manager.LocalRepositoryManager - Modified repository C:\RDF triples\univData1\repositories\SYSTEM\memorystore.data has not been initialized, skipping...
16:46:44.812 [main] DEBUG o.o.r.config.RepositoryRegistry - Registered service class org.openrdf.repository.contextaware.config.ContextAwareFactory
16:46:44.812 [main] DEBUG o.o.r.config.RepositoryRegistry - Registered service class org.openrdf.repository.dataset.config.DatasetRepositoryFactory
16:46:44.843 [main] DEBUG o.o.r.config.RepositoryRegistry - Registered service class org.openrdf.repository.http.config.HTTPRepositoryFactory
16:46:44.843 [main] DEBUG o.o.r.config.RepositoryRegistry - Registered service class org.openrdf.repository.sail.config.SailRepositoryFactory
16:46:44.843 [main] DEBUG o.o.r.config.RepositoryRegistry - Registered service class org.openrdf.repository.sail.config.ProxyRepositoryFactory
16:46:44.843 [main] DEBUG o.o.r.config.RepositoryRegistry - Registered service class org.openrdf.repository.sparql.config.SPARQLRepositoryFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.federation.config.FederationFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.inferencer.fc.config.ForwardChainingRDFSInferencerFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.inferencer.fc.config.DirectTypeHierarchyInferencerFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.inferencer.fc.config.CustomGraphQueryInferencerFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.memory.config.MemoryStoreFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.nativerdf.config.NativeStoreFactory
16:46:44.859 [main] DEBUG org.openrdf.sail.config.SailRegistry - Registered service class org.openrdf.sail.rdbms.config.RdbmsStoreFactory
16:46:44.875 [main] DEBUG org.openrdf.sail.memory.MemoryStore - Initializing MemoryStore...
16:46:44.875 [main] DEBUG org.openrdf.sail.memory.MemoryStore - MemoryStore initialized
16:46:44.876 [main] DEBUG o.openrdf.sail.nativerdf.NativeStore - Initializing NativeStore...
16:46:44.876 [main] DEBUG o.openrdf.sail.nativerdf.NativeStore - Data dir is C:\RDF triples\univData1
16:46:44.970 [main] DEBUG o.openrdf.sail.nativerdf.NativeStore - NativeStore initialized
Executing the query
The database opened successfully
16:46:45.735 [main] DEBUG o.o.query.parser.QueryParserRegistry - Registered service class org.openrdf.query.parser.serql.SeRQLParserFactory
16:46:45.751 [main] DEBUG o.o.query.parser.QueryParserRegistry - Registered service class org.openrdf.query.parser.sparql.SPARQLParserFactory
Result count: 0 in 0.000000s.



我的问题是:
1. 我多次更改 SPARQL 查询但仍然检索 0 行。
2. 那么,OpenRDF Sesame 是否连接到 PostgreSQL、MySQL 等后端数据库?
3. 如果是这样,OpenRDF Sesame 是否将 SPARQL 查询转换为 SQL,然后从后端数据库中获取结果?

提前致谢。

4

1 回答 1

3

首先,按顺序回答您的具体问题:

  1. 如果查询没有给出结果,这意味着您正在执行它的存储库是空的,或者您尝试执行的查询与该存储库中的数据不匹配。由于您设置和初始化存储库的方式看起来完全错误(请参阅下面的注释),它可能是空的。

  2. 一般来说,是的,Sesame可以连接到 PostgreSQL 或 MySQL 数据库进行存储和查询。但是,在您的代码中,这并没有完成,因为您没有使用 SesameRDBMSStore作为 SAIL 存储后端,而是使用 a MemoryStore(顾名思义,它是一个内存数据库)。

  3. 如果您使用的Sesame PostgreSQL/MySQL 存储,那么是的,它将 SPARQL 查询转换为 SQL 查询。但你没有使用它。此外,现在已弃用 Sesame PostgreSQL/MySQL 支持 - 建议不要使用它,而是使用 NativeStore 或 MemoryStore 或许多可用的第三方 Sesame 存储实现中的任何一种。

更一般地说,查看您的代码,不清楚您要完成什么,而且我无法相信您的代码实际上可以编译,更不用说运行了。

RDFRepository在某处使用了一个类,这在芝麻 2 中不存在,以及一个initializeRepository您提供目录的方法,该目录也不存在。它看起来有点像芝麻 1 中的工作方式,但那个版本的芝麻已经停止使用至少 6 年了。

然后,您有一个方法getConnection可以建立与 PostgreSQL 数据库的连接,但该方法没有完成任何事情——它只是创建了一个Connection对象,然后什么也没做Connection

我建议您回到基础并仔细阅读 Sesame 文档,尤其是教程,以及使用 Sesame 编程的章节,其中解释了如何创建和管理存储库以及如何使用它们。

于 2014-03-21T00:52:58.650 回答