以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  請問Jena API中如何查詢包含某關鍵字的字串值??謝謝!!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=30888)


--  作者:vampire6211
--  发布时间:4/19/2006 9:46:00 PM

--  請問Jena API中如何查詢包含某關鍵字的字串值??謝謝!!
各位大大,您們好:
    我使用Protege來建置我的Ontology後,存成RDF或OWL檔案後,我試著用Jena API去作查詢
    ,我目前測試的程式如下:

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

import java.util.* ;
import java.io.* ;

public class rdql_code_test
{
    static public void main(String[] argv)
    {
        try {
            Model model = ModelFactory.createDefaultModel() ;
            model.read(new FileInputStream("Develop_FAQs_20050321.rdf"),
                       "http://nowhere/",
                       "RDF/XML") ;

            String queryString = "SELECT ?x, ?I_Keyword "+
            "WHERE ((?x, <http://protege.stanford.edu/rdfI_Keyword>, ?I_Keyword)"+
            "AND ?I_Keyword eq 'Close'";

            Query query = new Query(queryString) ;
            query.setSource(model);
            QueryExecution qe = new QueryEngine(query) ;

            QueryResults results = qe.exec() ;
            for ( Iterator iter = results ; iter.hasNext() ; )
            {
                ResultBinding res = (ResultBinding)iter.next() ;
                Object x = res.get("x") ;
                Object I_Keyword = res.get("I_Keyword") ;
                System.out.println("x = "+x+"   I_Keyword = "+I_Keyword) ;
            }
            results.close() ;
            
        } catch (Exception ex)
        {
            System.err.println("Exception: "+ex) ;
            ex.printStackTrace(System.err) ;
        }
    }
}

以上程式我查詢了某一個屬性(I_Keyword),當值為"Close"時將資料查詢出來,但是我好像只能那個屬性的值
完全要等於"Close"才查詢得出來(請參考紅色字體的程式)..
請問我要怎麼寫才能將只要其值有包含Close這個字串,就查詢出來呢??(就像SQL的Like語法==> like '%Close%')..
不知是否有這樣的語法可用呢??(請)
謝謝各位囉!!


--  作者:jpz6311whu
--  发布时间:4/19/2006 10:02:00 PM

--  
正则表达式:
Filters expressions can also include regular expressions (provided by the Jakarta ORO package):

SELECT ?person
WHERE  (?person vCard:FN ?fullName)
AND    ?fullName =~ /Smith/i
USING  vCard FOR <http://www.w3.org/2001/vcard-rdf/3.0#>

which searches for people with a formatted name containing "smith" (case insentive).  It would be less efficient than looking for the vCard:familyName property with value "Smith". The "does not match" operator is "!~".


--  作者:badguy_tj
--  发布时间:4/20/2006 10:13:00 PM

--  
请问楼上的:
有更详细的资料吗?我也遇到这样的问题
--  作者:jpz6311whu
--  发布时间:4/20/2006 10:21:00 PM

--  
上文摘自jenadoc,它关于RDQL的正则就讲了这么多
--  作者:badguy_tj
--  发布时间:4/20/2006 11:55:00 PM

--  
里面介绍的rdql语法很难看懂啊
例子又很少
--  作者:vampire6211
--  发布时间:4/21/2006 1:12:00 PM

--  
謝謝以上的答覆,只是我有點不太懂....
我是否要去找Jakarta ORO package...然後Import進來...才能使用這樣的語法呢??
我本來只import Jena的API....但試用類似以上AND  ?fullName =~ /Smith/i 的語法會出現錯誤訊息.....有點困擾.......麻煩各位大大了...
謝謝!!

--  作者:jpz6311whu
--  发布时间:4/21/2006 1:34:00 PM

--  
你最好还是看一看ORO的使用说明,特别是正则表达式的写法。
至于是否要import,你在编译的时候就可以判断。
jena应该包含了ORO,你要做的是写出正确的正则表达式作为查询条件即可。
--  作者:vampire6211
--  发布时间:4/22/2006 2:10:00 PM

--  
謝謝以上大大的幫忙,我已經測試出來了..
如上面jpz6311whu所舉出的例子......
我只要在WHERE後面加上"AND ?I_Keyword =~ /Close/" 就OK了.....
其要表示like(contain) 用 =~   後面字串用"/" 包起來 並且於尾加 i (測試不用加i也可以,這一點我就不太明白了)
而not like 則用 !~

以上謝謝大家的幫忙....
若有說錯的地方,煩請再指正......
謝謝!!


--  作者:zouyz
--  发布时间:4/23/2006 12:03:00 AM

--  
下载ARQ-1.3,实现SPARQL的Jena查询处理器

SPARQL支持正则表达式,可以作出类似SQL的Like那样的条件~~~


--  作者:zouyz
--  发布时间:4/23/2006 12:06:00 AM

--  
以下是引用vampire6211在2006-4-22 14:10:00的发言:
謝謝以上大大的幫忙,我已經測試出來了..
如上面jpz6311whu所舉出的例子......
我只要在WHERE後面加上"AND ?I_Keyword =~ /Close/" 就OK了.....
其要表示like(contain) 用 =~   後面字串用"/" 包起來 並且於尾加 i (測試不用加i也可以,這一點我就不太明白了)
而not like 則用 !~

以上謝謝大家的幫忙....
若有說錯的地方,煩請再指正......
謝謝!!



加 i 应该是是否忽略大小写的开关,SPARQL里是这样


--  作者:sophia-rener
--  发布时间:8/10/2006 11:49:00 AM

--  
菜鸟请教
我在程序里写了这几句代码
Query query = new Query(queryString) ;
     query.setSource(model);
但是出错:信息如下:(请一定要帮帮忙啊)
The constructor Query(String) is undefined
--  作者:jpz6311whu
--  发布时间:8/10/2006 11:57:00 AM

--  
以下是引用sophia-rener在2006-8-10 11:49:00的发言:
菜鸟请教
我在程序里写了这几句代码
  Query query = new Query(queryString) ;
      query.setSource(model);
但是出错:信息如下:(请一定要帮帮忙啊)
The constructor Query(String) is undefined



com.hp.hpl.jena.query
Class QueryFactory
java.lang.Object
  com.hp.hpl.jena.query.QueryFactory

--  作者:lqm
--  发布时间:8/13/2006 11:39:00 AM

--  
我遇到的问题与你们讨论的完全相同,可是我还没有弄懂你们说的,能不能把资料指示一下,谢谢
我的Email:lqmjulia@sohu.com

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