В OWL (и RDF) сложно представлять последовательности, это больше о неупорядоченных наборах вещей. Лучший способ сделать это, я нахожу, - назначить число через свойство, затем отслеживать этот индекс и использовать его для перебора по мере необходимости.
Совиная онтология, представляющее то, что вы хотите, чтобы захватить может быть как то (с использованием синтаксис Манчестера - вы можете сохранить как .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
. Вы должны сами позаботиться об обновлении номера.
Я думаю, вы имеете в виду EquivalentClass not SubClassOf? –
Вот как я и http://purl.org/ontology/po/ реализует это –
Оба варианта приемлемы, это зависит от того, что вы хотите захватить. Здесь это осторожное моделирование, сильное утверждение ('subClassOf'), но оно будет работать и с эквивалентным классом (более сильные последствия, если вы классифицируете онтологию). – loopasam