2

我正在使用RAP(用于 PHP 的 RDF API)并希望能够使用 SPARQL 引擎来查询我的 RDF。在这种情况下,我使用的是W3C wine 本体。这是我的代码:

$base="wine.rdf";

$model = ModelFactory::getDefaultModel();
$model->load(RDFAPI_INCLUDE_DIR . 'wine.rdf');
$querystring = "SELECT ?wine  WHERE { ?wine rdfs:subClassOf <http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Wine> } ";
$result = $model->sparqlQuery($querystring, 'html');

这应该返回该类的所有子类Wine并将它们打印到 HTML 表中(以便于阅读)。它返回了一些结果,但它没有通过继承返回所有具有此属性的类,并且我没有收到任何错误。我怎样才能得到所有的子类Wine

更新:

使用 RAP 库没有运气,转而使用pOWL。另一个对操作PHP有更多支持的库。OWL但是,它没有很好的文档记录并且有一些麻烦。试图列出这样的子类:

$base="wine.owl";
$Model = ModelFactory::getDefaultModel();
$Model->load(RDFAPI_INCLUDE_DIR . 'wine.owl');
$subClass = $Model->writeAsHtmlTable();
$subClass =$Model->listSubClasses;

但不好。有人知道任何好的教程pOWL吗?任何帮助都会很棒。谢谢。

4

1 回答 1

0

您的情况很容易通过 SPARQL Property Paths解决。

查询将如下所示:

SELECT ?wine  WHERE {
    ?wine (rdfs:subClassOf)+ <http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#Wine>
}

不幸的是,您的实现不支持这些。

我可以建议一个真正的三重存储而不是文件存储吗?例如, Virtuoso/7可以很好地处理这个问题。

于 2013-07-11T11:42:57.793 回答