0

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

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

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

4

3 回答 3

1

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

Ismet 似乎想用固定值替换 ?name 变量。如果是这样, ?name 变量必须从 SELECT 和查询正文中删除,否则它不应该解析并且肯定不会返回所需的结果。使用的 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 查询。

于 2009-07-08T09:38:57.177 回答
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子句。请注意,这是可选的。这两个图形模式选择匹配这两种模式的三元组,并且只保留那些满足匹配条件的三元组。@tialaramex 的解决方案可能也适用于您,因为您已经知道该名称。我将其编辑为稍微不同的解决方案,以防您将来想使用更复杂的过滤操作。nameageWHEREFILTERname

于 2009-07-07T13:08:43.217 回答
0

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

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

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

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

  • 柏林自由大学的荷鲁斯;PHP

  • 奥林学院(未知)

于 2010-03-09T22:42:11.560 回答