На данный момент ваше представление работает, но, на мой взгляд, оно немного запутано. Вы получаете данные экземпляра, такие как:
Chihuahua describedBy fluffiness72 .
fluffiness72 hasValue 4.
Как вы заметили, вместо этого вы могли бы иметь свойство типа данных hasFluffiness, но если вы не хотите этого делать, я думаю, вам лучше всего иметь класс Attribute, в котором есть такие вещи, как Пушистость, Размер, Удобство и т. д. – это примеры. Затем у вас может быть класс AttributeValue и свойства attribute и value (вероятно, вы можете придумать лучшие имена), чтобы вы могли записывать данные как это:
:chihuahua62 rdf:type :Chihuahua ;
:hasAttributeValue [ :attribute :Fluffiness ; :value 3 ] ;
:hasAttributeValue [ :attribute :Friendliness ; :value 2 ] .
С таким представлением вы можете сказать что-то вроде «каждый чихуахуа имеет уровень пушистости меньше 4»:
((hasAttributeValue-1.Чихуахуа) (=attribute.Fluffiness)) value.xsd:float[≤4.0]
((inverse(hasAttributeValue) некоторые чихуахуа) и (атрибут value Fluffiness)) SubClassOf strong> (значение только xsd:float[‹= 4.0])
На английском языке это означает, что каждое AttributeValue для чихуахуа, относящееся к атрибуту Fluffiness, должно иметь значение меньше 4,0.
Вы можете использовать альтернативное представление, которое гласит: «Если у чихуахуа есть значение атрибута, то если атрибут — Пушистость, тогда значение меньше 4,0». Это эквивалентно «если у чихуахуа есть значение атрибута, то либо этот атрибут не Пушистость, либо значение меньше 4,0»:
Чихуахуа hasAttributeValue.((=attribute.Fluffiness) (value.xsd:float[≤4.0]))
Это проще написать в редакторе онтологий, поскольку это аксиома подкласса интересующего вас класса.
Вот онтология, которая показывает оба подхода:
@prefix : <http://stackoverflow.com/q/24760392/1281433/dogProperties#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:Shagginess a owl:NamedIndividual , :Attribute .
:hasValue a owl:DatatypeProperty ;
rdfs:domain :_attVal .
[ a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:allValuesFrom [ a rdfs:Datatype ;
owl:onDatatype xsd:float ;
owl:withRestrictions ( [ xsd:minInclusive
10 ] )
] ;
owl:onProperty :hasValue
] ;
owl:intersectionOf ( [ a owl:Restriction ;
owl:onProperty [ owl:inverseOf :hasAttributeValue ] ;
owl:someValuesFrom :Newfoundland
] [ a owl:Restriction ;
owl:hasValue :Shagginess ;
owl:onProperty :hasAttribute
] )
] .
:Newfoundland a owl:Class ;
rdfs:subClassOf :Dog .
:Attribute a owl:Class .
:_attVal a owl:Class .
:hasAttribute a owl:ObjectProperty ;
rdfs:domain :_attVal ;
rdfs:range :Attribute .
:Chihuahua a owl:Class ;
rdfs:subClassOf :Dog ;
rdfs:subClassOf [ a owl:Restriction ;
owl:allValuesFrom [ a owl:Class ;
owl:unionOf ( [ a owl:Class ;
owl:complementOf [ a owl:Restriction ;
owl:hasValue :Shagginess ;
owl:onProperty :hasAttribute
]
] [ a owl:Restriction ;
owl:allValuesFrom [ a rdfs:Datatype ;
owl:onDatatype xsd:float ;
owl:withRestrictions ( [ xsd:maxInclusive
4 ] )
] ;
owl:onProperty :hasValue
] )
] ;
owl:onProperty :hasAttributeValue
] .
:hasAttributeValue a owl:ObjectProperty ;
rdfs:range :_attVal .
:Dog a owl:Class .
<http://stackoverflow.com/q/24760392/1281433/dogProperties>
a owl:Ontology .
person
Joshua Taylor
schedule
15.07.2014