Я проверил много словарей здесь: https://github.com/ruby-rdf/rdf-vocab/ и на разных страницах и узнал больше о OWL на сайтах W3 C. Оказалось, что мы можем использовать примитивы XSD, как и классы RDF. Типичное использование:
по свойствам
Y rdf:type rdfs:Class
x rdf:type rdfs:Property
x rdfs:range xsd:integer
x rdfs:domain Y
y rdf:type Y
y x 12
по переменным
x rdf:type xsd:integer
x rdf:value 12
Чтобы сначала ограничить целое число диапазоном 0-100, нам нужно определить ограничение. Это сложно, потому что мы также должны определить диапазон:
r rdf:type owl:Restriction
r owl:allValuesFrom s
s rdf:type owl:DataRange
s rdf:onDataRange xsd:integer
s xsd:minInclusive 0
s xsd:maxInclusive 100
Если мы хотим применить ограничение к нашей собственности, нам нужно сделать следующее
x rdf:type owl:DatatypeProperty
r owl:onProperty x
r owl:onClass Y
Если мы хотим применить его к нашей переменной, которая является другой строкой. Я не совсем уверен в этом, но я думаю, что мы можем определить пользовательский тип ограниченного примитива следующим образом:
xsd:integer rdf:type rdfs:Datatype
X rdf:type rdfs:Datatype
X rdfs:subClassOf xsd:integer
r owl:onDatatype X
После того, как у нас есть новый тип, мы просто используем его для переменной:
x rdf:type X
x rdf:value 12
Если это так, мы можем использовать тот же подход для свойства:
Y rdf:type rdfs:Class
x rdf:type rdfs:Property
x rdfs:range X
x rdfs:domain Y
y rdf:type Y
y x 12