首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过openRDF Sesame访问后端DB

通过openRDF Sesame访问后端DB
EN

Stack Overflow用户
提问于 2014-03-20 21:47:28
回答 1查看 455关注 0票数 0

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

代码语言:javascript
复制
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");
        }
}

我得到了以下结果:

代码语言:javascript
复制
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芝麻是否连接到后端DB,如PostgreSQL、MySQL等?
  3. 如果是,OpenRDF Sesame是否将SPARQL查询转换为SQL,然后从后端DB中获得结果?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-21 00:52:58

首先,回答你的具体问题,以便:

  1. 如果查询没有给出结果,这意味着执行它的存储库是空的,或者您试图执行的查询与该存储库中的数据不匹配。因为它看起来像您设置和初始化存储库的方式是完全错误的(请参阅下面的备注),它可能是空的。
  2. 通常,是的,芝麻可以连接到PostgreSQL或MySQL数据库进行存储和查询。但是,在您的代码中,这是没有完成的,因为您没有使用芝麻RDBMSStore作为您的Sesame存储后端,而是使用一个MemoryStore (顾名思义,它是一个内存中的数据库)。
  3. 如果您使用的是Sesame PostgreSQL/MySQL存储,那么是的,它会将SPARQL查询转换为SQL查询。但你不能用它。此外,Sesame /MySQL支持现在已不再受欢迎--建议不要使用它,而是使用NativeStore或MemoryStore或许多可用的第三方芝麻存储实现中的任何一种。

更广泛地说,看你的代码,不清楚你想要完成什么,我不相信你的代码真的编译,更不用说运行了。

您在那里的某个地方使用了一个类RDFRepository,它在Sesame 2中不存在,并且使用一个方法initializeRepository,它给出一个目录,这个目录也不存在。它看上去有点像芝麻1号的运作方式,但那个版本的芝麻已经至少6年了。

然后有一个方法getConnection,它设置到PostgreSQL数据库的连接,但是该方法没有完成任何事情--它只是创建一个Connection对象,但是对这个Connection却没有做任何事情。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22545842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档