Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP在SPARQL查询中包含变量_Php_Sparql - Fatal编程技术网

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

如何使用PHP在SPARQL查询中包含变量,php,sparql,Php,Sparql,我正在创建一个查询表单,让用户从表单中输入关键字。然后查询表单将进入下一页,我将在查询表单中创建的变量带入下一页。新页面的摘录代码如下: //received variable $abc1=$_POST['querykeyword']; $querystring = ' Prefix try <http://www.semanticweb.org/ontologies/2009/5/test.owl#> SELECT ?name ?age WHERE { ?url tr

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

//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 }'; 
//收到的变量
$abc1=$_POST['querykeyword'];
$querystring=
前缀尝试
选择?姓名?年龄
哪里
{?url try:具有名称${“abc1”}?名称
?url try:has age?age}';

然而,它没有给出结果。有人能帮忙吗?

您的查询中似乎有许多语法问题。
try:hasname
属性可能有一个文本域。所以你应该把你的文字用引号引起来。图形模式之间还缺少一个
,还有一些其他的怪癖,其中一些怪癖与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"}\")
  }';
$querystring='1〕
前缀try:
选择?姓名?年龄{
?url try:具有名称?名称。
?url尝试:有年龄?年龄。
过滤器(?名称=\“${”abc1“}\”)
}';

PREFIX
语句声明
try
命名空间前缀。然后是
SELECT
子句,它选择两个变量
name
age
。请注意,
其中
是可选的。这两个图形模式选择匹配这两个模式的三元组,而
过滤器
仅保留满足
名称
匹配条件的三元组@tialaramex的解决方案可能也适用于您,因为您已经知道该名称。我将此编辑为稍微不同的解决方案,以防将来您想使用更复杂的筛选操作。

问题中的查询和laalto的答案都不是有效的SPARQL,但laalto正在接近

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

尝试:

$querystring=”
前缀try:
选择年龄
在哪里{
?url try:名称为\“${abc1}\”。
?url尝试:有年龄?年龄
}";

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

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

一些菲涅尔引擎实现,尤其是在使用PHP时,请参见Horus:

  • 明喻的菲涅耳引擎;Java,在Maven存储库中提供

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

  • 柏林大学的荷鲁斯;PHP

  • 奥林学院(未知)


@tialaramex:感谢您的关注,现在修改了我的答案。您是否尝试手动执行所需的查询以检查它是否确实有效?我手动尝试了该查询,结果有效。tialaramex:我怎样才能把文件寄给你?很抱歉打扰您。您可以使用pastebin.com并将结果URL写入此处的注释中。由于手动查询是有效的,我想问题一定出在PHP上,但我不知道如何解决。因此,可能会包含一段不起作用的PHP代码,以及起作用的手动查询文本。使用“复制粘贴”可避免转录错误。@前缀是一项功能。这是SPARQL。这只是SPARQL中的前缀,而不是@PREFIX。@tialaramex:再次感谢。固定的。下次将解析我的查询:)我尝试了这种方法,但结果在浏览器中显示为“不匹配”。但我知道它应该在HTML表中给出我的姓名和年龄。我认为要获得更多有用的答案,您需要向我们提供您正在查询的RDF示例,以及您用于测试的$abc1的值。您可能还想指定(如果您知道的话)您正在使用哪个RDF存储引擎和/或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
  }";