2010-07-01 83 views
0

我有以下RDF:RDF避免RDFS:subClassOf

<?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約翰的可能性。 舉例來說,這不應該工作:

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

但是,這仍然工作:(

回答

3

不知道你想做什麼你的造型看起來怪異。我爲什麼約翰是一個班級?約翰應該是一個Person類型的個人(並且你不能擁有個人的子類,所以把John改變成個人可以回答你關於防止子類化的問題。)

更新: RDF本身並不妨礙你說無意義的事情。所以即使它是無稽之談,你仍然可以解析,序列化和查詢你的數據。但是您可以使用OWL一致性檢查器來驗證您的本體。在這種特殊情況下,您必須檢查OWL DL中的本體。 (OWL DL是OWL的變體,它引入了限制,即個體不能擁有子類,除此之外,在OWL Full中,這是允許的,除非你添加了一個約束條件,Class類與Person類不相交。

+0

你能否提供xml片段讓John成爲個人? – Macarse 2010-07-02 12:01:40

+0

我剛剛用另一種方法編輯了我的問題,但仍然無法按預期工作。 – Macarse 2010-07-02 15:03:00

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:類型是不同種類的關係

的rdfs:subClassOf是有用的說明比如說,所有的人都是哺乳動物,而所有的哺乳動物都是動物,

rdf:type用於說明約翰是一個人(約翰是一個哺乳動物和動物)。

對於什麼值得,semanticoverflow.com也是一個問RDF相關問題的好地方。