我正在尝试使用 jena http://dbpedia.org/page/Black_Sabbath中的 sparql 在以下 dbpedia 链接中获取属性类型的值
但我不知道如何从 dbpedia 获取属性名称空间(在我的示例中为dbpedia-owl .genre),我不想对其进行硬编码。任何人都可以帮助我lz...
非常感谢
我正在尝试使用 jena http://dbpedia.org/page/Black_Sabbath中的 sparql 在以下 dbpedia 链接中获取属性类型的值
但我不知道如何从 dbpedia 获取属性名称空间(在我的示例中为dbpedia-owl .genre),我不想对其进行硬编码。任何人都可以帮助我lz...
非常感谢
您最初的问题让我认为您想要类似 Jena schemagen的东西,它将自动从本体中使用的标识符 URI 生成 Java 常量集合。但是,DbPedia OWL 模式相当大,我认为 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();