我有以下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>

这看起来不错,但我想避免做约翰子群的可能性。例如,这不应有效:

<?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的答案 我尝试了另一种方法:

<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>

但这仍然有效:(

有帮助吗?

解决方案

不知道您要做什么。您的造型对我来说很奇怪,为什么约翰是一堂课?约翰应该是类型人的个人。 (而且您不能拥有个人的子类,因此将John更改为个人也可以回答您有关防止子类别的问题。)

更新: RDF因此并不能阻止您说荒谬的话。因此,即使是胡说八道,您仍然可以解析,序列化和查询数据。但是您可以使用猫头鹰一致性检查器来验证您的本体论。在这种特殊情况下,您必须检查本体学是否在OWL DL中。 (OWL DL是OWL的变体,它介绍了个人不能拥有子类的限制,除其他外,否则将允许使用,除非您添加一个约束 Class 课程与 Person 班级。

其他提示

您仍将约翰视为班级。您想要这样的东西:

<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:子类和RDF:类型是不同的关系。

RDFS:SubClassof对于说明所有人都是哺乳动物,所有哺乳动物都是动物。

RDF:类型用于说明约翰是一个人(约翰是哺乳动物和动物)。

就其价值而言,Semanticoverflow.com也是提出与RDF相关问题的好地方。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top