以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  用Jena做了一个小小的SPARQL语法检查工具,或许对大家有用  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=55257)


--  作者:zhaonix
--  发布时间:11/12/2007 8:39:00 PM

--  用Jena做了一个小小的SPARQL语法检查工具,或许对大家有用
近日做一个原型,需要生成SPARQL语句,但在w3c的SPARQLImplementation页面上的parser部分没找到现成可用的语法检查工具,只有一个ARQ的Sparql.jj似乎比较接近。为此看了JavaCC的例子,照葫芦画瓢封装出了下面这么一个小小的SPARQL语法检查工具。确实帮自己发现了自己写的SPARQL语句中几个语法错误。贴出来或许对大家也有用。

用法:编译、运行需要先设置Jena所需的classpath。
[补充]:我用的Jena是2.5.4版的。但想必只要带了ARQ(即lib目录下有arq.jar)的版本都能用。

/*
*Created after the Simple1.jj example of JavaCC.
*2007-11-11 21:30
*By zwf
*
*usage:
*    After start up SaprqlChecker, input your SPARQL statement and then \r and/or \n.
*    If there is any grammer syntax in it it will be displayed, or there will
*    be a silence which can be ended with  <CTRL+D> and/or <ENTER>.
*    Suggestion: use an input redirection file to input the statement to check.
*/

import com.hp.hpl.jena.sparql.lang.sparql.SPARQLParser;
import com.hp.hpl.jena.sparql.lang.sparql.ParseException;
import com.hp.hpl.jena.query.Query;

public class SparqlChecker{
  public static void main(String args[]) throws ParseException {
    SPARQLParser parser = new SPARQLParser(System.in);

    Query query = new Query() ;
    parser.setQuery(query);
    parser.CompilationUnit();  //Query();
  }
}

[此贴子已经被作者于2007-11-13 8:37:44编辑过]

--  作者:cooperator
--  发布时间:11/12/2007 11:56:00 PM

--  
没看懂,不过发现了好几个SPARQL语法错误,肯定有用了,我先支持一下
--  作者:zhaonix
--  发布时间:11/13/2007 8:45:00 AM

--  
以下是引用cooperator在2007-11-12 23:56:00的发言:
没看懂,不过发现了好几个SPARQL语法错误,肯定有用了,我先支持一下


哦,怪我写的不清楚。把这段代码拷下来建一个java文件SparqlChecker.java,用javac编译,然后就能用了:  java SparqlChecker < input.txt 即可。其中input.txt中放置了你想检查的SPARQL语句——当然,其中可以换行。

如果你的SPARQL语句没有语法问题,则什么输出也没有,悄悄地结束;否则,会指出第一个问题的位置、以及期望的token,并退出运行。

如,我开始时生成的SPARQL语句中在SELECT部分的各个字段之间加了逗号,检查结果如下:
E:\WSTOOLS\Jena\test>java SparqlChecker <in.txt
Exception in thread "main" com.hp.hpl.jena.sparql.lang.sparql.ParseException: En
countered "," at line 3, column 11.
Was expecting one of:
    <VAR1> ...
    <VAR2> ...
    "from" ...
    "where" ...
    "{" ...

        at com.hp.hpl.jena.sparql.lang.sparql.SPARQLParser.generateParseExceptio
n(SPARQLParser.java:2183)
   ……


--  作者:Avansky
--  发布时间:3/30/2010 3:21:00 PM

--  
多谢!向你学习。有什么新的心得共享一下。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
66.406ms