Сопоставление массива в схеме JSON с OWL - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь сопоставить массив, определенный в схеме JSON, с OWL 2.

Это простой пример схемы JSON:

{
  "properties": {
    "nm_prop": { 
          "type": "array",
          "items": {"type": "number"} 
    } 

  } 
}

И это код OWL, полученный изСхема JSON выше:

:nm_prop subPropertyOf owl:topObjectProperty
:nm_prop rdfs:domain :JS_id
:nm_prop rdfs:range OntoDT:OntoDT_110287

OntoDT: OntoDT_110287 - это онтология, определяющая массив.

Проблема заключается в том, как определить в OWL, что элементы массивабудет иметь определенный тип данных (например, xsd: string или xsd: integer) ??


Основываясь на ответе cmungall, я предложил новое определение для примера схемы JSON выше.

Моя цель - отобразить схемы JSON в OWL для последующего использования в приложении интеграции данных.

Используя пример схемы JSON исходного вопроса и объяснения cmungall, возможное представление схемы в OWL будет следующим:

:JS_id rdf:type owl:Class .

:array_integer rdfs:subClassOf OntoDT:OntoDT_110287 ,
  [ rdf:type owl:Restriction ;
    owl:onProperty OntoDT:OntoDT_0000405 ;
    owl:allValuesFrom  xsd:integer ] .

:nm_prop rdfs:subPropertyOf owl:topObjectProperty ;
         rdfs:domain :JS_id ;
         rdfs:range :array_integer .

Где:

  • : JS_id - основной класс;

  • array_integer - это определение типа данных массива, расширяющего определенный массивИон в OntoDT;

  • array_integer имеет ограничение: он принимает только целые числа;

  • nm_prop является ли атрибут массива в схеме.

И новый вопрос: правильна ли эта запись и будет ли она эквивалентна схеме JSON в примере?

1 Ответ

0 голосов
/ 15 октября 2019

Есть несколько способов сохранить массив в 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 есть более естественное представление без массива. Например, если мы хотим представить список бегунов, упорядоченных по их финишной позиции в гонке, было бы более естественно смоделировать событие окончания гонки для каждого бегуна вместе с хронометражем и вывести массив во время запроса.

Я не знаю вашего точного варианта использования, но, надеюсь, это относится к вам.

...