基于XSD方案的XML自动编辑器
有没有什么方法可以根据XSD方案生成一个XML文件的编辑器?(这个编辑器应该是基于Java或Python的网页编辑器)。
3 个回答
有趣的是,我最近也在考虑类似的事情。我正在为《文明4》这款策略游戏制作一个编辑器(虽然不是完全所见即所得,但它能把DOM(文档对象模型)抽象掉),这个游戏用XML来存储几乎所有内容。我想了很久这个项目,并且做了两个原型(用Python编写),其中一个看起来很有希望,所以我打算在未来继续扩展它。需要注意的是,《文明4》的XML其实只是一个符合某种标准的数据库(就像是你更好用JSON/YAML等格式存储的数据,主要是键值对,还有一些键值对的子列表——没有递归的数据结构)。
我最开始的想法是基于大多数数据都是键值对这一点,这种结构并不适合充分利用XML的所有功能(比如递归数据结构等)。我新的设计更复杂一些——到目前为止,我只用这种方式构建了一个(仍然有点bug的)验证器工厂,但我期待能扩展它,比如为模式敏感的编辑小部件。基本思路是遍历XSD的DOM,识别预期的内容(比如其他节点的列表、特定格式的文本等),然后递归地为这些内容构建验证器,最后再构建一个更高层次的验证器,按照正确的顺序应用之前生成的所有验证器。可能需要一些函数式编程的基础才能更好地理解这个想法。至于编辑部分(顺便说一下,我用的是PyQt),我计划为包含文本的标签生成一个标签-文本输入框的组合,而对于包含其他元素的标签,则可能会生成一个标题(Label),并且可能会缩进子元素或提供折叠功能。再次强调,递归是构建这些内容的关键。
Qt允许我们为文本输入小部件附加一个验证器,所以一旦我们能为包含“int”的标签生成验证器,这部分就很简单。对于包含其他标签的标签,可以做类似的事情:为每个子元素生成一个验证器并将它们串联起来。唯一需要改变的部分是我们如何获取内容。忽略注释、属性、处理指令等,这应该仍然是相对简单的——对于“标签: 内容”对,生成“内容”并将其传递给你的DOM解析器;对于有子元素的元素,生成子元素的表示并放在“...”之间。属性也可以作为键值对来实现,只是多了一个额外的标志。
ExxEditor 是一个基于 XML 模式的 XML 编辑器。这个项目是用 C++ 开发的,完全不是基于网页的。
我自己没用过这个编辑器,但我觉得 XML 模式文件可以加一些注释,以便“自定义”用户界面。
使用Jaxe,你可以从一个XSD文件自动生成一个配置文件,然后手动编辑这个文件来进行改进。这样你就得到了一个专门针对这种语言的XML编辑器。接着,你可以用这个配置文件配合WebJaxe在网上编辑你的文件。不过,如果你经常更改XSD,这种方法就不太适用了(你没有说明这一点)...
Jaxe是一个Java应用程序,而WebJaxe则是将Jaxe作为一个Java小程序来使用的编辑器。