2013-03-29 62 views

回答

0

OWL(和RDF)很難表示序列,它更多的是關於無序集合的東西。我發現最好的方法是通過屬性分配一個數字,然後跟蹤這個索引並在需要時使用它來迭代。

代表你想要的拍攝也可以成爲這樣的OWL本體(採用曼徹斯特語法 - 你可以保存爲.owl文件,並與Protege開放 - #是註釋):

Prefix: xsd: <http://www.w3.org/2001/XMLSchema#> 
Prefix: owl: <http://www.w3.org/2002/07/owl#> 
Prefix: : <brain#> 
Prefix: xml: <http://www.w3.org/XML/1998/namespace> 
Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
Prefix: dc: <http://purl.org/dc/elements/1.1/> 
Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
Ontology: <brain.owl> 

Datatype: xsd:int 

ObjectProperty: has 
    Characteristics: 
    Transitive 

# Property used to save the number in the sequence 
DataProperty: episode-number 
    Range: 
    xsd:int 

# Definition of a program: A program as at least a series 
Class: Program 
    SubClassOf: 
    has some Series 

Class: owl:Thing 

# Definition of series: A series as at least one episode 
Class: Series 
    SubClassOf: 
    has some Episode 

Class: Episode 

# Instance of episode 
Individual: episode1 
    Types: 
    Episode 

    # Episode number 
    Facts: 
    episode-number "1"^^xsd:int 

# Second instance of episode 
Individual: episode2 
    Types: 
    Episode 

Facts: 
episode-number "2"^^xsd:int 

比方說,然後你想迭代劇集實例。這可以通過OWL查詢Episode and episode-number value 1來實現。你必須照顧自己更新號碼。

+0

我想你的意思是EquivalentClass而不是SubClassOf? –

+0

這就是我和http://purl.org/ontology/po/實現這個 –

+0

這兩個選項都是可以接受的,它取決於你想要捕獲的東西。在這裏,它是謹慎的建模,沒有強大的斷言('subClassOf'),但也可以與'equivalentClass'一起工作(在對本體進行分類時會產生更強烈的後果)。 – loopasam

0

如何在OWL中聲明屬性必須具有一組有序的 值?例如:一個程序必須有一個rdf:Seq of Series,而一個 Series必須有一個rdf:Seq of Episodes?

如果您使用的是OWL(DL),那麼您不應該真的在使用RDF集合。 loopasam's answer是很好的,如果你可以通過關係來定義和包含位置編號,但是你也可以在OWL中聲明自己的列表結構,類似於RDF列表(這只是單向鏈表的RDF編碼)。因此,你可以有

:series hasEpisodeList [ ex:first :episodeA ; 
         ex:rest [ ex:first :episodeB ; 
            ex:rest [ :episodeC ; 
              ex:rest ex:nil ] ] ] . 

缺點這種方法,雖然是數量的信息僅僅是隱含的,這是很難用DL查詢重建(雖然它不是太難使用SPARQL)。這兩種表示序列的方法都在Ordering of entities in an ontology以及鏈接的其他問題和答案中有更詳細的描述。

相關問題