我正在使用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就可以很好地处理这个问题。