关于RDQL 自己的一些解释

研究了研究 发现 RAP 有一个跟 SQL 语法很相似的东西

在SQL: $query="SELECT siren FROM table WHERE 1"

在RDQL 中

$query = 'SELECT ?siren
WHERE (?x ,<v:root>,?siren)
USING v FOR <http://www.baidu.com/#>
';

我先把我 rdf文件贴出来 大家可以参考参考

<?xml version='1.0' encoding='UTF-8'?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ns1="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:ns3="http://www.baidu.com/#" xmlns:ns4="http://www.google.com/#" xmlns:ns2="http://sampleVocabulary.org/1.3/People#"> <rdf:Description rdf:about="http://example.com/employees/BillParker/"> <ns2:age>测试ns22222222222输出来的东西</ns2:age> <ns2:Siren>测试ns222222输出来的东西</ns2:Siren> <ns3:root>测试ns3333333输出来的东西</ns3:root> <ns4:google>测试ns4444输出来的东西</ns4:google> </rdf:Description> </rdf:RDF>

下面是 自己的 index.php 文件

<?php /** * @author [斯人] * @date 2010/6/1/10:16 * @ * */ define("RDFAPI_INCLUDE_DIR", "E:/siren/rdfapi-php/api/"); include (RDFAPI_INCLUDE_DIR . "RDFAPI.php"); // Filename of an RDF document $base = "employees.rdf"; // Create a new MemModel $model = ModelFactory::getDefaultModel(); // Load and parse document $model->load($base); // query string //$rdql_query = ' //SELECT ?siren,?age //WHERE (?x, <v:Siren>, ?siren), // (?a,<v:age>,?age) //USING vcard FOR <http://www.w3.org/2001/vcard-rdf/3.0#> // v FOR <http://sampleVocabulary.org/1.3/People#>'; $rdql_query = 'SELECT ?siren WHERE (?x ,<v:root>,?siren) USING v FOR <http://www.baidu.com/#> '; //query model, get RDQLResultIterator $rdqlIter = $model->rdqlQueryasIterator($rdql_query); //get different Result labels as array $result_labels = $rdqlIter->getResultLabels(); echo "<BR><b>Result Label Names:</b> "; for ($i = 0; $i < count($result_labels); $i++) echo $result_labels[$i] . " "; echo "<BR><B>Number of results:</B> " . $rdqlIter->countResults(); //serialize result to string; echo "<BR><B>Result objects, serialized to string:</B><BR>"; while ($rdqlIter->hasNext()) { $curren_result = $rdqlIter->next(); echo "<BR>"; for ($j = 0; $j < count($result_labels); $j++) echo $curren_result[$result_labels[$j]]->toString() . "<BR> "; } ; ?>

在上面的语句中 执行的结果就是

我们把 $rdql_query改一下...

$rdql_query = 'SELECT ?siren WHERE (?x ,<v:age>,?siren) USING v FOR <http://sampleVocabulary.org/1.3/People#>';

执行结果是

Literal("测试ns2输出来的东西")

我们在改一下..

$rdql_query = 'SELECT ?siren WHERE (?x ,<v:google>,?siren) USING v FOR <http://www.google.com/#>';

执行结果为

Literal("测试ns4444输出来的东西");

有没有发现上面规律???

下面说说我个人的理解..

以 $rdql_query = 'SELECT ?siren WHERE (?x ,<v:google>,?siren) USING v FOR <http://www.google.com/#>';

为例select 不用说 ..跟SQL 同意

后面的 ?siren 应该就是一个变量 它必须要跟 where 语句里面的 第三个参数对应..多个 可以用 逗号","隔开

例如

$rdql_query = 'SELECT ?siren,?google WHERE (?x ,<v:google>,?siren) ,WHERE (?x ,<v:google>,?google) USING v FOR <http://www.google.com/#>';

where括号里面的 参数 就是 主语,谓语,宾语,,第一个是主语..随便设置但前面必须要加 "?"问号,

中间的 <v:google> 就是 rdf中的命名空间..这里为什么是v 而不是 <ns4:google> 呢?

这是因为后面的 USING v FOR <http://www.google.com/#> 语句的关系..

在 rd文件里面 是这样的语句

xmlns:ns4="http://www.google.com/#"

USING v FOR <http://www.google.com/#> 语句就是 用v 代替 值为 http://www.google.com/# 的 一个变量吧..

跟 SQL 语句中 select user as v 类似..

目的应该就是把一个长的 名字空间 用一个值代替...

然后 RAP 就会根据 这个语法 去从rdf中取出数据来...

有的时候可以 加上 from 就是

$rdql_query = 'SELECT ?siren from <exaple.rdf> WHERE (?x ,<v:google>,?siren) USING v FOR <http://www.google.com/#>';

它用来告诉 RAP 源 是哪个文件...因为 程序里面已经定义了文件 所以这里就不用写了

自己理解是这样 高手莫见笑...欢迎大家交流..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值