以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  关于在sparql中使用参数和中文检索词的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=68233)


--  作者:mailywxl
--  发布时间:10/14/2008 8:57:00 AM

--  关于在sparql中使用参数和中文检索词的问题
在很多时候sparql检索式中需要使用用户输入的参数,这个参数很可能是中文的,需要如何表达呢?下面这个表达式需要检索检索课程编译原理的后继课程
比如
public class Test1{

public static void main(String args[]){
  
  try
  {
  OntModel m = ModelFactory.createOntologyModel();
File file = new File("d:\\zhouyu.owl");
FileInputStream in = new FileInputStream(file);

m.read(in,null);


String queryString="PREFIX zyzy:<http://www.swust.edu.cn/tsg/zhouyu.owl#> "+
    "select  ?name1 ?course2 "+
    "where {?course1 zyzy:name \"编译原理\"; zyzy:aftercourse ?course2.?course2 zyzy:name ?name1}";



Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query,m);
    ResultSet results = qe.execSelect();
    while(results.next()!=null){
    QuerySolution solu1=results.nextSolution();
    Literal temp00=solu1.getLiteral("name1");
   System.out.println(temp00.toString());
    }

  }catch(Exception e){e.printStackTrace();}
}
}
--  作者:iamwym
--  发布时间:10/14/2008 1:07:00 PM

--  
我建议中文本体在class name仍然使用英文,在label或者decription使用中文,我怀疑在sparql中使用中文很可能存在麻烦的编码问题
--  作者:mailywxl
--  发布时间:10/14/2008 2:25:00 PM

--  
对,我是按照这样的方式选择使用中英文的,但是用户输入的检索词是中文(不可能要求其输英文),然后检索词传递到业务逻辑中进行检索,始终要进入匹配环节.
--  作者:mailywxl
--  发布时间:10/17/2008 11:18:00 AM

--  
好了,经过我的研究,现在一切问题都解决了,SPARAL已经可以像SQL一样随意的传递参数了,具体代码如下:关键是在querystring和变量赋值的时候做了点手脚
package zhouyu;

import java.io.*;
import java.io.FileInputStream;

import com.hp.hpl.jena.reasoner.*;

import com.hp.hpl.jena.query.*;

import com.hp.hpl.jena.reasoner.rulesys.*;

import com.hp.hpl.jena.ontology.*;

import com.hp.hpl.jena.rdf.model.*;

public class Test1{

public static void main(String args[]){
  
  try
  {
  OntModel m = ModelFactory.createOntologyModel();
File file = new File("d:\\zhouyu.owl");
FileInputStream in = new FileInputStream(file);
String ttt="\"离散数学\"";
m.read(in,null);
String rules="[rule:(?x http://www.swust.edu.cn/tsg/zhouyu.owl#aftercourse ?y)"+
   "(?y http://www.swust.edu.cn/tsg/zhouyu.owl#aftercourse ?z)->"+
   "(?x http://www.swust.edu.cn/tsg/zhouyu.owl#aftercourse ?z)]";
Reasoner reasoner=new GenericRuleReasoner(Rule.parseRules(rules));
InfModel inf = ModelFactory.createInfModel(reasoner,m);

String queryString="PREFIX zyzy:<http://www.swust.edu.cn/tsg/zhouyu.owl#> "+
    "select  ?name1 ?course2 "+
    "where {?course1 zyzy:name "+ ttt +". ?course1 zyzy:aftercourse ?course2.?course2 zyzy:name ?name1}";



Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query,inf);
    ResultSet results = qe.execSelect();
    while(results.hasNext()){
    QuerySolution solu1=results.nextSolution();
    Literal temp00=solu1.getLiteral("name1");
   System.out.println(temp00.toString());
    }

  }catch(Exception e){e.printStackTrace();}
}
}


--  作者:mailywxl
--  发布时间:10/17/2008 11:23:00 AM

--  
如果还不满足,可以考虑用下面的代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package zhouyu;

import java.io.*;
import java.io.FileInputStream;

import com.hp.hpl.jena.reasoner.*;

import com.hp.hpl.jena.query.*;

import com.hp.hpl.jena.reasoner.rulesys.*;

import com.hp.hpl.jena.ontology.*;

import com.hp.hpl.jena.rdf.model.*;

public class Test1{

public static void main(String args[]){
  
  try
  {
  OntModel m = ModelFactory.createOntologyModel();
File file = new File("d:\\zhouyu.owl");
FileInputStream in = new FileInputStream(file);
String ttt="离散数学";
String fff="\""+ttt+"\"";
m.read(in,null);
String rules="[rule:(?x http://www.swust.edu.cn/tsg/zhouyu.owl#aftercourse ?y)"+
   "(?y http://www.swust.edu.cn/tsg/zhouyu.owl#aftercourse ?z)->"+
   "(?x http://www.swust.edu.cn/tsg/zhouyu.owl#aftercourse ?z)]";
Reasoner reasoner=new GenericRuleReasoner(Rule.parseRules(rules));
InfModel inf = ModelFactory.createInfModel(reasoner,m);

String queryString="PREFIX zyzy:<http://www.swust.edu.cn/tsg/zhouyu.owl#> "+
    "select  ?name1 ?course2 "+
    "where {?course1 zyzy:name "+ fff +". ?course1 zyzy:aftercourse ?course2.?course2 zyzy:name ?name1}";



Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query,inf);
    ResultSet results = qe.execSelect();
    while(results.hasNext()){
    QuerySolution solu1=results.nextSolution();
    Literal temp00=solu1.getLiteral("name1");
   System.out.println(temp00.toString());
    }

  }catch(Exception e){e.printStackTrace();}
}
}


我宣布结贴


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms