关于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 自己的一些解释_第1张图片

我们把 $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  源 是哪个文件...因为 程序里面已经定义了文件 所以这里就不用写了

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

你可能感兴趣的:(关于RDQL 自己的一些解释)