使用 JSONIX 从 XML 模式创建空对象
Create empty object from XML schema using JSONIX
是否可以通过 JSONIX 从 XML 模式生成空对象?我通常在创建适合 XML 模式的新 JS 对象时遇到问题。因此,这将非常有帮助。任何例子将不胜感激。
我尝试了以下方法来创建一个新对象。在这种情况下,NodeType 是一个复杂的类型名称。
{name: {localpart: nodeType}, value:{}};
然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到例如以下错误对我帮助不大:元素 [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的作者。
如果我答对了你的问题,你是在问,那么你如何构建一个可以用 Jsonix 编组的 JS 对象。
大多数人使用的技巧是获取 XML "this is how it should look like",解组它和日志 JSON.stringify(myObject, null 2)
,诸如此类。然后你会看到合适的JS应该是什么样子。
您还可以 generate an JSON Schema out of your XML Schema. This will get you a JSON Schema like this one,提供编组所需 JSON 的完整描述。
我也考虑实现类似 TypeScript 的生成 类,但那是未来的音乐。
更新
对不起,我还是不太清楚你的问题是什么。您已经添加了一个 JSON 架构,它定义了一个 NodeType
复杂类型,具有字符串 id
和小数 x
和 y
属性。
你问的是什么是空对象。那么,您的复杂类型的空对象就是 {}
.
例如,具有值的对象是 {id:"someId", x: 4, y:2}
.
但在 XML 中,您不能编组 只是 一个复杂类型,您编组 一个复杂类型的元素 。它以 { name: ..., value: ... }
的形式表示。所以你可能会有这样的东西:
{
"name": {
"namespaceURI": "uri",
"localPart": "root"
},
"value": {
"id" : "someId",
"x" : 4,
"y" : 2,
"TYPE_NAME": "NodeType"
}
}
希望这对您有所帮助。
进一步澄清这个问题:Javascript 是一种松散类型的语言。尽管 JS class 具有原型结构,但 JS 对象只有在其成员填充值时才具有该结构。因此 Jsonix 从 XSD 生成 JS 映射,然后 JS 脚本从映射实例化一个新的 JS 对象不会创建未填充的结构。只有当对象填充了值时,才会创建结构。该填充可以直接在代码中完成,方法是为新对象赋值,在该成员添加到复杂的整体 JS 对象后,向下钻取其包含的成员树并填充每个成员,程序员使用 XSD 或其文档作为指南。或者复杂的整体 JS 对象可以由 JSON 块填充,在这种情况下,JSON 可以从 Jsonix 解组的复杂对象的 XML 生成。解组(和任何编组)可以由 Jsonix 执行。底线是复杂对象的现有 XML 是 un/marshaled,或者隐式结构中的逐行赋值必须提供给使用 Jsonix 实现其功能的代码。它不像 Java(例如 JAXB),其中 XSD 可用于生成一个新的复杂对象及其所有结构,然后由 Java 程序填充(通过分配在树或从 XML).
解组
是否可以通过 JSONIX 从 XML 模式生成空对象?我通常在创建适合 XML 模式的新 JS 对象时遇到问题。因此,这将非常有帮助。任何例子将不胜感激。 我尝试了以下方法来创建一个新对象。在这种情况下,NodeType 是一个复杂的类型名称。
{name: {localpart: nodeType}, value:{}};
然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到例如以下错误对我帮助不大:元素 [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的作者。
如果我答对了你的问题,你是在问,那么你如何构建一个可以用 Jsonix 编组的 JS 对象。
大多数人使用的技巧是获取 XML "this is how it should look like",解组它和日志 JSON.stringify(myObject, null 2)
,诸如此类。然后你会看到合适的JS应该是什么样子。
您还可以 generate an JSON Schema out of your XML Schema. This will get you a JSON Schema like this one,提供编组所需 JSON 的完整描述。
我也考虑实现类似 TypeScript 的生成 类,但那是未来的音乐。
更新
对不起,我还是不太清楚你的问题是什么。您已经添加了一个 JSON 架构,它定义了一个 NodeType
复杂类型,具有字符串 id
和小数 x
和 y
属性。
你问的是什么是空对象。那么,您的复杂类型的空对象就是 {}
.
例如,具有值的对象是 {id:"someId", x: 4, y:2}
.
但在 XML 中,您不能编组 只是 一个复杂类型,您编组 一个复杂类型的元素 。它以 { name: ..., value: ... }
的形式表示。所以你可能会有这样的东西:
{
"name": {
"namespaceURI": "uri",
"localPart": "root"
},
"value": {
"id" : "someId",
"x" : 4,
"y" : 2,
"TYPE_NAME": "NodeType"
}
}
希望这对您有所帮助。
进一步澄清这个问题:Javascript 是一种松散类型的语言。尽管 JS class 具有原型结构,但 JS 对象只有在其成员填充值时才具有该结构。因此 Jsonix 从 XSD 生成 JS 映射,然后 JS 脚本从映射实例化一个新的 JS 对象不会创建未填充的结构。只有当对象填充了值时,才会创建结构。该填充可以直接在代码中完成,方法是为新对象赋值,在该成员添加到复杂的整体 JS 对象后,向下钻取其包含的成员树并填充每个成员,程序员使用 XSD 或其文档作为指南。或者复杂的整体 JS 对象可以由 JSON 块填充,在这种情况下,JSON 可以从 Jsonix 解组的复杂对象的 XML 生成。解组(和任何编组)可以由 Jsonix 执行。底线是复杂对象的现有 XML 是 un/marshaled,或者隐式结构中的逐行赋值必须提供给使用 Jsonix 实现其功能的代码。它不像 Java(例如 JAXB),其中 XSD 可用于生成一个新的复杂对象及其所有结构,然后由 Java 程序填充(通过分配在树或从 XML).
解组