SPARQL 三元组中作为主题的文字
Literals as subject in SPARQL triples
就我从 SPARQL 的语法中读到的 https://www.w3.org/TR/sparql11-query/#sparqlGrammar 允许在三元组中使用文字作为主语:
[75] TriplesSameSubject ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList
[106] VarOrTerm ::= Var | GraphTerm
[109] GraphTerm ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL
所以有可能有一个三元组,例如:
(3, rdfs:label, 'three')
我可以在 Python 的 rdflib 中处理此类三元组,但是当我尝试在 Virtuoso 版本 06.01.3127 中使用 SERVICE 进行联合 SPARQL 查询时,Virtuoso 抱怨道。这是我在 http://localhost:8890/sparql
的本地安装中执行的错误消息
Virtuoso 37000 Error SP031: SPARQL compiler: No one quad map pattern is suitable for GRAPH _:_::default_8_4 { 3 <http://www.w3.org/2000/01/rdf-schema#label> ?s } triple at line 8
SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define sql:signal-void-variables 1 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?s WHERE {
SERVICE <http://127.0.0.1:5000/sparql> {
SELECT ?s WHERE {
3 rdfs:label ?s .
}
}
}
这是 Virtuoso 问题还是更普遍的 SPARQL/RDF 问题,- 还是我的编程错误?
很少(我相信当前计数为零)企业级三重或四重商店处理 "Generalized RDF",这是允许在主题位置使用文字的 RDF。到目前为止,这通常被认为不能很好地扩展,尽管它在小规模上可能有用或有趣,例如 CWM
,TimBL 的基于 Python 的封闭世界机器。
Virtuoso 是企业级 DBMS,处理表格 SQL 数据、图形 RDF 数据等。目前,以及计划中的未来,Virtuoso 将不会处理广义 RDF。
综上所述,应该注意的是,您是 运行 相当老的 Virtuoso,大约从 2012 年 7 月开始。无论您是 运行 Commercial or Open Source,更新到出于各种性能和功能原因,强烈建议使用更新版本(截至 2016 年 4 月至少为 7.2.4.2)。
ObDisclaimer:OpenLink Software produces Virtuoso,并雇用了我。
即使在 SPARQL 1.0 中,SPARQL 始终将文字作为语法中的主题 - 来自一个位置的变量可以在另一个位置使用,因此通过变量匹配文字作为主题无论如何都会发生。
SPARQL 1.0:
https://www.w3.org/TR/rdf-sparql-query/#sparqlTriplePatterns
SPARQL 1.1:
https://www.w3.org/TR/sparql11-query/#sparqlTriplePatterns
当然,它们不会匹配存储的 RDF。
CONSTRUCT 的规则说 "reject such triples"。
就我从 SPARQL 的语法中读到的 https://www.w3.org/TR/sparql11-query/#sparqlGrammar 允许在三元组中使用文字作为主语:
[75] TriplesSameSubject ::= VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList
[106] VarOrTerm ::= Var | GraphTerm
[109] GraphTerm ::= iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | NIL
所以有可能有一个三元组,例如:
(3, rdfs:label, 'three')
我可以在 Python 的 rdflib 中处理此类三元组,但是当我尝试在 Virtuoso 版本 06.01.3127 中使用 SERVICE 进行联合 SPARQL 查询时,Virtuoso 抱怨道。这是我在 http://localhost:8890/sparql
的本地安装中执行的错误消息Virtuoso 37000 Error SP031: SPARQL compiler: No one quad map pattern is suitable for GRAPH _:_::default_8_4 { 3 <http://www.w3.org/2000/01/rdf-schema#label> ?s } triple at line 8
SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define sql:signal-void-variables 1 PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?s WHERE {
SERVICE <http://127.0.0.1:5000/sparql> {
SELECT ?s WHERE {
3 rdfs:label ?s .
}
}
}
这是 Virtuoso 问题还是更普遍的 SPARQL/RDF 问题,- 还是我的编程错误?
很少(我相信当前计数为零)企业级三重或四重商店处理 "Generalized RDF",这是允许在主题位置使用文字的 RDF。到目前为止,这通常被认为不能很好地扩展,尽管它在小规模上可能有用或有趣,例如 CWM
,TimBL 的基于 Python 的封闭世界机器。
Virtuoso 是企业级 DBMS,处理表格 SQL 数据、图形 RDF 数据等。目前,以及计划中的未来,Virtuoso 将不会处理广义 RDF。
综上所述,应该注意的是,您是 运行 相当老的 Virtuoso,大约从 2012 年 7 月开始。无论您是 运行 Commercial or Open Source,更新到出于各种性能和功能原因,强烈建议使用更新版本(截至 2016 年 4 月至少为 7.2.4.2)。
ObDisclaimer:OpenLink Software produces Virtuoso,并雇用了我。
即使在 SPARQL 1.0 中,SPARQL 始终将文字作为语法中的主题 - 来自一个位置的变量可以在另一个位置使用,因此通过变量匹配文字作为主题无论如何都会发生。
SPARQL 1.0:
https://www.w3.org/TR/rdf-sparql-query/#sparqlTriplePatterns
SPARQL 1.1:
https://www.w3.org/TR/sparql11-query/#sparqlTriplePatterns
当然,它们不会匹配存储的 RDF。
CONSTRUCT 的规则说 "reject such triples"。