如何将UML组合基数映射到JSON模式?

时间:2014-04-17 19:10:16

标签: json jsonschema cardinality

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

问题是,如果属性为' object'?

,如何将标准UML组合基数信息(min..max)转换为JSON模式
"A" : {
   "type" : "object",
   "properties" : {
             "B" :  {
                     "type" : "object"
             },
    },
 }

基于此架构,A可能只包含一个B,但我需要能够指定: - 如果它可能不包含任何内容 - 它可能包含更多(n) - 它可能包含任何

感谢: 恩德雷

2 个答案:

答案 0 :(得分:2)

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

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

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

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

更新(第一次评论后)

首先 - JSon完全有效。在这个网站上采取行动:http://jsonlint.com/我没有时间调查你提出的错误的原因,我怀疑它与模式有关。

更重要的是 - 在这里要小心,我认为你将元模型与模型信息混合在一起。我在原来的答案中怀疑这一点,现在你几乎确认了。

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

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

或澄清你的意图:)

答案 1 :(得分: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]
  }
}