2012-11-11 55 views
1

我在做一個描述編程語言的Ontology,但我遇到了以下問題:一種語言可能有強或弱的輸入,我需要將我的模式限制爲這兩個選項。那麼,我該怎麼做?rdf:property有限的選擇

這裏是我的架構的一個示例:

:Language a rdfs:Class . 

:typing a rdf:Propery ; 
    rdfs:domain :Language ; 
    rdfs:range ? . 

在此先感謝。

回答

4

我不同意Eduardo Silva發佈的答案。一個功能屬性的功能範圍內只能有一個。它可以多次使用,但OWL推理器可以從這些三元組中做出一些必要的事情。例如,如果你有一些個人example:x1和功能特性:p,你在你的數據可以看出:

example:x1 :p :foo . 
example:x1 :p :bar . 

,那麼你有權推斷:foo:bar必須是同一個人,因爲否則:p的功能性將被違反。或者,如果您通過其他方式知道:foo:bar是不同的個體,那麼,如果給出上述兩個額外的三元組,則OWL模型不一致。

換句話說,如果在某些資源上有test:typing這兩個值,那麼只要您需要表示的兩種類型方案實際上是相同的即可。這可能不是你想要的。此外,沒有什麼可以阻止在原始範圍說明中未提及的包含的值的三重商店。例如:

:ruby a test:Language ; 
    test:typing test:duckTyping. 

這是不test:typing爲官能屬性不一致。

要將屬性的範圍限制爲某個枚舉值的其中一個,您實際需要的是OWL enumerated class。例如:

test:typing 
    a owl:ObjectProperty ; 
    rdfs:domain test:Language ; 
    rdfs:range [ 
     owl:oneOf (test:strongTyping test:weakTyping) 
    ]. 

枚舉類的擴展(允許值集)恰好是給定的個體集合。沒有其他人被允許。

+0

你好伊恩...很好的答案,我會更加關注w3c文檔,但是,你說得對,我需要這些限制,比如貓頭鷹:oneOf可以。謝謝! –

+0

嗨伊恩,我看到使用貓頭鷹的一點:oneOf。然而,我仍然很難看到使用FunctionalProperty的問題,因爲每種語言只有一種類型(假設這是一個嚴格的要求)。根據規範:「對於每個實例x只能有一個(唯一)值y的屬性,即不能有兩個不同的值y1和y2,使得對(x,y1)和(x,y2)都是這個屬性的實例。「我的問題是我們何時可以使用功能屬性呢? (另外,我們可以授予owl:oneOf沒有爲同一個人指定兩次嗎?) – emgsilva

+0

這取決於你想要做什麼。當我讀到OP的問題時,他希望能夠模擬'test:typing'的範圍包含一組固定的不同標識符,而不包含其他標識符。聲明財產功能可能是有用的,也是一個好主意,但並不能解決這些問題。 –

0

我認爲一個解決方案可以是定義一個「功能屬性」,這是一個屬性,將範圍限制爲一個類的成員(例如:一個人hasGender性別,其中性別可以是女性或男性 - 只有一個)。

這貓頭鷹會是這個樣子(在門徒迅速作出):

<owl:ObjectProperty rdf:about="&test;typing"> 
    <rdf:type rdf:resource="&owl;FunctionalProperty"/> 
    <rdfs:domain rdf:resource="&test;Language"/> 
    <rdfs:range rdf:resource="&test;Type"/> 
</owl:ObjectProperty> 

(然後類型,將有子類:強和弱)。

希望這會有所幫助。

+0

非常感謝,我閱讀了關於owl:OWL的文檔,看起來正是我需要的......一個問題:你是來自巴西嗎? –

+2

這不是'owl:FunctionalProperty'的正確用法。看到我的替代答案。 –