0

使用 EasyRdf,我想获取查询结果。我在codeigniter中使用了以下代码:

$this->load->library('rdf');
EasyRdf_Namespace::set('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns');
EasyRdf_Namespace::set('srt', 'http://persuratan-semweb.dev/ontologies/surat.owl');
$sparql = new EasyRdf_Sparql_Client('http://localhost:3030/surat_single/sparql');

$query = "SELECT * WHERE { "
            . "?surat rdf:type srt:Surat . "
            . "?surat srt:sifat_surat ?sifat_surat . "
            . "?surat srt:nomor_surat ?nomor_surat . }";
$result = $sparql->query($query);

echo "jumlah data: " . $result->numRows() . "<br>";
echo "<br>";

foreach ($result as $row) {
    echo $row->sifat_surat . " " .$row->sifat_surat . " " . $row->nomor_surat ."<br>";
}

print_r($result);

我得到的输出是:

jumlah data: 0

EasyRdf_Sparql_Result Object ( 
    [type:EasyRdf_Sparql_Result:private] => bindings
    [boolean:EasyRdf_Sparql_Result:private] =>
    [ordered:EasyRdf_Sparql_Result:private] =>
    [distinct:EasyRdf_Sparql_Result:private] =>
    [fields:EasyRdf_Sparql_Result:private] => Array ( 
        [0] => surat
        [1] => sifat_surat 
        [2] => nomor_surat 
    ) 
    [storage:ArrayIterator:private] => Array ( )
)

我也尝试了这里给出的 Joshua 的解决方案,但得到了类似的输出。我还在 Fuseki 端点(我正在使用 Fuseki Triplestore)中尝试我的查询并得到了这个结果。我完全是语义网的初学者。

4

1 回答 1

1

我不知道这是否是答案,但这些命名空间对我来说看起来不正确:

EasyRdf_Namespace::set('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns');
EasyRdf_Namespace::set('srt', 'http://persuratan-semweb.dev/ontologies/surat.owl');

rdf命名空间的末尾应该有一个 #,您的 OWL 文件也应该有一个:

EasyRdf_Namespace::set('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
EasyRdf_Namespace::set('srt', 'http://persuratan-semweb.dev/ontologies/surat.owl#');

但话虽如此,您没有理由不能先尝试更简单的查询。为什么不直接跑

SELECT ?s ?p ?o { ?s ?p ?o }

以确保您可以获得结果以及数据是什么。

于 2016-09-08T15:17:30.443 回答