我使用的是芝麻http存储库,因为我有一个很大的模式,所以支持推理的存储库太慢了(特别是在添加三元组的时候)。因此,我使用一个简单的内存库(在工作台上设置它),并在运行时对其进行配置,以支持在我需要的页面中使用以下行进行推理。
ForwardChainingRDFSInferencerConfig inferMemStoreConfig = new ForwardChainingRDFSInferencerConfig(new MemoryStoreConfig(true));
SailRepositoryConfig repositoryTypeSpec = new SailRepositoryConfig(inferMemStoreConfig);
RepositoryConfig repConfig = new RepositoryConfig(repositoryID, repositoryTypeSpec);
RemoteRepositoryManager manager = new RemoteRepositoryManager(sesameServer);
manager.initialize();
Repository myRepository = manager.getRepository(repositoryID);
manager.addRepositoryConfig(repConfig);那么在我添加三元组的页面中,我如何禁用它呢?
这是我尝试过的:
MemoryStoreConfig memStoreConfig = new MemoryStoreConfig(true);
SailRepositoryConfig repositoryTypeSpec = new SailRepositoryConfig(memStoreConfig);
RepositoryConfig repConfig = new RepositoryConfig(repositoryID, repositoryTypeSpec);
RemoteRepositoryManager manager = new RemoteRepositoryManager(sesameServer);
manager.initialize();
Repository myRepository = manager.getRepository(repositoryID);
manager.addRepositoryConfig(repConfig);
myRepository.initialize();有什么帮助吗?也许是更好的方法?
发布于 2013-01-23 11:01:49
您不能在运行时更改默认Sesame存储库的推理策略,如下所示。一旦您使用特定的配置创建了存储库,该配置就会被修复。同一存储区不能同时配置为推理和非推理。
即使你能改变它,它也帮不了你。我不确定你到底想要达到什么目的,但是通过推理将数据添加到存储中会更慢,因为它必须进行推理。在加载期间禁用推理,但在查询期间启用它是没有意义的,因为所有的推理工作都是在加载期间完成的,因此在这种情况下不会进行任何推断。
您有几种选择:一种选择是使用完全非推理的存储库,只需执行更智能的查询来获得所需的内容-大多数RDFS继承推理可以通过使用查询来替代。
例如,要获取类A的所有子类
SELECT ?x
WHERE { ?x rdfs:subClassOf+ ex:A }A的所有(继承的)实例
SELECT ?i
WHERE { ?i a [ rdfs:subClassOf* ex:A ] }以此类推。
另一种选择是研究Sesame第三方后端之一,例如OWLIM,它具有更复杂的推理支持和更好的性能。
https://stackoverflow.com/questions/14466798
复制相似问题