用于PHP的RDF api不返回带有继承的类


RDF api for PHP not returning classes with inheritance UPDATE: Trying with pOWL

我正在使用RAP (PHP的RDF API),希望能够使用SPARQL引擎来查询我的RDF。在本例中,我使用W3C葡萄酒本体。下面是我的代码:

$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库的运气,已经转向使用pol。另一个支持OWL操作的PHP库。然而,它不是很好地记录和有一些麻烦。尝试像这样列出子类:

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

但是不好。有人知道pOWL的好教程吗?任何帮助都太好了。谢谢。

使用SPARQL属性路径可以轻松解决您的问题。

查询应该是这样的:

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

不幸的是,你的实现不支持这些

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