我对学习语义网很新,所以为了便于学习,我选择写一个关于我非常熟悉的东西的本体论,视频游戏。
所以我想我已经开始理解这一点了,但仍有一些问题。我一般认为这里基本上有4个平台。当然,这是非常简化的(而不是不同的控制台,只列出使游戏机可以玩游戏的公司。)无论如何,我所遇到的问题源于这条线:
<owl:someValuesFrom rdf:resource="#Platforms"/>
我不完全确定它有什么问题,我尝试过使用和不使用'#'字符,但Jena在解析它时给了我这个错误(如果我发表评论,它解析得很好):
org.apache.jena.riot.RiotException: {E201} rdf:resource not allowed as attribute here.
我有一种感觉,我并不完全理解owl:someValuesFrom,而且我所看到的大多数参考本体似乎都在类似的上下文中使用它。我几乎可以肯定我忽略了一些简单的东西,所以也许更多的眼睛会有所帮助,但是任何一切都有所帮助。如果需要的话,我很乐意发表更多的本体论。
它的背景是:
<owl:Class rdf:ID="Platforms">
<owl:oneOf rdf:parseType="Collection">
<owl:Thing rdf:about="#PC"/>
<owl:Thing rdf:about="#Playstation"/>
<owl:Thing rdf:about="#Xbox"/>
<owl:Thing rdf:about="#Nintendo"/>
</owl:oneOf>
</owl:Class>
<owl:Class rdf:ID="Platform">
<rdfs:label>Platform</rdfs:label>
<owl:Restriction>
<owl:someValuesFrom rdf:resource="#Platforms"/>
</owl:Restriction>
</owl:Class>
打开/阅读本体的Java代码是:
try
{
// open input file stream
InputStream in = FileManager.get().open(inputFile);
// create a new model, then read the OWL file into it
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF, null);
model.read(inputFile);
}
catch (Exception e)
{
System.err.println(e);
}
其他信息: 我正在使用Jena 2.10.0(最新版)和Eclipse。
答案 0 :(得分:1)
我不能立即确定这是否是您所看到的解析错误的原因,但是您的限制有点缺失:它说明了它的限制(即类Platforms
中的某些值) ,但它没有说明什么财产受到限制。
你需要这样的东西:
<owl:Restriction>
<owl:onProperty rdf:resource="#platformType" />
<owl:someValuesFrom rdf:resource="#Platforms"/>
</owl:Restriction>
此外,限制不能立即成为owl:Class
元素的一部分。您需要rdfS:subClassOf
元素或其周围的owl:equivalentClass
元素。
另外,提示:不要手动编写RDF / XML语法中的本体。使用诸如Protege或TopBraid之类的本体编辑器,或者切换到不同的,更容易阅读/编辑的语法,例如Turtle。相信我,如果你这样做,事情会变得容易多了。
例如,Turtle语法中的(更正的)本体读取:
:Platforms a owl:Class ;
owl:oneOf ( :PC :PlayStation :Xbox :Nintendo ) .
:Platform a owl:Class ;
rdfs:label "Platform";
rdfs:subClassOf [ a owl:Restriction ;
owl:onProperty :platformType ;
owl:someValuesFrom :Platforms ] .