1

我对学习语义网还很陌生,所以为了方便学习,我选择写一个关于我相当熟悉的东西的本体,视频游戏。

所以我想我开始有点理解这一点,但仍然存在一些问题。我的一般想法是基本上有 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。

4

1 回答 1

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 ] .
于 2013-05-05T02:00:16.000 回答