使用JSONIX从XML架构创建空对象

Create empty object from XML schema using JSONIX

本文关键字:创建 对象 JSONIX XML 使用      更新时间:2023-09-26

是否可以用JSONIX从XML模式生成一个空对象?我通常在创建适合XML模式的新JS对象时遇到问题。因此,这将非常有帮助。任何例子都将不胜感激。我尝试了以下操作来创建一个新对象。在这种情况下,NodeType是一个复杂的类型名称。

{name: {localpart: nodeType}, value:{}};

然后我尝试填充值(我遍历模式映射,找出每种类型的所有可能属性)。然而,我得到了以下错误,这对我没有太大帮助:Element[ELEMNAME]在这种情况下是未知的

如果这不可能,我通常如何创建一个应该符合模式的新对象?

非常感谢你的想法!

编辑:好的,在这里更具体地说一个例子:

"NodeType":{
        "type":"object",
        "title":"NodeType",
        "properties":{
            "id":{
                "title":"id",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"id",
                    "namespaceURI":""
                }
            },
            "x":{
                "title":"x",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/decimal"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"x",
                    "namespaceURI":""
                }
            },
            "y":{
                "title":"y",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/decimal"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"y",
                    "namespaceURI":""
                }
            }

这是我的XSD文件中的一个JSON模式摘录。我想要的是一个看起来像这样的对象:

{id:"", x: "", y: ""}

目标是将该对象编组为XML。

免责声明:我是Jsonix的作者。

如果我答对了你的问题,你会问,你怎么能构建一个JS对象,然后用Jsonix进行编组。

大多数人所做的技巧是获取一个XML"这就是它应该看起来的样子",对它和日志JSON.stringify(myObject, null 2)进行解组,诸如此类。然后您将看到合适的JS应该是什么样子。

您还可以从XML模式中生成一个JSON模式。这将为您提供一个类似于此的JSON模式,提供编组所需的JSON的完整描述。

我也考虑实现一些类似TypeScript类的生成,但这是未来的音乐。

更新

很抱歉,我仍然不太确定你的问题是什么。你添加了一个JSON Schema,它定义了一个具有字符串id和十进制xy属性的NodeType复杂类型。

你在问这个类型的空对象是什么。好吧,你的复杂类型的一个空对象就是{}
具有值的对象将是例如{id:"someId", x: 4, y:2}

但在XML中,不能仅封送一个复杂类型,而是封送复杂类型的元素。其以CCD_ 8的形式表示。所以你可能会有这样的东西:

{
  "name": {
    "namespaceURI": "uri",
    "localPart": "root"
  },
  "value": {
    "id" : "someId",
    "x" : 4,
    "y" : 2,
    "TYPE_NAME": "NodeType"
  }
}

希望这能有所帮助。

为了进一步澄清这个问题:Javascript是一种松散类型的语言。即使JS类具有原型结构,JS对象也只有在其成员中填充了值时才具有该结构。因此,Jsonix从XSD生成JS映射,然后JS脚本从映射实例化一个新的JS对象,并不会创建一个未填充的结构。只有当对象填充了值时,才会创建结构。这种填充可以直接在代码中完成,方法是为新对象分配值,向下钻取包含成员的树,在将该成员添加到复杂的整体JS对象后填充每个成员,程序员使用XSD或其文档作为指导。或者,复杂的整体JS对象可以由一个JSON块填充,在这种情况下,JSON可以从Jsonix解组的复杂对象的XML生成。Jsonix可以执行解组(以及任何封送处理)。底线是,必须向使用Jsonix实现其功能的代码提供要取消/封送的复杂对象的现有XML,或隐式结构中的逐行分配。这与Java(例如JAXB)不同,在Java中,XSD可以用于生成一个新的复杂对象,该对象的所有结构都由Java程序填充(通过树中的赋值或从XML中解组)。