我正在创建一个查询表单,让用户从表单中输入关键字。然后查询表单将带到下一页,我将查询表单中创建的变量带到下一页。新页面的摘录代码如下:
//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 }';
然而,它没有给出输出。有人可以帮忙吗?
答案 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
子句,它选择两个变量name
和age
。请注意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(未知)