数据集成是企业应用集成中的主要工作内容之一,其主要难点在于:
1.数据源格式千差万别;
2.数据转换过程复杂;
3.要求非侵入性;
4.工作量庞大;
笔者结合自己在数据集成方面的开发和应用经验,参考市场上部分数据集成工具产品,推荐本数据集成解决方案,供同行探讨:
上述方案中:
1.DAO_output组件负责将源数据以xml文件的形式输出;
2.DAO_input组件负责将xml文件解析后存储到目标数据库中;
3.Compiler编译器负责将用户定义的xsl样式表文件载入,并将源xml文件转换成目标xml文件,实现数据转换过程与数据转换逻辑的解耦合;
自动化方面:
1.源数据以xml形式输出,可实现自动化和无人值守(多种高级开发语言支持);
2.xsl文件能够实现复杂的自定义转换及编程功能扩展(http://www.ibm.com/developerworks/cn/xml/x-xsltext/?S_TACT=105AGX52&S_CMP=tag-csdn);
3.目标xml完全可以定义为对象序列化格式,直接由DAO_output组件进行对象组装后实现批量存储操作.
采用Saxon.Api的C#编译器实现:(Saxon.Api下载地址:http://www.saxonica.com/index.html)
using System;
using System.Text;
using Saxon.Api;
namespace Design
{
class Sample
{
public Sample()
{
try
{
// Create a Processor instance.
Processor processor = new Processor();
// Load the source document
XdmNode input = processor.NewDocumentBuilder().Build(new Uri(@"D:/DAI/Project/bin/Debug/books.xml"));
// Create a compiler
XsltCompiler compiler = processor.NewXsltCompiler();
// Compile all stylesheets
XsltTransformer transformer = compiler.Compile(new Uri(@"D:/DAI/Project/bin/Debug/books-csv.xsl")).Load();
// Now run them in series
//XdmDestination results1 = new XdmDestination();
transformer.InitialContextNode = input;
XdmDestination results = new XdmDestination();
transformer.Run(results);
Console.WriteLine("After phase:");
Console.WriteLine(results.XdmNode.OuterXml);
}
catch (DynamicError e)
{
Console.WriteLine(e.Message);
//e.ErrorCode;
//e.IsWarning;
//e.LineNumber;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void Main()
{
Sample s = new Sample();
Console.Read();
}
}
}