2011-04-17 55 views
3

我试图让在耶拿http://dbpedia.org/page/Black_Sabbath如何通过使用jena提供属性名称来获取dbpedia中属性的名称空间?

物业类型在以下链接DBpedia中使用SPARQL的价值,但我不知道如何从DBpedia中(DBpedia的猫头鹰 .genre在属性命名空间我的例子)我不想硬编码它。任何一个可以帮助我PLZ ...

非常感谢

+1

为什么你不想硬编码?属性genere有一个固定的URI,它不会改变,为什么不把这个URI硬编码到你的查询中? – RobV 2011-04-17 17:23:34

+0

bcz有时我可能需要采取一些其他的值,如经度,纬度,页面有不同的URI,如地理和FOAF ...如果我开始硬编码,那么我必须保存所有的网址...这就是为什么我没有想要硬编码它... – 2011-04-17 17:50:19

回答

5

您最初的问题让我觉得你想要的东西像耶拿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

+0

感谢您的这些信息...它对我很有帮助.... – 2011-04-19 10:07:40

相关问题