2010-03-09 77 views
1

在我目前的项目中,我们有一个最初以书籍形式发布的大型内容存储库。大部分内容都以英文和许多外语发布,主要使用Quark Express和后来的InDesign。此内容已导出到自定义XML结构以供存储和将来使用。问题在于,英文XML随着时间的推移而被导出,然后在结构和元数据中得到增强,这些编辑器使得外语XML的结构与英文版本不同。例如:比较XML文档的更好方法?

英语XML:

<chapter meta="meta data added"> 
    <section meta="some meta about the section"> 
     <paragraph>some english paragraph</paragraph> 
     <list> 
      <li>some english list item</li> 
     </list> 
    </section> 
</chapter> 

外国XML:

<chapter> 
    <section> 
     <paragraph>some original foreign language paragraph</paragraph> 
    </section> 
</chapter> 

正如你可以看到有有时缺失的元素以及缺少的属性。现在的问题是我们想要将外语结构与英语进行比较,添加缺失的元数据属性和元素,然后报告XML的非翻译部分。

当前完成此操作的过程涉及将元素数据剥离并将其放入Web应用程序中。从那里我允许用户进入并匹配一个外语段落与它的英文对象(使用Jquery允许他们只需点击该项目然后匹配)并将这些数据保存为属性(通过唯一ID)。那时我知道两种语言文档之间的哪些元素匹配,然后我可以将外语内容流入英语结构化的XML中。这使我可以在英文结构化XML中使用外语内容(由uniqueID标记),我可以查询没有唯一ID的元素,以便我知道哪些项目需要翻译。

此过程正常工作,但它非常手动,需要有人进入并点击段落。随着成千上万的内容页面经过,我正在寻找进一步自动化过程的方法。是否有更好的方法来比较XML文档的结构,以便通过较少的手动干预来完成上述目标?

当前进程使用C#,ASP.Net,Linq到XML和Jquery等等。但语言和工具无关紧要!我只想找到一个更自动化的解决方案。如果它使用数据库,没问题。如果我们需要切换平台,我不介意。这是一个实施问题,而不是语言问题。谢谢!

回答

1

在过去,我已经使用XSLT将两段XML转换为通用格式,然后再与文本比较工具(Beyond Compare)进行比较。

即使您需要外部数据执行转换,也可以为您工作 - 您可以使用.NET XslCompiledTransform类将外部数据传递到XSL Transform,在该类中可以作为变换的参数进行访问。

+0

这听起来很有趣。你将什么样的外部数据传递给变换?我不确定我是否遵循你的回应。 – 2010-03-09 23:18:09

+0

@TimC:如果你愿意,你可以传递许多不同的东西。我只提到它,因为你说当前的进程使用“C#,ASP.Net,Linq到XML和JQuery等等”。我想你可能会使用它们,因为在处理XML之前需要额外的数据。例如,如果在运行转换之前需要一个或多个查找表,则可以将查找表作为可在转换期间引用的XML文档传递。 – 2010-03-10 00:19:17