RDF避免使用rdfs:subClassOf

时间:2010-07-01 15:25:34

标签: rdf sesame

我有以下RDF:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:ppl="http://www.blah.com/people#">

    <rdfs:Class rdf:ID="Person">
        <ppl:Name/>
        <ppl:LastName/>
    </rdfs:Class>

    <rdfs:Class rdf:ID="John">
        <rdfs:subClassOf rdf:resource="#Person"/>
        <ppl:name>John</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdfs:Class>
</rdf:RDF>

这看起来很好,但我想避免做一个subClassOf John的可能性。 例如,这应该不起作用:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:ppl="http://www.blah.com/people2#">

    <rdfs:Class rdf:ID="Person">
        <ppl:Name/>
        <ppl:LastName/>
    </rdfs:Class>

    <rdfs:Class rdf:ID="John">
        <rdfs:subClassOf rdf:resource="#Person"/>
        <ppl:name>John</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdfs:Class>

    <rdfs:Class rdf:ID="Peter">
        <rdfs:subClassOf rdf:resource="#John"/>
        <ppl:name>Peter</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdfs:Class>
</rdf:RDF>

我如何添加该限制?

编辑:

cygri's answer之后我尝试了另一种方法:

<rdf:Description ID="John">
    <rdf:type rdf:resource="#Person"/>
    <ppl:name>John</ppl:name>
    <ppl:LastName>Smith</ppl:LastName>
</rdf:Description>

<rdf:Description ID="Peter">
    <rdf:type rdf:resource="#John"/>
    <ppl:name>Peter</ppl:name>
    <ppl:LastName>Smith</ppl:LastName>
</rdf:Description>

但这仍然有效:(

2 个答案:

答案 0 :(得分:3)

不确定你要做什么。你的造型对我来说很奇怪,约翰为什么要上课? John应该是Person类型的个人。 (而且你不能拥有个体的子类,所以将约翰变成一个人就会回答你关于防止子类化的问题。)

更新: RDF本身不会阻止您说出荒谬的事情。因此,即使是无意义的,您仍然可以解析,序列化和查询数据。但您可以使用OWL一致性检查器来验证您的本体。在这种特殊情况下,您必须检查本体是否在OWL DL中。 (OWL DL是OWL的变体,它引入了个人不能拥有子类的限制,除其他外。在OWL Full中,这是允许的,除非你添加一个Class类与之不相交的约束。 Person上课。

答案 1 :(得分:3)

你仍然把约翰视为一个阶级。你想要这样的东西:

<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:ppl="http://www.blah.com/people#">

    <rdfs:Class rdf:ID="Person" />

    <rdf:Description rdf:ID="John">
        <rdf:type rdf:resource="#Person"/>
        <ppl:name>John</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdf:Description>

</rdf:RDF>

rdfs:subClassOf和rdf:type是不同类型的关系。

rdfs:subClassOf可用于说明所有人都是哺乳动物,所有哺乳动物都是动物。

rdf:type用于说明,约翰是一个人(约翰是哺乳动物和动物)。

对于它的价值,semanticoverflow.com也是询问RDF相关问题的好地方。