我正在尝试更多地了解ReST和XML - 第三方公司询问我们是否可以接受以特定顺序请求xml元素的服务。这会给我们带来问题,因为我们正在使用具有继承层次结构的对象(因此不能使用等等.Net以递归方式序列化对象)。
我知道我可以使用IXmlSerializable Interface(为我们做更多的工作)来控制序列化,或为每个请求创建单独的对象(不是很优雅)。但是我想避免改变我们现有的任何东西,因为它现在非常易于维护。
我想知道有什么可能的原因要求特定顺序的XML元素(这似乎是一个糟糕的设计决定),以及为什么不明确订购xml元素的任何原因(除了明显降低可维护性的时候他们想要的添加元素)。
按顺序要求XML元素的一个典型原因是,处理XML的任何事情都是在保持状态的同时保持状态。它从foo
元素获取信息,然后在处理bar
元素时使用,依此类推。
你可能会说,“好吧,然后先处理foo
元素,然后处理bar
元素,不要依赖文档顺序。”如果该流程在处理XML之前反序列化XML流,那么这一切都很好。但是如果接收进程使用XmlReader
或SAX,它将解析和处理组合成一个步骤,最常见的是最大化性能并最小化内存使用。
这是一个非常普遍的问题 - 但答案可能是,当人类体验这种格式和/或对所代表的内容进行天生排序时,以XML格式指定排序可能最重要。
因此,XHTML 1.0(例如)在<html>文档元素中具有<head>和<body>元素的基本排序,这对应于我们在大量文本之前对具有标题和元数据信息的文档的正常理解。在XHTML中,表(例如)具有表(度量)信息的排序(大致),后跟行,每行包含一系列单元。允许订单在这里有所不同将使已经复杂,不可预测且几乎不可能处理的事情变为现实。
但是,在XHTML的<head>元素中,<script>,<style>,<meta>,<link>或<object>元素的出现没有设置顺序。因此,您可以在这一种语言中使用两种样式。
因此,对XML格式进行集合排序绝不一定是“糟糕的设计决策”,而是可以作为良好设计的证据。