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

Java 如何在dbpedia中通过使用jena提供属性名来获取属性的名称空间?,java,sparql,jena,dbpedia,Java,Sparql,Jena,Dbpedia,我试图在下面的dbpedia链接中使用jena中的sparql获取属性类型的值 但是我不知道如何从dbpedia获取属性名称空间(dbpediaowl.genre,在我的示例中),我不想硬编码它。有人能帮我吗 非常感谢您最初的问题让我觉得您需要类似Jena的东西,它将根据本体中使用的标识符URI自动生成Java常量集合。然而,这个问题相当大,我认为schemagen可能不会产生有用的结果(我还没有尝试过)。如果是这样,您可以选择感兴趣的资源和属性的子集,并在该子集上运行schemagen 然而,

我试图在下面的dbpedia链接中使用jena中的sparql获取属性类型的值

但是我不知道如何从dbpedia获取属性名称空间(dbpediaowl.genre,在我的示例中),我不想硬编码它。有人能帮我吗


非常感谢

您最初的问题让我觉得您需要类似Jena的东西,它将根据本体中使用的标识符URI自动生成Java常量集合。然而,这个问题相当大,我认为schemagen可能不会产生有用的结果(我还没有尝试过)。如果是这样,您可以选择感兴趣的资源和属性的子集,并在该子集上运行schemagen

然而,您的澄清评论(其中您谈到使用其他属性,如latitude等)让我觉得您在问一个不同的问题:即,如何避免将特定属性硬编码到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();

有关更多信息,请参见,或者。

为什么不使用硬编码?属性genre有一个固定的URI,它不会改变,所以为什么不将该URI硬编码到查询中呢?bcz有时我可能需要使用一些其他值,如经度、纬度、页面,这些值具有不同的URI,如Geo和FOAF。。。如果我开始硬编码,那么我必须保存所有的url。。。这就是为什么我不想硬编码它。。。