【问题标题】:Create empty object from XML schema using JSONIX使用 JSONIX 从 XML 模式创建空对象
【发布时间】:2015-06-28 16:01:10
【问题描述】:

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

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

然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到例如以下错误对我没有多大帮助: Element [ELEMNAME] is not known in this context

如果这是不可能的,我一般如何创建一个应该符合架构的新对象?

非常感谢您的任何想法!

编辑: 好的,这里举个例子:

"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。

【问题讨论】:

    标签: javascript json xml jsonix


    【解决方案1】:

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

    如果我的问题是正确的,那么你会问,你如何构造一个可以用 Jsonix 编组的 JS 对象。

    大多数人使用的技巧是获取一个“这就是它应该看起来的样子”的 XML,解组它和日志 JSON.stringify(myObject, null 2),类似的东西。然后你会看到合适的 JS 应该是什么样子。

    您还可以发送邮件至generate an JSON Schema out of your XML Schema。这将为您提供像 this one 这样的 JSON Schema,提供编组所需的 JSON 的完整描述。

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

    更新

    对不起,我还是不太清楚你的问题是什么。您添加了一个 JSON Schema,它定义了一个带有字符串 id 和十进制 x 和 y 属性的 NodeType 复杂类型。

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

    但在 XML 中,您不能编组 只是 一个复杂类型,而是编组 一个复杂类型的元素。它以{ name: ..., value: ... } 的形式表示。所以你可能会有类似的东西:

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

    希望这会有所帮助。

    【讨论】:

    • 非常感谢您的支持!这是否意味着我必须为每个复杂类型创建一个空的 XML 对象?我将尝试这两种方法,事实上我已经生成了一个 JSON 模式。但是我不知道如何自动从中创建一个空对象,因为我有一个包含多个文件的非常大的模式。
    • @mapf 现在我不太清楚“空 XML 对象”是什么意思,以及为什么必须为每个复杂类型创建它。 {} 是一个空对象。如果您只需要了解 JSON 的外观,请解组或读取生成的 JSON Schema 或 Jsonix 映射。使用 TypeScript,您可以在 IDE 中自动完成,但那是未来的音乐。如果您需要更详尽的解释,请咨询here。
    • 我在开始的帖子中添加了一个示例。也许现在它更清楚了。
    • @mapf 抱歉,不多。但我已尝试提供更多信息,请参阅我的更新。
    • 非常感谢,您的更新帮助了我!我不知道我需要照顾的结构!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-18
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多