Есть несколько способов сохранить массив в OWL. Но предполагая, что вам явно нужна структура массива (в отличие от, скажем, связанного списка, как в rdf: list), например, формы:
[e_0,e_1,..,e_n]
, вы можете представить это как:
[] a my:Array ;
my:length n;
my:contains
[
a my:ArrayElement ;
my:index 0 ;
my:value e_0
],
[
a my:ArrayElement ;
my:index 1 ;
my:value e_1
],
...
[
a my:ArrayElement ;
my:index n ;
my:value e_n
] .
(Предполагая, что "my" - это словарь, определяющий классы для Array, ArrayElement и дополнительных свойств
Затем вы можете определить (переключаясь на манчестерский синтаксис для ясности):
ArrayOfInts EquivalentTo Array and my:contains only (my:value some integer)
ИУтвердите, что ваш массив относится к этому типу.
Вы можете добавить другие аксиомы, объявляющие my: value и my: index функциональными.
Но здесь стоит остановиться и спросить, каковы ваши более широкие целиOWL не является отличным языком для представления и рассуждения о вычислительных структурах данных. С одной стороны, OWL делает предположение об открытом мире, а для рассуждений о структурах данных (например, для целей проверки) обычно требуется предположение о замкнутом мире. могут быть обстоятельства, когда это согласуется с вашим вариантом использования, например, если вы хотите рассуждать о неполной информации опрограмма или структура данных. Но даже тогда могут существовать другие ветви логики, которые лучше подходят.
Часто бывает, что когда что-то моделируется в компьютерной программе как массив, в OWL есть более естественное представление без массива. Например, если мы хотим представить список бегунов, упорядоченных по их финишной позиции в гонке, было бы более естественно смоделировать событие окончания гонки для каждого бегуна вместе с хронометражем и вывести массив во время запроса.
Я не знаю вашего точного варианта использования, но, надеюсь, это относится к вам.