连接非特定 SPARQL 查询的最佳实践?
Best practice to concatenate non-specific SPARQL queries?
我正在编写一些 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.""",
我进入的位置和 .format() {} 取决于用户指定的输入。我想要一种方法来堆叠这些可能与其他对象匹配的多个子查询,即。 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
只需使用 BNodes 而不是为这些变量生成唯一的名称,例如沿着这些方向的东西:
SELECT DISTINCT ?proteins
WHERE {
<http://purl.uniprot.org/uniprot/P04439> up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
].
<http://purl.uniprot.org/uniprot/P01911> up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
] .
<http://purl.uniprot.org/uniprot/P10321> up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
].
?proteins a up:Protein .
?proteins up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
].
}
LIMIT 10
HTH
我正在编写一些 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.""",
我进入的位置和 .format() {} 取决于用户指定的输入。我想要一种方法来堆叠这些可能与其他对象匹配的多个子查询,即。 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
只需使用 BNodes 而不是为这些变量生成唯一的名称,例如沿着这些方向的东西:
SELECT DISTINCT ?proteins
WHERE {
<http://purl.uniprot.org/uniprot/P04439> up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
].
<http://purl.uniprot.org/uniprot/P01911> up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
] .
<http://purl.uniprot.org/uniprot/P10321> up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
].
?proteins a up:Protein .
?proteins up:annotation [
a up:Topological_Domain_Annotation;
rdfs:comment ?topology;
up:range []
].
}
LIMIT 10
HTH