2

我正在从我的 OWL 本体构建一个程序集,但是在解析本体时,它会在声明类型并给出一些值的“数据类型属性”处引发错误消息。我已经使用 Protege v3.4 编写了我的本体。

例如,引发错误的数据类型属性之一是“语言”,其类型为“字符串”,值如“英语和波斯语”。参考文献如下,由 protege 提供:

<rdf:RDF xml:base="http://www.owl-ontologies.com/Ontology1243411901.owl"
xmlns="http://www.owl-ontologies.com/Ontology1243411901.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#">

下面提到了“语言”属性:

<owl:DatatypeProperty rdf:ID="language">
        <rdfs:range>
            <owl:DataRange>
                <owl:oneOf rdf:parseType="Resource">
                    <rdf:rest rdf:parseType="Resource">
                        <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
                        <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Farsi</rdf:first>
                    </rdf:rest>
                    <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string">English</rdf:first>
                </owl:oneOf>
            </owl:DataRange>
        </rdfs:range>
        <rdfs:domain>
            <owl:Class>
                <owl:unionOf rdf:parseType="Collection">
                    <owl:Class rdf:about="#Teacher"/>
                    <owl:Class rdf:about="#ClassOfCourse"/>
                    <owl:Class rdf:about="#LearningResource"/>
                    <owl:Class rdf:about="#Discussion"/>
                    <owl:Class rdf:about="#Student"/>
                </owl:unionOf>
            </owl:Class>
        </rdfs:domain>
    </owl:DatatypeProperty>

我只是向 OWLGrinder 添加了一个本体。生成时出现此错误:

Assembly generation failed. 
OWL property 'http://www.owl-ontologies.com/Ontology1243411901.owl#language' has a range declaration that points to _:bnode10579059 but its definition is missing. 
Are you missing an ontology which declares this class?

每次按下“生成”按钮时,“_:bnode”前面的数字都会发生变化。通过从“语言”属性中删除值,会发生与下一个 DataType 属性相关的另一个错误。这意味着定义的每个 DataType 属性(并为其指定了一些值)在 OWLGrinder 中出错。

我想知道是否有人可以指导我处理这个错误。

4

4 回答 4

2

我不熟悉 OWLGrinder,但您可以尝试声明一个命名类,例如ExpectedLanguages(给您的匿名节点一个 URI),然后将其用作language谓词的范围。一个简略的例子(Turtle格式):

:ExpectedLanguages
    a owl:DataRange ;
    owl:oneOf (
        "Farsi"^^xsd:string
        "English"^^xsd:string
    );
.

:languages
    rdfs:range :ExpectedLanguages ;
.

您使用OWL 枚举数据类型要求您的代码/解析器/推理器至少符合 OWL-DL。

_:bnodeXXX(空白节点/匿名节点)每次都有新ID的原因是因为它是空白的。但是,为了在内存中的 RDF 图(模型)中识别它,需要在加载每个匿名节点时为其生成一个 ID,以便在分析模型时可以唯一地识别每个节点(匿名或命名)因此可以识别其传入和传出引用。

于 2009-06-01T05:52:16.817 回答
1

目前ROWLEX OwlGrinder 期望范围是文字或常规类。我建议创建一个“LanguageList”包装类,其中包含您的枚举,并将其分配为一个范围。我没有对此进行测试,但我确实希望它能够工作。

于 2009-06-01T07:06:12.987 回答
1

Intellidimension提供了一个可以将 OWL-Lite、OWL-Full 或 OWL-DL 转换为 .NET 类的 SDK。你可能想看看那个。

旁注
我认为您在本体中混淆了域的语义。看来您是在说“语言可能只存在于教师、课程、学习资源、讨论、学生上”,而实际上您是在说“如果语言用于描述一个实例,则该实例可以被推断为教师联盟、ClassOfCourse、LearningResource、讨论和学生。”。这是对 OWL 语义的常见误解,因为感觉域应该限制属性的使用,而实际上这不是 OWL 的功能(模式/验证)。OWL 仅用于描述应由用法推断的内容,它不规定用法。

OWL 指南中描述的域语义。

通过在语言属性的域中使用 UnionOf,您是在说“使用语言属性描述的任何内容都是教师、课程类别、学习资源、讨论或学生”。我认为这通常没有意义。

OWL 指南中描述的 UnionOf 语义。

Range 的相似之处在于,如果您将属性的范围定义为特定类型,则可以推断该属性引用的所有文字/资源都是使用范围声明定义的类型。

OWL 指南中描述的范围。

于 2009-07-22T10:25:45.253 回答
0

我已经在http://www.mygrid.org.uk/OWL/Validator复制/粘贴了你的本体:它说这个本体(至少)不是 OWL-lite 本体。这可能是您的 Protege 配置的问题?

于 2009-05-29T21:15:00.027 回答