Конфигурация хранилища кунжута

Я использую sesame 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();

Любая помощь? Может быть, лучший подход?

1 ответ

Вы не можете изменить стратегию вывода хранилища Сезама по умолчанию во время выполнения, как это. После того, как вы создали хранилище с использованием определенной конфигурации, эта конфигурация фиксируется. Один и тот же магазин не может быть настроен как на вывод, так и на вывод.

И даже если бы вы могли изменить это, это не помогло бы вам. Я не уверен, чего именно вы пытаетесь достичь, но добавление данных в хранилище с выводом происходит медленнее, потому что это, ну, должно быть, делает вывод. Отключение логического вывода во время загрузки, но его включение во время запроса бессмысленно, так как все логические операции выполняются во время загрузки, поэтому в этом сценарии ничего не будет выведено.

У вас есть несколько вариантов: один вариант - работать с полностью не зависящим от него хранилищем и просто делать более умные запросы, чтобы получить то, что вам нужно - большинство выводов наследования RDFS можно заменить с помощью запросов.

Например, чтобы получить все подклассы класса A:

SELECT ?x
WHERE { ?x rdfs:subClassOf+ ex:A }

Все (унаследованные) экземпляры A:

SELECT ?i
WHERE { ?i a [ rdfs:subClassOf* ex:A ] }

И так далее.

Другой вариант - изучить один из сторонних бэкэндов Sesame, например OWLIM, который имеет гораздо более сложную поддержку вывода и лучшую производительность.

Другие вопросы по тегам