将JSON模式中的数组映射到OWL

将JSON模式中的数组映射到OWL,json,mapping,owl,jsonschema,ontology,Json,Mapping,Owl,Jsonschema,Ontology,我试图将JSON模式中定义的数组映射到OWL2 这是JSON模式的一个简单示例: { "properties": { "nm_prop": { "type": "array", "items": {"type": "number"} } } } :nm_prop subPropertyOf owl:topObjectProperty :nm_prop rdfs:domain :JS_id :nm_prop rdfs:ra

我试图将JSON模式中定义的数组映射到OWL2

这是JSON模式的一个简单示例:

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

  } 
}
:nm_prop subPropertyOf owl:topObjectProperty
:nm_prop rdfs:domain :JS_id
:nm_prop rdfs:range OntoDT:OntoDT_110287
这是由上述JSON模式生成的OWL代码:

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

  } 
}
:nm_prop subPropertyOf owl:topObjectProperty
:nm_prop rdfs:domain :JS_id
:nm_prop rdfs:range 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中的数组定义

  • 数组_integer有一个限制:它只接受整数

  • nm_prop是模式中的数组atribute


还有一个新问题:这样写对了吗?它是否等同于示例中的JSON模式?

有多种方法可以在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”是定义数组、ArrayElement和其他属性类的词汇表

然后,您可以定义(为了清晰起见,切换到曼彻斯特语法):

并将数组断言为此类型

您可以添加其他公理,声明my:value和my:index是函数式的

但这里值得停下来问问你更广泛的目标是什么。OWL不是一种表示和推理计算数据结构的好语言。首先,OWL提出了开放世界假设,并用于推理数据结构(例如,出于验证目的)您通常需要封闭世界的假设。但是,在某些情况下,这可能与您的用例相符,例如,如果您想对程序或数据结构的不完整信息进行推理。但即使如此,可能还有其他更适合的逻辑分支

通常情况下,当在计算机程序中将某个对象建模为数组时,OWL中有一个更自然的非数组表示。例如,如果我们想表示一个跑步者列表,该列表按其在比赛中的终点位置排序,则更自然的做法是为每个跑步者建模比赛终点事件,以及定时,并在查询时派生数组


我不知道您的确切用例,但希望这与您相关。

您好。根据您的评论,我在问题文本中进行了扩展。也许这可以解决我的问题。