我在做一個描述編程語言的Ontology,但我遇到了以下問題:一種語言可能有強或弱的輸入,我需要將我的模式限制爲這兩個選項。那麼,我該怎麼做?rdf:property有限的選擇
這裏是我的架構的一個示例:
:Language a rdfs:Class .
:typing a rdf:Propery ;
rdfs:domain :Language ;
rdfs:range ? .
在此先感謝。
我在做一個描述編程語言的Ontology,但我遇到了以下問題:一種語言可能有強或弱的輸入,我需要將我的模式限制爲這兩個選項。那麼,我該怎麼做?rdf:property有限的選擇
這裏是我的架構的一個示例:
:Language a rdfs:Class .
:typing a rdf:Propery ;
rdfs:domain :Language ;
rdfs:range ? .
在此先感謝。
我不同意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)
].
枚舉類的擴展(允許值集)恰好是給定的個體集合。沒有其他人被允許。
我認爲一個解決方案可以是定義一個「功能屬性」,這是一個屬性,將範圍限制爲一個類的成員(例如:一個人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>
(然後類型,將有子類:強和弱)。
希望這會有所幫助。
非常感謝,我閱讀了關於owl:OWL的文檔,看起來正是我需要的......一個問題:你是來自巴西嗎? –
這不是'owl:FunctionalProperty'的正確用法。看到我的替代答案。 –
你好伊恩...很好的答案,我會更加關注w3c文檔,但是,你說得對,我需要這些限制,比如貓頭鷹:oneOf可以。謝謝! –
嗨伊恩,我看到使用貓頭鷹的一點:oneOf。然而,我仍然很難看到使用FunctionalProperty的問題,因爲每種語言只有一種類型(假設這是一個嚴格的要求)。根據規範:「對於每個實例x只能有一個(唯一)值y的屬性,即不能有兩個不同的值y1和y2,使得對(x,y1)和(x,y2)都是這個屬性的實例。「我的問題是我們何時可以使用功能屬性呢? (另外,我們可以授予owl:oneOf沒有爲同一個人指定兩次嗎?) – emgsilva
這取決於你想要做什麼。當我讀到OP的問題時,他希望能夠模擬'test:typing'的範圍包含一組固定的不同標識符,而不包含其他標識符。聲明財產功能可能是有用的,也是一個好主意,但並不能解決這些問題。 –