SOA(Service-Oriented Architecture )是这几年非常热的一个概念,强调应用程序以松耦合的方式将自己的功能以服务的方式提供出去。通常来说,SOA的建立最重要关注两个问题,protocol(SOA 并不是总是依赖于web service)与Schema。实际上,我们也注意到SOA的要求也大大促进了web service的发展,ws-*的一系列符合企业应用要求的标准纳入到web service的体系中。而集成中间件还是比较通用的解决了协议的问题。而XML作为主流的数据交换载体,XSD自然成为定义Schema的不二选择。
而在实际的实现中,问题就不那么简单,如何定义这样的Schema呢,我们知道,我们提供服务的时候,并不一定知道会提供给哪些应用使用,我们怎么样能够确定定义这样的Schema是良好而完备的,而其它应用程序又能够准确的理解Schema呢,比如说:一个卖书的网站提供一个接受订单的服务,如何定义这样的Schema呢,需要提供书籍的SN,那么其它的应用程序如何判断这个SN是网站定义的SN,还是书籍的IBDN呢?
这时候,我们可以利用元数据去解决这样的问题,元数据在不同的领域中的定义各不相同,我的理解是元数据就是定义了类别的为什么叫这个名字,书籍这一类别我们就定义为"Book",Book有"IBDN","Title","Publish Date"这几个属性,它和作者(Author)有关联关系,用专业的话说,元数据定义了词法和语义,而通常我们可以用UML去定义元数据。
在W3C标准中,用RDF(资源描述框架)定义元数据 http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/,OWL(本体表述语言)作为其扩展也是W3C推荐标准。有机会的可以详细讨论,实际上RDF同时也可以做为信息的载体。以上例为例,RDF 可以这样定义。
扯了半天,再扯回如何定义Schema呢,我们定义的Schema,其中的词汇必须在元数据中定义,同时XML元素(Element)和属性(Attribute)的关系符合元数据的类,属性关系,或则包含关系,比如我们可以定义这样的Schema。
目前,很多厂商已经有自动化的工具能够辅助定义这样的Schema。
有一个问题,我是这么定义元数据的,别人可能采用其它的方式定义,怎么统一呢,这就依赖于行业标准,实际上各个行业都有相类似的解决方案,统一后的元数据,可以称为公共信息模型(Common infomation Model)。在一个大型企业中内部的业务集成中,根据业务模型定义企业统一的元数据在集成中有着非常重要的意义。