我有以下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>
但这仍然有效:(
答案 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相关问题的好地方。