1

如何指定 object 类型的属性只能出现 1 次(我认为这是默认设置)、N 次或任何时间?甚至根本没有。

问题是,在“对象”类型的属性的情况下,如何将标准 UML 组合基数信息(min..max)转换为 JSON Schema?

"A" : {
   "type" : "object",
   "properties" : {
             "B" :  {
                     "type" : "object"
             },
    },
 }

基于这个模式,A 可能只包含一个 B,但是我需要能够指定: - 如果它可能不包含 - 它可能包含更多 (n) - 它可能包含任何

谢谢:恩德

4

2 回答 2

2

如果您想在 JSon 中显示元定义信息,一个自然的解决方案是添加“MultiplicityElement”和“AggregationKind”属性(如在 UML 元模型中):

{
    "A": {
        "type": "object",
        "properties": [
            {
                "B": {
                    "type": "object",
                    "AggregationKind": "composite",
                    "MultiplicityElement": {
                        "lower": 0,
                        "upper": "n"
                    }
                }
            }
        ]
    }
}

在这种情况下,您可能希望使用“类”而不是“对象”,因为您实际上定义了您的类结构。AggregationKind 的替代值是“shared”(用于聚合)或“none”。

请注意,我将“属性”放在 [] 括号中,表示可以添加更多属性。

更新(在第一条评论之后)

首先 - JSON 是完全有效的。看看这个网站: http: //jsonlint.com/我没有时间调查你提出的那个错误的原因,我怀疑它与模式有关。

更重要的是-在这里要小心,我认为您将元模型与模型信息混合在一起。我在最初的回答中怀疑这一点,现在你几乎证实了这一点。

问题是您打算显示类模型的描述(元模型级别)还是对象模型的描述(模型级别)。

  • 如果这是一个类模型描述:将类型更改为“类”并且每个类只描述一次
  • 如果这是一个对象模型:添加标签“class”表示基类,使用“values”而不是“properties”,使用“property”而不是“type”来表示相应的属性,删除AggregationKind和MultiplicityElement。

或者澄清你的意图:)

于 2014-04-18T10:24:32.540 回答
1

架构:

{
  "type" : "object",
  "properties" : {
    "A" :  {
      "type" : "object",
      "properties" : {
        "B" : {
          "type" : "array",
          "minItems" : 1,
          "maxItems" : 2
        }
      },
      "required" : [ "B" ]
    }
  }
}

有效实例:

{
  "A": {
    "B" : [ 1 ]
  }
}

另一个有效实例:

{
  "A": {
    "B" : [ 1, 2 ]
  }
}

无效实例:

{
  "A": {
  }
}

另一个无效实例:

{
  "A": {
    "B" : []
  }
}

另一个无效的实例:

{
  "A": {
    "B" : [ 1, 2, 3]
  }
}
于 2014-09-26T14:49:53.923 回答