如何通过使用jena提供属性名称来获取dbpedia中属性的命名空间?

时间:2011-04-17 15:54:34

标签: java sparql jena dbpedia

我正在尝试使用jena http://dbpedia.org/page/Black_Sabbath中的sparql获取以下dbpedia链接中的属性类型的值

但我不知道如何从dbpedia获取属性命名空间(在我的示例中 dbpedia-owl .genre)我不想硬编码。任何人都可以帮助我......

非常感谢

1 个答案:

答案 0 :(得分:5)

你的初始问题让我觉得你想要像Jena schemagen这样的东西,它会自动从本体中使用的标识符URI生成一系列Java常量。但是,DbPedia OWL schema相当大,我认为schemagen可能无法生成有用的结果(我没有尝试过)。如果是这样,您可以随时选择您感兴趣的资源和属性的子集,并在该子集上运行schemagen。

但是,您的澄清评论,其中您谈论使用其他属性,如纬度等,让我认为您提出了一个不同的问题:即,如何避免将特定属性硬编码到SPARQL查询中。这对您来说是否有问题完全取决于您尝试解决的问题以及代码的体系结构。程序完全可以维护许多SPARQL查询字符串,只需选择特定作业所需的字符串即可。这是一种常见的使用模式。

但是,有一些合法的用例,您希望获取一般查询字符串 - 例如select * where {?s ?p "foo"} - 并确保其中一个变量事先绑定到特定值。虽然可以通过字符串操作来实现这一点,但是有一种更优雅的方式。例如,要执行上述查询并将?p预绑定到属性dc:creator,您可以执行以下操作:

String q = "select * where {?s ?p \"foo\"}";
QuerySolutionMap qsm = new QuerySolutionMap();
qsm.bind( "p", DC.creator );
Query query = QueryFactory.create( q );
QueryExecution exec = QueryExecutionFactory.create( query, model, qsm );
ResultSet rs = exec.execSelect();

另请参阅this blog posting了解更多信息,或另请参阅JavaDoc