Уменьшить длину строки запроса sparql с помощью fuseki
Когда я запускаю сервер Fuseki, я использую эту команду:
fuseki-server --config=config-orphadata.ttl
В этом файле ttl я могу написать некоторые префиксные правила:
@prefix orphanet: <http://www.orpha.net/ORDO/Orphanet_#> .
@prefix ORDO: <http://www.orpha.net/ORDO/> .
В запросах SPARQL я должен написать все значения префикса, например:
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX oboInOwl: <http://www.geneontology.org/formats/oboInOwl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX Orphanet_: <http://www.orpha.net/ORDO/Orphanet_#>
PREFIX ORDO: <http://www.orpha.net/ORDO/>
select ?s ?p ?o ?m ?v ?e WHERE {
?s ?p ?o.
optional {?o ?m ?v.
?v rdfs:label ?e}.
filter (?s = ORDO:Orphanet_2004)
}
ORDER BY ?o
Если я не пишу префиксы, запрос не работает... Кажется, что префикс правил, определенный в файле конфигурации, может быть недоступен в запросах.
Все элементы, записанные в запросе SPARQL, идут по адресу GET information.
Можно ли уменьшить длину строки этого запроса, поместив префикс в конфигурационные файлы, чтобы использовать его после запуска моего сервера fuseki?
1 ответ
Насколько я знаю, нет поддержки, чтобы сделать это напрямую.
Взлом универсального решения
Мне еще предстоит найти место, где я могу изменить префиксы, используемые ARQ при анализе запросов, но это не означает, что он не существует. Мое предложение, если вы хотите продолжить это, будет копаться в GrepCode до тех пор, пока вы не найдете место, где вы можете заменить фабрику / распознаватель по умолчанию, а затем написать код, который используется для этого, в static
инициализатор некоторого вашего собственного класса. Это может быть эпически грязным, так что это вряд ли стоит того, чтобы вы это делали.
Начните Fuseki с вашего нового класса (org.ididhax.ChangePrefixes
) на пути к классам где-то, и место [] ja:loadClass "org.ididhax.ChangePrefixes"
в вашем файле ассемблера Fuseki. Это заставит Fuseki загрузить ваш класс, который изменит доступные префиксы.
Веб Обход / Взлом
Если вы используете Fuseki из веб-интерфейса, обновите шаблоны, которые Fuseki использует для веб-форм, чтобы прикрепить некоторый набор префиксов по умолчанию к любому отправляемому вами запросу. Тогда SPARQL, который анализирует Fuseki, будет действительным.
Обходной путь Java / Hack #1
Это обходной путь, который я иногда использую. В любом случае, я создаю 99% своих запросов программно. Что вы делаете, это построить PrefixMappingImpl
и загрузите его с вашими любимыми префиксами. Создайте некоторый код, который возьмет желаемую строку SPARQL и добавит к ней префиксы в нужном формате. Остальная часть вашего кода не имеет значения.
/* 'MyQueryFactory' hides the appending of your prefixes and the call to
* the actual Jena 'QueryFactory'
*/
final String mySparqlString = "SELECT * WHERE { ?bob rdf:type vocab:Cat }";
final Query query = MyQueryFactory.create(mySparqlString);
Обходной путь Java / Hack #2
Это часто мое личное предпочтение. Если у вас есть словари Jena Schemagen Java Class для ваших терминов, то не используйте префиксы вообще. Статически подставляйте в поля из этих словарей и создавайте SPARQL, используя точные термины. Вы никогда не увидите лично один URI, и это может быть удобно, если вы потенциально меняете свой словарный запас (может дать вам удобные ошибки компиляции, когда вы используете термин, которого больше не существует). Вот пример:
final Query query = QueryFactory.create(
"SELECT * WHERE {\n"+
" ?bob <"+RDF.type+"> <"+MyVocab.Cat+"> .\n"+
"}");