|
XML在传统制造业供应链中的应用分析(三):XML的分布式多层应用开发(续)广告 XML在传统制造业供应链中的应用分析(三):XML的分布式多层应用开发(续)
郭 路 分布式多层系统是目前在企业级大中型应用中最流行的架构,而XML则是计算机数据处理的最新技术,强强联手能产生多大的化学效应;作为新的数据处理标准,XML的通用性与开放性勿庸置疑,不过对于传统成熟的开发模式,XML的价值是在于锦上添花,还是将取而代之;作为一名开发人员,我们相信通过XML可以整合与优化系统的总体性能,为了实现这个目标,在设计中要采取哪些步骤,又需要注意哪些误区……本篇就B2B供应链系统应用模型的设计为实例,试图为上述疑问寻求解答。 在一个遵循软件工程的大型项目开发过程中,其系统设计的大致步骤可如下所述: 需求分析(可行性研究,系统功能需求,非功能需求如成本、安全性、可扩展性等);
通常在总体设计阶段,通过建立系统的抽象模型(使用E-R模型、数据流图、系统流程图等),我们可以清楚应用系统中将要涉及的实体(Entity),包括人、设备、数据流等。不过此时它们之间的关系主要是以信息流方式建立,可以说是松散的,并没有集中的层次体系,更没有建立面向对象的继承关系(如部门—>仓库->物料仓库),而对于单个实体内应包含的信息也只是简单描述甚至没有(如一份生产计划的细节),对于这些问题,就需要我们在制定XML实体模型(使用DTD/Schema)时来解决。在前一篇提到过,为企业定制DTD/Schema的一个难点是选择在哪个层面上制定XML规范,对此,我们可以将抽象模型中的实体都提取出来,大致理顺其间的层次关系,为了保证结构与逻辑的完整性,可以补充一些相关联的实体(比如在技术部下面,除了有检验成品质量的质检科外,一般还会有研发新产品的设计科),此时得到的实体框架便可作为设计XML模型的下限,不过通常我们实际定义的模型总是要大于此框架,这主要是为了保证系统将来的扩展。 我们知道,由于使用继承与隐藏数据等技术,采用OOP方法设计的系统会具有封装、可重用、多态等优点,为了使XML实体模型可以容易地转化为面向对象的物理模型,就要求我们在整理XML实体架构时特别重视派生与继承关系。在普通情况下,XML元素的属性与子元素经常是可以互换的,为了支持面向对象的特性,当一个元素可以分解为几个子元素时,我们不提倡使用枚举类型的属性,这是因为子元素可以直接继承上一级的方法与属性,这对物理模型的简化有着重要意义;基于同样原因,当一种信息可以同时约束XML元素及其子元素时,我们总是通过属性来表示,这是因为只有属性才能被子元素继承。试比较以下两种DTD设计方式的区别: 用枚举属性表示元素类别信息,用子元素表示可继承的元素信息(不提倡) <!ATTLIST 客户 编号 ID #REQUIRED 名称 CDATA #REQUIRED 地址 CDATA #REQUIRED 类型 (销售商,供应商) #REQUIRED> <!ELEMENT 供应商 (供应物料+)> <!ATTLIST 供应商 编号 ID #REQUIRED 名称 CDATA #REQUIRED 地址 CDATA #REQUIRED> 类型 (一级供应商,二级供应商…) #REQUIRED> <!--用子元素表示可继承的元素信息--> <!ELEMENT 供应物料 (编号,名称,单位,常规物料|特规物料)> <!ELEMENT 编号 (#PCDATA)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 单位 (#PCDATA)> <!ELEMENT 常规物料 (名称,编号,单位)> <!ELEMENT 特规物料 (名称,编号,单位)> 用子元素表示元素类别信息,用属性表示可继承的元素信息(提倡)
<!ELEMENT 客户 (供应商|销售商)> <!ATTLIST 客户 编号 ID #REQUIRED 名称 CDATA #REQUIRED 地址 CDATA #REQUIRED> <!ELEMENT 供应商 (供应物料+)> <!ATTLIST 供应商 编号 ID #REQUIRED 名称 CDATA #REQUIRED 地址 CDATA #REQUIRED> 类型 (一级供应商,二级供应商…) #REQUIRED> <!ELEMENT 供应物料 (常规物料|特规物料)> <!--用属性表示可继承的元素信息--> <!ATTLIST 供应物料 编号 ID #REQUIRED 名称 CDATA #REQUIRED 单位 CDATA #REQUIRED> <!ELEMENT 常规物料 EMPTY> <!ATTLIST 常规物料 编号 ID #REQUIRED 名称 CDATA #REQUIRED 单位 CDATA #REQUIRED> 确立了XML实体模型的框架,再进行XML标记的规范化就较为简单,主要在命名时应注意以下原则:1.准确简明,符合逻辑;2.参考已成为工业标准的XML规范的命名方法;3.符合企业自身特征,包括一些特殊的缩写名称。较抽象模型至物理模型的转换,从XML实体模型导出物理模型会容易的多,由于XML产生的主要目的就是为了方便对计算机数据的处理与存储,因此从实现系统功能的角度,完全可以基于XML实体模型进行程序流程设计,由XML实体模型导出物理模型的主要任务包括两方面: 选择合适的计算机语言,重新描述XML实体模型。XML是一种描述数据结构与状态的语言,不能表达具体处理的过程,元素中不包含方法,而一些专门用于系统分析设计的语言(如IDL、PDL、UML等)则能较好的解决此问题,在详细设计阶段,我们通常先要确定应用系统的开发工具,因此也可以使用实际编程的程序语言来描述系统的物理模型。由于每种语言都有特定的语法与对象命名规则,所以需要建立一个词汇表,来描述XML元素标记与程序中对象名称的对应关系。
程序非常复杂,而且每当商业逻辑或XML实体对象发生改变时,程序的修改量会非常大; 面向XML的数据库连接 在供应链系统中,以物理文档方式存储的XML数据非常少,应用层的XML数据处理源主要从数据库获得,因此有效实现XML信息与数据库记录间的无缝转换就显得尤为重要。通常,由数据库存取XML文档的方式主要有四种,现分别叙述如下: 使用普通的ODBC等方法选择出所需的数据库记录,再转换为可处理的XML文档;
通常在多层应用系统中使用这种方法时,需要在设计应用层模型时添加一转换层(位于最底层),专门负责XML数据与记录集信息(经常是可变数组形式)的转换,转换的规则可以使用外部的DTD/Schema,但实际在企业内部系统中,由于规则的变化可能性不大(如数据库字段名发生变化),因此一般会将规则写到应用内部。 使用支持XML的通用数据库编程接口如ADO2.5访问常规数据库; 以ADO为例,由于使用XML来保存一个与数据库断开的记录集(或数据集,位于内存中),因此可以通过RecordSet.Save方法简单地将查询结果保存为XML文件,也可以将记录集直接作为一XML字符流处理。不过由于该XML文档是自动导出的,所以会丢失一些相关的约束信息,如DTD/Schema、兄弟元素的排列顺序等,而且由于保存的XML文件中自动包含许多关于数据库字段的描述信息,因此文档通常会较冗长。一般对于ADO自动产生的XML对象,较少用于计算机数据处理,主要用于XML数据保存(可简化网站中活动页面的产生)及不同数据库间的数据交换。不过对于将XML文档写入数据库,使用ADO对象会是一个较好的选择。 通过JDBC等数据库接口扩展SAX、DOM接口以直接访问数据库; 通过上述扩展SAX编程接口的方法,还可以间接使用DOM接口访问数据库数据。此时在内存中新建一Document对象,并通过org.xml.sax.Paser接口遍历数据库表,将返回的XML节点添加到DOM树中,应用可以直接对此DOM对象树操作或保存为XML文件。 与前两种方法相比,此方法在效率、通用性、灵活性上都可以满足应用需求,尤其在仅使用SAX处理大的XML文档时,可以大大减少数据的传输转换时间。不过由于需要重载、添加SAX等编程接口中的部分方法,因此会增加编程的复杂度。另外要说明的是,无论使用SAX还是DOM访问数据库,所作的修改都不会返回到数据库。目前大多数基于JDBC、ADO、ODBC的XML-DBMS工具都是基于此原理所开发的。 使用特殊工具访问一个XML-Enabled数据库。 以SQL Server 2000为例,通过在IIS XML支持工具(SQL Server 2000自带,需先安装IIS 5.0)中为SQL Server数据库建立一虚拟目录(如将“客户管理”数据库Client_Manage映射为目录sql_client),便可以使用XML-HTTP协议访问数据库并返回XML数据,如在浏览器中输入下面的URL: “http://localhost/sql_client?
sql=SELECT+username+userid+FROM+client+FOR+XML+AUTO” <?xml version="1.0" encoding="UTF-8" ?> <root> <row username="石化一厂" userid="0000000001" /> <row username="江苏规划院" userid="0000000002" /> <row username="南京交通院" userid="0000000003"
/> <row username="浙江思能" userid="0000000005" /> <row username="中国机械院" userid="0000000006" /> </root> 上述URL中前半句通过虚拟目录名指定访问的数据库,后半句为一带FOR XML子句的SQL语句(在浏览器地址行中以“+”代替空格),要求返回的查询内容符合XML规范。也可在Query Analyzer或实际编程中直接输入该SQL语句,其完整的书写格式如下所示: “select 对于具体数据库产品的XML应用与开发,可参看其Help,通常都有详细说明。需要注意的是,不同数据库工具使用的XML数据定义方式往往是特定的,如DB2用的是DAD(XML
Extender & Text Extender)或DTD(Netdata),SQL Server使用Schema(SQL ISAPI for
XML),而Oracle则使用DTD(iFS、XML Class Generator等)。 注解: 此处对 Intranet 不做讨论,不过本文内容同样适用于 B/S 模式,对于分布式多层应用而言,C/S 和 B/S
在设计上相差不大(B/S应用需要 HTTP Server),C/S 向 B/S
的转换通常较为简单,但限于浏览器等技术的发展,目前B/S应用模式的性能效率较C/S还有差距。 名称解释: 参考资料: 关于作者 浏览:XML在传统制造业供应链中的应用分析(三):XML的分布式多层应用开发 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… 观08软件并购风潮 议09巨头何处生花2008,似乎注定是不平静的一年。有人说2008是并购年。业内人士表示,在全球软件行业,并购一直是大企业谋求做大做强的捷径之一,包括甲骨文、SAP,微软等全球软件巨头都为了扩大自己…… |
|
|