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

时间:2009-07-07 12:58:27

标签: php sparql

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

//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 }'; 

然而,它没有给出输出。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

问题中的查询和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查询。

答案 1 :(得分:0)

您的查询中似乎存在许多语法问题。 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的解决方案可能对你有用,因为你已经知道了这个名字。我正在编辑这个稍微不同的解决方案,以防你以后想要使用更复杂的过滤操作。

答案 2 :(得分:0)

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

一些菲涅耳引擎的实现,特别是因为你在PHP中工作,所以请参阅Horus:

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

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

  • FreieUniversitätBerlin's Horus; PHP

  • OlinCollege(未知)