以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 计算机英语 』  (http://bbs.xml.org.cn/list.asp?boardid=39)
----  [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值  (http://bbs.xml.org.cn/dispbbs.asp?boardid=39&rootid=&id=87259)


--  作者:dorothyle
--  发布时间:10/21/2010 10:05:00 AM

--  [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值
今天终于实现了将一个本体文件存储到数据库中,再从数据库中将文本文件读出来,输出该本体中的所有类,所有属性及其对应属性的值。

import java.util.Iterator;
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.db.IDBConnection;
import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.ontology.OntProperty;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ModelMaker;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;

public class ReadOntologyFromMysql {
 public static final String strDriver = "com.mysql.jdbc.Driver";
 public static final String strURL = "jdbc:mysql://localhost:3306/jena";
 public static final String strUser = "root";
 public static final String strPassword = "root";
 public static final String strDB = "MySQL";
 
 // 连接数据库
 public static IDBConnection connectDB(String DBURL, String DBUSER, String DBPASSWORD, String DBTYPE){
  try {
   Class.forName("com.mysql.jdbc.Driver");
   System.out.print("数据库连接成功, 已经连接到");
  }catch (ClassNotFoundException e){
   e.printStackTrace();
   System.out.println("数据库连接不成功");
  }
  return new DBConnection(DBURL, DBUSER,DBPASSWORD,DBTYPE);
 }
 
    // 提取本体文件关于OWL架构等详细信息
 public static OntModelSpec getModelSpec(ModelMaker maker) {
  OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);
  spec.setImportModelGetter(maker);
  return spec;
 }
 
 // 从文件读取本体并将其存入数据库
 public static OntModel ceateDBModelFromFile(IDBConnection con, String name, String filePath){
  ModelMaker maker = ModelFactory.createModelRDBMaker(con);
  Model base = maker.createModel(name);
  OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker),base);
  newmodel.read(filePath);
  System.out.println("已将本体文件存入数据库。");
  System.out.println();
  return newmodel;  
 }
 
 // 从数据库中得到已存入本体
 public static OntModel getModelFromDB(IDBConnection con, String name){
  ModelMaker maker = ModelFactory.createModelRDBMaker(con);
  Model base = maker.getModel(name);
  OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker),base);
  System.out.println("已从数据库中读出本体文件。");
  System.out.println();
  return newmodel;
 }
 
 // 简单读取本体中的所有类
 public static void SimpleReadOntology(OntModel model){
  System.out.println("该本体文件中包括以下类:");
  for (Iterator i = model.listClasses(); i.hasNext();){
   OntClass c = (OntClass) i.next();
   System.out.println("    " + c.getLocalName());
  }
  System.out.println();
 }
 
 public static void main(String args[]){
  IDBConnection con = connectDB(strURL, strUser, strPassword, strDB);
  System.out.println(con + ";");
  System.out.println();
  String filePath = "file:e:/ontologies/BeijingOpera/Costume.owl";
  String prefix = "http://Costume.owl#";
  
  OntModel defModel = ceateDBModelFromFile(con, "Costume", filePath);
  // 读取filePath目录下本体文件Costume的内容,将该本体文件的内容存储到数据库con中;
  OntModel model = getModelFromDB(con, "Costume");
  // 将数据库con中存储的本体文件Costume的内容读出到一个本体文件Model中;
  
  SimpleReadOntology(model);
  OntClass CostumeClass = model.getOntClass(prefix + "Costume");
  String name = CostumeClass.getLocalName();
//返回的是Costume本体中的类Costume的名字,是一个字符串;
  System.out.print("此处返回的是" + name + "类的名称");
  System.out.println(name);
  System.out.println();
  
  ExtendedIterator it = CostumeClass.listInstances();
  System.out.println("此处返回的是" + name + "类的所有实例:");
  while (it.hasNext()) {
   Individual oi = (Individual) it.next();
   System.out.println("    " + oi.getLocalName());
   
   for (Iterator ipp = CostumeClass.listDeclaredProperties(); ipp.hasNext();){
    OntProperty p = (OntProperty) ipp.next();
    System.out.println("    associated property:" + p.getLocalName() + ":" + oi.getPropertyValue(p));
   }
  }
 }
}

以上代码执行后,控制台的输出如下:
数据库连接成功, 已经连接到com.hp.hpl.jena.db.DBConnection@157f0dc;

已将本体文件存入数据库。

已从数据库中读出本体文件。

该本体文件中包括以下类:
    Costume
    Document
    Image
    Master

此处返回的是Costume类的名称Costume

此处返回的是Costume类的所有实例:
    HongTuanLongMang
            associated property:kind:Mang^^http://www.w3.org/2000/01/rdf-schema#Literal
            associated property:image:null
            associated property:pattern:SanJianShui, Long^^http://www.w3.org/2000/01/rdf-schema#Literal
            associated property:daPei:null
            associated property:name:HuanTuanLongMang^^http://www.w3.org/2000/01/rdf-schema#Literal
            associated property:color:red^^http://www.w3.org/2000/01/rdf-schema#Literal
            associated property:hangDang:Sheng^^http://www.w3.org/2000/01/rdf-schema#Literal
            associated property:texture:DaDuan^^http://www.w3.org/2000/01/rdf-schema#Literal
            associated property:depiction:null
            associated property:style:DuiJin, YuanCollar^^http://www.w3.org/2000/01/rdf-schema#Literal

    HuangTuanLongMang
            associated property:kind:null
            associated property:image:null
            associated property:pattern:null
            associated property:daPei:null
            associated property:name:null
            associated property:color:null
            associated property:hangDang:null
            associated property:texture:null
            associated property:depiction:null
            associated property:style:null

    LvTuanLongMang
            associated property:kind:null
            associated property:image:null
            associated property:pattern:null
            associated property:daPei:null
            associated property:name:null
            associated property:color:null
            associated property:hangDang:null
            associated property:texture:null
            associated property:depiction:null
            associated property:style:null


--  作者:hjx_221
--  发布时间:10/21/2010 4:17:00 PM

--  
谢谢楼主!!

--  作者:hanyonghua6
--  发布时间:11/5/2010 5:34:00 PM

--  
这里的实例是在本例中直接建好的某个类的实例吗?需要推理以后才能成为某个类的实例这种情况是不是还得有推理的代码啊?
--  作者:Roger_
--  发布时间:11/6/2010 8:21:00 PM

--  
这是Jena OntModel类(实际上是一个interface)的说明文档中的一部分:
Depending on the inference capability of the underlying model, the OntModel will appear to contain more or less triples. For example, if this class is used to wrap a plain memory or database model, only the relationships asserted by the document will be reported through this convenience API. Alternatively, if the OntModel wraps an OWL inferencing model, the inferred triples from the extension will be reported as well.

lz的代码只是将本体简单的存放为database model(OntModel接口实现的方式之一),因而不具备inference能力。所以我觉得,那个listInstances方法返回的是本体中已知的类实例,不包含隐含的实例。

对Jena Ontology存储所需的类和方法不太熟,如果有错,请大家指正。


--  作者:hanyonghua6
--  发布时间:11/8/2010 8:45:00 AM

--  
嗯,谢谢,你是在研究本体吗?我正在学习阶段,希望以后多多指教~~
--  作者:Roger_
--  发布时间:11/8/2010 9:35:00 AM

--  
研究方向是语义网,但具体的研究不是本体。。
用过Jena,所以了解些

大家一起学习


--  作者:hanyonghua6
--  发布时间:11/8/2010 9:44:00 AM

--  
哦,我最近在看jena关于本体查询的一些资料,你有做过这方面的研究吗?
--  作者:Roger_
--  发布时间:11/8/2010 10:12:00 AM

--  
一样的。。我也看那个
--  作者:pjohn2003
--  发布时间:11/8/2010 8:00:00 PM

--  
学习,感谢发帖
--  作者:andyneo
--  发布时间:12/27/2010 9:18:00 PM

--  
出错了 :数据库连接成功了,但是无法实例化mysql5.0 以下是控制台全部代码 请楼主指教 谢谢!
数据库连接成功, 已经连接到com.hp.hpl.jena.db.DBConnection@1ded0fd;

Exception in thread "main" com.hp.hpl.jena.db.RDFRDBException: Failure to instantiate DB Driver:mysql5.0 java.lang.ClassNotFoundException: com.hp.hpl.jena.db.impl.Driver_mysql5.0
 at com.hp.hpl.jena.db.DBConnection.getDriver(DBConnection.java:272)
 at com.hp.hpl.jena.db.DBConnection.containsModel(DBConnection.java:195)
 at com.hp.hpl.jena.db.impl.GraphRDBMaker.hasGraph(GraphRDBMaker.java:132)
 at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:94)
 at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:46)
 at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:49)
 at com.jena.test.ReadOntologyFromMysql.ceateDBModelFromFile(ReadOntologyFromMysql.java:45)
 at com.jena.test.ReadOntologyFromMysql.main(ReadOntologyFromMysql.java:80)
Caused by: java.lang.ClassNotFoundException: com.hp.hpl.jena.db.impl.Driver_mysql5.0
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Unknown Source)
 at com.hp.hpl.jena.db.DBConnection.getDriver(DBConnection.java:267)
 ... 7 more


--  作者:andyneo
--  发布时间:12/28/2010 10:27:00 AM

--  
出错了 前几部还算是顺利 到了最后一步出错了:贴出报警,请指教!(为什么有那么多的null)
数据库连接成功, 已经连接到com.hp.hpl.jena.db.DBConnection@1ded0fd;

已将本体文件存入数据库。

已从数据库中读出本体文件。

该本体文件中包括以下类:
    Wine
    Vintage
    WineGrape
    WhiteWine
    WhiteTableWine
    TableWine
    WhiteNonSweetWine
    null
    WhiteLoire
    Loire
    null
    WhiteBurgundy
    Burgundy
    WhiteBordeaux
    Bordeaux
    null
    Region
    VintageYear
    Zinfandel
    null
    null
    Winery
    WineDescriptor
    WineTaste
    WineColor
    WineSugar
    WineFlavor
    WineBody
    Tours
    SweetWine
    SweetRiesling
    null
    Riesling
    StEmilion
    SemillonOrSauvignonBlanc
    null
    null
    Semillon
    SauvignonBlanc
    Sauternes
    Sancerre
    RoseWine
    RedWine
    RedTableWine
    RedBurgundy
    RedBordeaux
    null
    Port
    PinotNoir
    PinotBlanc
    PetiteSyrah
    null
    null
    Pauillac
    Medoc
    Muscadet
    Meursault
    Merlot
    null
    null
    Meritage
    null
    Margaux
    LateHarvest
    null
    ItalianWine
    IceWine
    null
    null
    DessertWine
    GermanWine
    Gamay
    FullBodiedWine
    FrenchWine
    EarlyHarvest
    null
    DryWine
    DryWhiteWine
    DryRiesling
    null
    DryRedWine
    null
    CotesDOr
    Chianti
    null
    CheninBlanc
    null
    null
    Chardonnay
    null
    null
    CaliforniaWine
    TexasWine
    CabernetSauvignon
    null
    null
    CabernetFranc
    Beaujolais
    Anjou
    AmericanWine
    AlsatianWine
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    ConsumableThing
    NonConsumableThing
    EdibleThing
    PotableLiquid
    Wine
    Juice
    Grape
    Pasta
    PastaWithWhiteSauce
    PastaWithSpicyRedSauceCourse
    MealCourse
    PastaWithSpicyRedSauce
    PastaWithRedSauce
    PastaWithNonSpicyRedSauceCourse
    PastaWithNonSpicyRedSauce
    PastaWithLightCreamSauce
    PastaWithLightCreamCourse
    PastaWithHeavyCreamSauce
    PastaWithHeavyCreamCourse
    OysterShellfishCourse
    OysterShellfish
    OtherTomatoBasedFoodCourse
    OtherTomatoBasedFood
    NonSweetFruitCourse
    SweetFruitCourse
    NonSweetFruit
    NonSpicyRedMeatCourse
    null
    NonSpicyRedMeat
    NonRedMeatCourse
    NonRedMeat
    NonOysterShellfishCourse
    NonOysterShellfish
    NonBlandFishCourse
    NonBlandFish
    Meat
    Meal
    LightMeatFowlCourse
    LightMeatFowl
    FruitCourse
    Fruit
    SweetFruit
    Fowl
    FishCourse
    DessertCourse
    Dessert
    SweetDessertCourse
    SweetDessert
    DarkMeatFowlCourse
    DarkMeatFowl
    CheeseNutsDessertCourse
    CheeseNutsDessert
    BlandFishCourse
    BlandFish
    Fish
    SpicyRedMeat
    ShellfishCourse
    null
    Shellfish
    SeafoodCourse
    Seafood
    RedMeatCourse
    RedMeat
    EatingGrape
    SpicyRedMeatCourse
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null
    null

Exception in thread "main" java.lang.NullPointerException
 at com.jena.test.ReadOntologyFromMysql.main(ReadOntologyFromMysql.java:88)


--  作者:andyneo
--  发布时间:12/28/2010 9:45:00 PM

--  
请问 如果在列出本体中的类的时候 出现了NULL  是不是指的是匿名类呢?
--  作者:ylzhu
--  发布时间:8/14/2011 2:32:00 PM

--  
谢谢楼主!

--  作者:sylfirelotussyl
--  发布时间:11/17/2011 3:06:00 PM

--  
你好 楼主 请问你是在什么环境中 写的以上代码呀

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