如何使用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
- 奥林学院(未知)
$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
}";