【问题标题】:Looking for a data mapping format with inheritance寻找具有继承性的数据映射格式
【发布时间】:2012-06-22 09:30:31
【问题描述】:

现在,我有许多描述所有游戏对象的 XML 及其属性集。例如:

<gameObject id="commonEnemy">
    ...
    <data>
        <life>100</life>
        <speed>12</speed>
    </data>
    <tags>
        <tag>KILLABLE</tag>
        <tag>COLLIDABLE</tag>
    </tags>
    ...
</gameObject>

所有文件都有不同的“组件”(如上例中的数据标签)。这些文件有近数千个,占用了大量磁盘空间。但是由于某些 gameObject "share" 某些属性与其他人,我可以创建一个 default 文件并从中继承其他文件,从而只更改什么是需要的。比如:

<gameObject id="badassEnemy" import="commonEnemy">
    ...
    <data>
        <life>200</life> <!-- I'm increasing the life -->
    </data>
    <tags>
        <tag>KILLABLE</tag>
        <!-- And is not more collidable. Totally weird XML syntax, but just to make a point -->
        remove <tag>COLLIDABLE</tag>
    </tags>
    ...
</gameObject>

但据我所知,XML默认不支持继承,对合并节点也不是很友好。

我需要的是某种格式,它允许我:

  • 从一个对象继承
  • 添加简单类型和数组类型
  • 修改简单类型和数组类型
  • 删除简单类型和数组类型

数组应该被索引或类似的东西访问。 我查看了 diff 格式,但我不能使用它,因为如果我更改默认类型,所有的孩子都会被破坏。 我知道自定义二进制文件是节省磁盘空间的方法,但对象必须可以用简单的记事本应用程序编辑。 我还查看了 JSONYAML,它们似乎都没有考虑继承。

是否有一些数据格式可以让我做我想做的事?还是我需要自己写数据格式和解析器?

【问题讨论】:

  • 你在这方面有什么收获吗?我有同样的问题,但必须使用 XML,我们有几个动态生成的 XML 文档,它们共享许多公共内容,希望能够覆盖基本文档。

标签: xml actionscript-3 inheritance serialization xml-serialization


【解决方案1】:

如果您担心磁盘空间,请考虑将其压缩:) 归档器大大减少了 XML。

很难实现继承但可能但认为效率不高,这意味着所有这些 XML 共享相同的结构(和标签名称)。

然后你有 XML a 和 XML b 并迭代 b 并将它的孩子添加到 a。您必须检查标签是否存在,如果不添加则无需进一步检查,但如果您发现相同,则必须合并它们(迭代)。

您是否绑定到 XML 格式?也许值得检查转换是否适当(转换为您提到的另一种格式,例如 JSON。构建转换它的工具比构建基于 XML 所需的功能要快得多。

最好的问候

【讨论】:

  • 但是 JSON 提供继承吗?
  • 我不确定是否可以,但可以添加。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 2012-12-08
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2017-02-15
相关资源
最近更新 更多