以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  [求助]请大家帮我看看我这个本体到底有什么问题?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=20304)


--  作者:she
--  发布时间:7/11/2005 5:39:00 PM

--  [求助]请大家帮我看看我这个本体到底有什么问题?
郁闷了好几天,始终没有找出错在哪里,但是用Jena的解析器来读取文档时,就会出现一些错误,请大虾们帮忙看看,离导师的期限没几天了,我急呀!

1、下面我描述一下我建立的本体,这个本体是根据中科院核心元数据标准的15个核心元素建立的,它是用来描述数据集的。为了测验,我目前只对其中一个核心元素建立了本体, 这个核心元素是”数据集主题“(Subject), 其是一个复合属性,有 ”学科主题词“ (ControlledWord) 和 ”自由关键词"(KeyWords)两个属性, 而 "学科主题词"也是复合属性, 包括 "主题词”(SubjectWord) 和 “词汇表”(Thesaurus) 两个属性。
像DC本体15个元素都为属性一样,我这个本体只有一个类(Dataset), 其余都为属性。其中最烦的这些属性不是继承关系,而是包含关系,而且每个属性有其势的限制。所以在对属性取值的限制很是罗嗦。整个的本体文件如下:
*******************************************************************
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
     <!ENTITY xsd  "http://www.w3.org/2001/XMLSchema#" >
   ]>

<rdf:RDF
    xmlns="http://www.she.com/dataset#"
    xml:base="http://www.she.com/dataset#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    
  >
  <owl:Ontology rdf:about=""/>

  <owl:Class rdf:ID="DataSet"/>

  <owl:ObjectProperty rdf:ID="Subject">
    <rdfs:domain rdf:resource="#DataSet"/>
  </owl:ObjectProperty>

  <owl:ObjectProperty rdf:ID="ControlledWord">
  </owl:ObjectProperty>
  
  <owl:DataProperty rdf:ID="KeyWords">
    <rdfs:range rdf:resource="&xsd;string"/>
  </owl:DataProperty>

<owl:DataProperty rdf:ID="SubjectWord">
   <rdfs:range rdf:resource="&xsd;string"/>
</owl:DataProperty>

<owl:DataProperty rdf:ID="Thesaurus">
   <rdfs:range rdf:resource="&xsd;string"/>
</owl:DataProperty>

<owl:Class rdf:about="DataSet">
  <owl:equivalentClass>
    <owl:Restriction>
      <owl:onProperty rdf:resource="#Subject" />
      <owl:allValuesFrom>
     <owl:Class>
   <owl:intersectionOf rdf:parseType="Collection">
    <owl:Restriction>
    <owl:onProperty rdf:resource="#ControlledWord"/>
    <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">0</owl:minCardinality>
    <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">unbounded</owl:maxCardinality>
    <owl:allValuesFrom>
      <owl:Class>
       <owl:intersectionOf rdf:parseType="Collection">
        <owl:Restriction>
        <owl:onProperty rdf:resource="#SubjectWord" />
        <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
               <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">unbounded</owl:maxCardinality>
     </owl:Restriction>

        <owl:Restriction>
        <owl:onProperty rdf:resource="#Thesaurus" />
        <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
        </owl:Restriction>
       </owl:intersectionOf>
      </owl:Class>
    </owl:allValuesFrom>
    </owl:Restriction>
    
    <owl:Restriction>
    <owl:onProperty rdf:resource="#KeyWords" />
    <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">0</owl:minCardinality>
       <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">unbounded</owl:maxCardinality>
    </owl:Restriction>
   </owl:intersectionOf>
  </owl:Class>
       </owl:allValuesFrom>
    </owl:Restriction>
  </owl:equivalentClass>
</owl:Class>

<!--use it describe data-->
<Dataset rdf:ID="dataset1">
  <Subject>
      <ControlledWord>
    <SubjectWord rdf:datatype="&xsd;string">标准核心元数据元素</SubjectWord>
    <SubjectWord rdf:datatype="&xsd;string">OWL</SubjectWord>
    <Thesaurus rdf:datatype="&xsd;string">RDF</Thesaurus>
      </ControlledWord>
      <KeyWords rdf:datatype="&xsd;string">OWL</KeyWords>
  </Subject>
</Dataset>

<Dataset rdf:ID="dataset2">
  <Subject>
      <ControlledWord>
    <SubjectWord rdf:datatype="&xsd;string">水资源</SubjectWord>
    <SubjectWord rdf:datatype="&xsd;string">OWL</SubjectWord>
    <Thesaurus rdf:datatype="&xsd;string">RDF</Thesaurus>
      </ControlledWord>
      <KeyWords rdf:datatype="&xsd;string">OWL</KeyWords>
  </Subject>
</Dataset>  

</rdf:RDF>
***************************************************************
说明:大家可能想“为什么要这么多空类(空节点),为什么不定义一些中间类来简化?”这是因为那些中间的类对描述数据集有任何意义,更糟糕的是,假如真的建立那些中间类,当描述数据实例的时候,还要实例化这些中间类,这是一件十分痛苦和恶心的事情,因为这些中间类的实例没有任何实际意义。

2、当我把描述数据“dataset1","dataset2"中的”KeyWords"部分删掉,没有什么问题。一加上“KeyWords"部分,就会出现如下错误:
****************************************************************
ERROR [main] (RDFDefaultErrorHandler.java:40) - [88:7]: {E201} Syntax
error when processing general start element tag.
Cannot have another XML element here.
(Maybe one object has already been given as the value of the
enclosing property).
ERROR [main] (RDFDefaultErrorHandler.java:40) - [98:7]: {E201} Syntax
error when processing general start element tag.
Cannot have another XML element here.
(Maybe one object has already been given as the value of the
enclosing property).
**********************************************************
其中88行,98行就是那个“KeyWords"部分!
按照上面本体的定义,"KeyWords"属性跟”ControlledWord"属性是可以共存的。可是用jena来读取,却好像表示不可以。
我不知道到底我的本体写错了,还是其他什么原因?

3.还有一件郁闷的事情,即使我把"dataset1"和"dataset2"中的"KeyWords"部分的去掉,当我把其导入jena的Model中,列出所有的statements, 确找不到属性为"ControlledWord"的statement。我用RDQL来查询具有“ControlledWord"属性的 subject和object时,返回的空。

################################################
哪位大虾如能帮我解决前面一个或者两个,小弟我会感恩戴德!!!


--  作者:iamwym
--  发布时间:7/11/2005 6:45:00 PM

--  
问一下,楼主是用文本写的本体?
--  作者:she
--  发布时间:7/11/2005 9:30:00 PM

--  
恩,对呀, 这个本体不复杂,所以直接用文本编辑器写的
--  作者:windbird
--  发布时间:7/12/2005 12:16:00 AM

--  
为何不用PROTEGE进行本体编辑,然后再用RACER来进行检验呢?
--  作者:iamwym
--  发布时间:7/12/2005 4:46:00 AM

--  
同意楼上,语义网届所有的权威人士都会建议——建立任何本体,都请使用本体编辑器,不要认为自己够牛可以手写。本体不是html,各个概念之间都会有互相关联,手动写是不明智的,容易出错,而且错的很没有意义。
--  作者:she
--  发布时间:7/12/2005 9:04:00 AM

--  
谢谢各位关心,在jena-dev上已经有人帮我解决了。

关于用本体编辑器,是由于自己对protege很不熟悉,像上面写的那些嵌套的匿名的Restriction, 在protege中不知道怎么写。我是小虾一个,哪敢称牛!

再次谢谢大家!


--  作者:iamwym
--  发布时间:7/12/2005 5:50:00 PM

--  
protege不熟,那个tutorial看2个钟头就熟了。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms