繁体   English   中英

如何使用PHP在SPARQL查询中包含变量

[英]How to include variable in SPARQL query using PHP

我正在创建一个查询表单,并让用户从表单中输入关键字。 然后,查询表单将带到下一页,我将在查询表单中创建的变量携带到下一页。 新页面的摘录代码如下:

//received variable
$abc1=$_POST['querykeyword'];

$querystring = '
Prefix try <http://www.semanticweb.org/ontologies/2009/5/test.owl#>
SELECT ?name ?age
WHERE
  {     ?url try:has-name ${"abc1"} ?name 
        ?url try:has-age ?age }'; 

但是,它没有给出输出。 有人可以帮忙吗?

问题中的查询和laalto的答案都不是有效的SPARQL,但是laalto越来越近了。

似乎Ismet想要用固定值替换?name变量。 如果是这样,必须从SELECT和查询主体中删除?name变量,否则它不应进行分析,并且肯定不会返回所需的结果。 所使用的PHP的T_VARIABLE转义也有误,PREFIX缺少SPARQL语法规则所需的冒号。

尝试:

  $querystring = "
  PREFIX try: <http://www.semanticweb.org/ontologies/2009/5/test.owl#>
  SELECT ?age
  WHERE {
    ?url try:has-name \"${abc1}\" .
    ?url try:has-age ?age
  }";

这至少应发出语法正确的SPARQL查询,该查询包含您的变量。

您的查询中似乎存在许多语法问题。 try:has-name属性可能具有文字域。 因此,您应该在文字上加上引号。 还有一个. 图形模式之间的缺失以及其他一些怪癖,其中一些与非代码文本的stackoverflow格式有关(已通过重新格式化问题来解决)。 但是,请尝试以下操作:

$querystring = '
  PREFIX try: <http://www.semanticweb.org/ontologies/2009/5/test.owl#>
  SELECT ?name ?age {
    ?url try:has-name ?name .
    ?url try:has-age ?age .
    FILTER(?name = \"${"abc1"}\")
  }';

PREFIX语句声明try名称空间前缀。 然后是SELECT子句,它选择两个变量nameage 请注意, WHERE是可选的。 这两个图形模式选择与两种模式都匹配的三元组,而FILTER仅保留那些满足name匹配条件的三元组。 @tialaramex的解决方案也可能对您有用,因为您已经知道名字了。 我正在将此编辑为稍微不同的解决方案,以防将来您想使用更复杂的过滤操作。

一个老问题了,但对于FWIW:我建议使用Fresnel,起初需要做更多的工作,但是您将具有更大的灵活性,并且他们已经解决了一些痛点。 菲涅尔是RDF演示词汇,用于描述如何显示RDF。 您可以使用SPARQL CONSTRUCT查询来收集数据,然后将其传递给Fresnel引擎以生成HTML,并在两者之间使用缓存层以提高性能。

某些Fresnel引擎实现,尤其是在PHP中工作时,请参阅Horus:

  • SIMILE的菲涅耳引擎; Java,在Maven存储库中可用

  • Emmanuel的IsaViz(部分;完全实现FSL); Java,可能会利用SIMILE引擎

  • 柏林自由大学 的PHP

  • OlinCollege(未知)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM