Я пишу некоторый код python для динамического построения запроса SPARQL произвольной длины.
У меня есть подзапрос, который выглядит следующим образом:
?topObj a up:Topological_Domain_Annotation;
rdfs:comment '{}';
up:range ?range.
?proteins a up:Protein .
?proteins up:annotation ?otherTop .
?otherTop a up:Topological_Domain_Annotation;
rdfs:comment '{}';
up:range ?otherRange.""",
Где я go в и .format () {} в зависимости от заданного пользователем ввода. Мне нужен способ собрать несколько таких подзапросов, которые потенциально могут соответствовать другим объектам, ie. линия rdfs:comment '{}';
. Но, конечно, имена переменных, которые я использую для перехода к желаемому объекту, связаны в первом подзапросе.
Было бы наилучшим решением:
- Генерация случайных переменных для хранения пройденных узлов для каждого мини-запроса
- Использовать какой-нибудь трюк пути свойства / пустой узел, о котором я не знаю?
РЕДАКТИРОВАТЬ:
Вот пример запроса генерируется из вышеупомянутого шаблона, объединенного с использованием подхода случайных величин.
SELECT DISTINCT ?proteins
WHERE {
<http://purl.uniprot.org/uniprot/P04439> up:annotation ?1WGQM.
?1WGQM a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range ?VLIT1 .
<http://purl.uniprot.org/uniprot/P01911> up:annotation ?FIICT.
?FIICT a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range ?W89B2 .
<http://purl.uniprot.org/uniprot/P10321> up:annotation ?WU6G3.
?WU6G3 a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range ?ZSIQ3 .
?proteins a up:Protein .
?proteins up:annotation ?otherTop .
?otherTop a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range ?OTHERRANGE .
}
LIMIT 10