java - 如何从 sparql 结果中提取 dataproperty 值?

标签 java sparql jena ontology

我正在使用 jena 来触发本体查询。当我运行查询以获取分配给对象 Student1

的数据属性值时,我得到的结果如下
"Ashutosh"^^http://www.w3.org/2001/XMLSchema#string is not a URI node

如果我想要如下结果该怎么办

"Ashutosh" or `Ashutosh`

这是我的java代码。如果我想要上面给出的答案,我该怎么办?

import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.util.FileManager;


public class abc {
static String avg;
static String sq="Charlie";
static String tq="'";
static String data;


public static void main(String[] args) {

    // TODO Auto-generated method stub

sparqltest();}


static void sparqltest()
{

    FileManager.get().addLocatorClassLoader(abc.class.getClassLoader());
    Model model= FileManager.get().loadModel("C:/Users/avg/workspacejena32/Jena/bin/ashu.rdf");
    //System.out.println("Connected...");
    String queryString="prefix avg:<http://www.semanticweb.org/avg/ontologies/2016/3/untitled-ontology-14#>" +
                       "prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
                       "SELECT * WHERE {" +
                       "avg:Student1 avg:Name ?x . filter isLiteral(?x)" +
                       "}";
    //System.out.println("Connected...");


    Query query= QueryFactory.create(queryString);
    QueryExecution qexec=QueryExecutionFactory.create(query, model);

 try {
    ResultSet rs = qexec.execSelect();
    for ( ; rs.hasNext() ; )
    {
    QuerySolution soln = rs.nextSolution() ;
    RDFNode a = soln.get("x") ;
    data = a.asNode().getLocalName();


} }


    catch(Exception e)
{
    System.out.println(e.getMessage());
}   
 } 
 } 

最佳答案

我认为你想做的事情可以通过执行以下操作来实现:

String aS = a.asNode().getLiteral();

这将为您提供不带引号的文字。喜欢

"Ashutosh"^^http://www.w3.org/2001/rdf-schema#Literal

如果您想要文字的纯词汇形式,您可以使用:

String aS = a.asNode().getLiteralLexicalForm();

这将仅返回没有数据类型的节点的文字。 (但要注意,只有当 Node 确实是一个文字时它才有效)

关于java - 如何从 sparql 结果中提取 dataproperty 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871531/

相关文章:

java - 为什么点击按钮时会出现相同的按钮?

java - 在 Java 8 中,如果映射具有重复值,则获取重复值异常

semantics - SPARQL:如何获取本体的实例,类层次结构的深度未知?

java - 使用 Java 代码查询 SPARQL 到 DBPedia

database - SPARQL - 每个 Actor 的奖项数量?

java - 首选项被锁定

java - 使用 Stringbuilder 创建 long[] 数组

log4j - 为 Log4j 配置 Eclipse

sparql - 聚合属性

namespaces - 如何使用 Jena 向 OntClass 添加远程命名空间