-- 作者: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时,返回的空。 ################################################ 哪位大虾如能帮我解决前面一个或者两个,小弟我会感恩戴德!!!
|