XML协调

XML协调,xml,Xml,以下情况是否有一种设计模式:我生成了一个XML文件,用户可以通过预定义的方式进行更改(影响属性,而不是整体结构)。在重新生成文件时,我希望重新应用用户执行的更改(如果可能) 愚蠢的方法(虽然在我的例子中并非不可能实际实现)是将所有用户更改持久化为XSLT片段(更改某些XPath表达式标识的节点属性的小模板),并使用它来转换新生成的文件,但我觉得必须有一种更通用的方法。(文本差异不是我想要的。)当以“愚蠢的方式”生成XSLT片段时,您知道自己处于一个聪明的领域:。我倾向于将更改存储为单独的XML文

以下情况是否有一种设计模式:我生成了一个XML文件,用户可以通过预定义的方式进行更改(影响属性,而不是整体结构)。在重新生成文件时,我希望重新应用用户执行的更改(如果可能)


愚蠢的方法(虽然在我的例子中并非不可能实际实现)是将所有用户更改持久化为XSLT片段(更改某些XPath表达式标识的节点属性的小模板),并使用它来转换新生成的文件,但我觉得必须有一种更通用的方法。(文本差异不是我想要的。)

当以“愚蠢的方式”生成XSLT片段时,您知道自己处于一个聪明的领域:。我倾向于将更改存储为单独的XML文档,并使用XSLT作为协调机制,而不是将其存储为片段。简单的例子:

<library>
     <document id="5" title="test" />
</library>

用户更改“title”属性,并生成此文档(内部):


测试

然后,您就有了标准XSLT,它可以在属性更改时应用所有现有元素。

虽然它不是一种真正的设计模式,但在这一领域,使用“镜头”概念的研究非常活跃,这是“行为良好的双向转换”(定义自)

这篇论文描述了关键思想,而旧的和声系统已经被冻结(大约在2008年1月)


这两个网站都有免费下载(LGPL v2.1)和PDF版本的论文。

您的问题中有一些术语在XML/XSLT/XPath中可能模棱两可。你应该更好地提供所有必要的,但减少输入源和期望的输出。我需要修改XML文件,但保留不属于XML信息集的信息(例如元素内部的空白、属性顺序等)。这些“透镜”也许能够达到预期的效果。
<libraryDelta>
     <document id="5">
          <title>test</title>
     </document>
</libraryDelta>