如何把一个String类型的sparql语句,解析出一系列triple

本文介绍了一种通过Java解析SPARQL查询语句的方法,并提供了一个具体的实现案例。该方法利用了QueryFactory和ElementVisitorBase等类来遍历SPARQL查询模式,从而获取并处理三元组路径。

我只在stack overflow上找到了一个不大好用的方案,仅供参考。
同道中人如果有会其他方法的欢迎交流啦~

public static ListIterator<TriplePath> triplePaths;
public static void parseSparql(String queryString){
        Query query = QueryFactory.create(queryString);

        ElementWalker.walk( query.getQueryPattern(), 
                new ElementVisitorBase() {
                    @Override
                    public void visit(ElementPathBlock el) {
                        ListIterator<TriplePath> it = el.getPattern().iterator();
                        //这个迭代器中装载的都是这个sparql语句的triplepath,可以调用asTriple语句获得triple
                        //这个it是局部变量,怎么把他取出来呢
                        triplePaths = it;
                    }
        });

triplePaths是类中的一个静态变量,我不知道如何把visit方法中的局部变量it取出来,所以用了这个不大聪明的方法,如果有另外的方法就更好啦。

这个方法用于ParseSparql类外访问解析结果

public static List<Triple> getTriplesInSparql(){
        List<Triple> triples = new ArrayList<Triple>();

        while(triplePaths.hasNext()){
            triples.add(triplePaths.next().asTriple());
        }
        return triples;
    }

Main方法中

String queryString = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?type WHERE {<http://cs.neu.edu.cn/rdf/schema/example#c2> rdf:type ?type. }";
        ParseSparql.parseSparql(queryString);
        List<Triple> triples = ParseSparql.getTriplesInSparql();
        for(Triple trp : triples){
            System.out.println(trp.toString());
        }

输出结果

http://cs.neu.edu.cn/rdf/schema/example#c2 @rdf:type ?type
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值