CN101266666B - 贸易伙伴网络中的商务文档以及基于该文档的接口定义 - Google Patents

贸易伙伴网络中的商务文档以及基于该文档的接口定义 Download PDF

Info

Publication number
CN101266666B
CN101266666B CN2008100927144A CN200810092714A CN101266666B CN 101266666 B CN101266666 B CN 101266666B CN 2008100927144 A CN2008100927144 A CN 2008100927144A CN 200810092714 A CN200810092714 A CN 200810092714A CN 101266666 B CN101266666 B CN 101266666B
Authority
CN
China
Prior art keywords
document
definition
participant
interface
string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
CN2008100927144A
Other languages
English (en)
Other versions
CN101266666A (zh
Inventor
B·A·梅尔策
T·艾伦
M·D·富克斯
R·J·格鲁斯科
M·马洛尼
A·E·戴维德森
K·珀森
K·L·施瓦茨奥芙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Red hat Limited by Share Ltd
Original Assignee
Open Invention Network LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US09/173,847 external-priority patent/US6226675B1/en
Priority claimed from US09/173,854 external-priority patent/US6125391A/en
Application filed by Open Invention Network LLC filed Critical Open Invention Network LLC
Publication of CN101266666A publication Critical patent/CN101266666A/zh
Application granted granted Critical
Publication of CN101266666B publication Critical patent/CN101266666B/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q99/00Subject matter not provided for in other groups of this subclass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/08Payment architectures
    • G06Q20/10Payment architectures specially adapted for electronic funds transfer [EFT] systems; specially adapted for home banking systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/08Payment architectures
    • G06Q20/20Point-of-sale [POS] network systems
    • G06Q20/209Specified transaction journal output feature, e.g. printed receipt or voice output

Abstract

本发明涉及贸易伙伴网络中的商务文档以及基于该文档的接口定义。机器可读的文档将企业与客户、供应者和贸易伙伴联系在一起。诸如基于XML的文档等自定义电子文档很容易在贸易伙伴之间被理解。对这些电子商务文档的定义称为商业接口定义,商业接口定义公布在互联网上,或者与网络成员通信的其它地方。商业接口定义告诉潜在的贸易伙伴公司提供的服务以及当与这些服务通信时所用的文档。因此,一般的商业接口定义允许客户通过发购货定单来定购,或者允许供应者通过下载存货状态报告来检查可获得的量。另外,与公用商业库中的解释信息耦合,编制输入和输出文档,用接近并行于纸件企业运行的方式对事务编程。

Description

贸易伙伴网络中的商务文档以及基于该文档的接口定义
本申请是申请号为99802982.3、国际申请日为1999年10月8日、发明名称为“贸易伙伴网络中的商务文档以及基于该文档的接口定义”的发明专利申请的分案申请。
发明背景
发明领域
本发明涉及这样的系统和协议,它们支持与网络相连的不同客户之间的事务;尤其涉及这样的系统和协议,它们支持具有不同体系结构的平台之间的商务。
相关技术的描述
互联网和其它通信网在人和各计算机平台之间提供了通信的途径,这些途径正被广泛地用于各种事务,包括参与者买卖贷物和服务的商务活动。正在为方便互联网上的商务活动作各种努力。但是,面对许多竞争标准,为了执行一项事务,当事方必须预先对将要使用的协议达成一致,并且通常要求对平台体系结构进行定制集成,以支持这些事务。对某个与已达成一致的标准不相容的特定网点为内部的商业过程,可以要求进行实质的再工作,以便与其它网点集成。另外,当一家公司提交一种标准或另一个标准时,该公司会陷入一个关于交易当事方的给定标准群中,并排除其它的对象。
Tenenbaum等人在“Eco系统:互联网商务体系结构”中很好地概述了互联网商务发展所遇到的挑战,该论文发表在1997年5月的“计算机”杂志第48-55页上。
为了在互联网上开展商务活动,需要对体系结构框架标准化。为支持这类商务框架而开发的平台包括IBM商务点、Microsoft互联网商务框架、NetscapeONE(开放网络环境)、Oracle NCA(网络计算体系结构),和Sun/JAVASoftJECF(JAVA电子商务框架)。
除了这些专利框架外,正在研究编程技术,诸如基于CORBA IIOP的公共分布式对象模型(公共对象请求中介器体系结构互联网ORB协议)。使用公共分布式对象模型的意图是为了简化下述的系统转移,即从企业系统转移至可以在电子商务的商业应用层面上协同工作的系统。但是,使用某个框架的用户或企业不能在另一个框架上进行交易。这限制了电子商务系统的成长。
实施某个框架的公司将拥有一个应用程序设计接口API,该API与支持其它框架的API不同。因此,如果不要求采用公共商务系统接口,那么公司很难访问其它的事务处理服务。在API层面上开发这类商务系统接口要求在在当事双方之间进行重要的合作,这通常是不现实的。
因此,希望提供一种框架,它能够使通信网中不同平台之间的相互作用变得容易。这种系统应该方便交易伙伴间的自发贸易,不需要对全行业的标准定制集成或者达成在先协议。另外,这类系统应该鼓励增加商务自动化的途径,以避免了传统系统集成费时多,成本高及风险大的缺点。
总的来说,希望提供一种电子商务系统,它用开放式市场代替了基于专利标准的封闭式贸易伙伴网络。
发明内容
本发明提供了一种将企业与客户、供应者和贸易伙伴连接起来的基础结构。在本发明的基础结构下,公司用自定义的、机器可读的文档(诸如,基于可扩充标记语言XML的文档)交换信息和服务,而所述文档很容易在贸易伙伴之间被理解。在本文中,用于描述被交换文档的文档被称为商业接口定义BID,这类文档公布在互联网上,或者与网络成员通信的其它地方。商业接口定义告诉潜在的贸易伙伴公司提供的服务,以及当与这类服务通信要使用的文档。因此,一般的商业接口定义允许客户通过发购货定单进行定购,其中所述购货定单遵从在某一方BID中公布的文档定义,以便接收此购货定单。允许供应者通过下载存货状态报告来检查可获得的量,其中所述存货状态报告遵从在用于管理存货数据的一个商务系统的BID中公布的文档定义。使用预定的、机器可读的商务文档为访问企业应用程序提供了更直观的、更灵活的方法。
依照本发明,商务网络中的网点建立了一个事务接口,它包括机器可读的接口规范说明,以及机器可读的数据结构,其中机器可读的接口规范说明包括对机器可读的接口规范说明的解释信息。机器可读的接口规范说明包括对输入文档的定义以及对输出文档的定义,这些定义被网点起接口作用的事务处理过程所接受和产生。例如,按照基于标准XML的文档,输入和输出文档的定义包括对各组存储单元以及各组存储单元之逻辑结构的描述。根据本发明的各个方面,包括解释信息的机器可读的数据结构包括对输入和输出文档定义中逻辑结构的数据类型规范说明(例如,串,阵列等)、逻辑结构的内容模型(例如,可能值的清单),和/或将某一特定逻辑结构的预定存储单元组映像到一清单的各个条目以便提供逻辑结构之语义定义的数据结构(例如,将代码映像成产品名称)。
根据本发明的其它方面,接口包括一个至少可以由网络中的一个网点访问的记忆资源库,它存储了一个由逻辑结构和逻辑结构的解释信息所组成的库。资源库可以扩充,以便包括由输入和输出文档定义组成的库、由接口规范说明组成的库,以及由网络中参与者接口网点之规范说明组成的库。
因此,本发明事务框架中的参与者在网络的诸网点之间执行各项事务,其中所述网络包括多个网点,它们执行诸事务中所包含的过程。方法是为一事务存储机器可读的接口规范说明,而所述规范说明包括一输入文档的定义和一输出文档的定义。输入和输出文档的定义包括对各组存储单元以及各组存储单元之逻辑结构的描述。在一较佳系统中,定义的表述方式遵从标准的XML文档类型定义DTD,可以通过对一些元素进行语义映像、内容模型化以及数据归类而得以扩充。事务参与者通过通信网接收包含文档的数据。参与者根据为事务存储的规范说明对文档进行语法分析,以便识别该事务的输入文档。在对文档作了语法分析之后,至少将一部分输入文档按机器可读的格式提供给一事务处理过程,以产生一输出。根据所存规范说明中输出文档的定义,形成一输出文档,该输出文档包括事务处理过程的输出。一般,在通信网上将输出文档发回输入文档的源,或者适合一特定事务类型需要的其它地方。
因此,商业接口定义跨接了下述文档和程序之间的间隙,其中所述文档例如是根据XML规定的,而所述程序是在特定网点处的事务处理服务的前端上执行的。此类前端例如可以通过JAVA虚拟机或者通过在网络上提供系统互连的其它公共体系结构来实现。商业接口定义提供了一项技术,通过该技术,利用商业接口定义文档,可以设计事务协议。用文档型的详细形式规范说明可以建立事务协议程序。
机器可读的事务接口规范说明可以被网络中的其它平台访问。参与者平台包括用于根据一互补网点上规定的事务接口来设计输入文档和输出文档的资源。因此,参与者网点包括用于存取互补接口的输入文档定义以及互补接口的输出文档定义的资源。通过在存储于规范说明中的接口的输入文档定义中至少包括一部分互补接口的输出文档定义,来建立关于访问参与者网点的所存储规范说明。
根据本发明的另一方面,用于建立接口的所存储规范说明的过程包括对资源库存取机器可读的规范说明的元素。资源库存储了由逻辑结构、内容模型和逻辑结构的示意图所组成的库,以及文档的定义,其中所述文档包括用来建立接口描述的逻辑结构。可在网络中访问的资源库使得接口描述的建立变得容易,而接口描述很容易被共享。通过网络通信以及对公共逻辑结构认同很容易协商为一特定过程建立的输入文档与希望由互补过程返回的输出文档之间的任何差异,以便表达特殊的信息。
根据本发明的一个方面,机器可读的事务接口规范说明包括一个遵从接口文档定义的文档,所述接口文档定义在网络的各成员之间共享。该接口文档定义包括这样的逻辑结构,它们用于存储一特定事务的标识符,以及关于该特定事务的输入和输出文档的定义与对定义的参考两者中的至少一种。也就是说,对一特定服务的接口描述实际上可以包含对输入和输出文档的定义。另一种方法是,包括指向资源库某个位置或者这种定义在网络中其它地方的指针。
依照本发明的另一方面,机器可读的规范说明包括遵从接口文档定义的商业接口定义BID文档,而所述接口文档定义包括这样的逻辑结构,它们用于存储接口的标识符,并且存储关于一个或多个由接口支持的事务组成的事务组的规范说明与对规范说明的参考两者中的至少一种。对于每个被支持的事务,文档至少包括关于特定事务的输入和输出文档的定义和对定义的参考两者中的一种。
依照本发明的另一方面,根据输入和输出文档的逻辑结构,在输入和输出文档定义中定义的存储单元包括作语法分析的数据,而这些数据又包括对文本字符编码的字符数据,以及用于识别存储单元组的标记数据。依照本发明的另一方面,至少一组存储单元对提供自然语言字的多个文本字符编码。这便于此类文档的人类阅读者和开发者使用输入和输出文档定义。
依照本发明的另一方面,输入和输出规范说明包括逻辑结构所识别的多组存储单元中至少一组的解释信息。在一个例子中,解释信息对各组经分析字符的定义进行编码。在另一例中,解释信息提供了概念模型规范说明,诸如要求一具体的逻辑结构,以便携带代码清单中一个成员,其中所述代码被映像至目录的产品描述。在一些系统中,文档之逻辑结构中的存储单元包括许多组未分析的数据,这符合某种特定实施的需要。
依照本发明的另一方面,在一特定平台中的事务处理过程具有一种事务处理体系结构,它是多种不同事务处理体系结构中的一种。因此,根据使用该信息的事务处理过程的不同事务处理体系结构,参与者网点包括用于将至少一部分输入文档翻译成一种可读格式的资源。根据事务处理过程的不同事务处理体系结构,将文档定义的诸元素翻译成包括许多变量和方法的编程对象。对于具有一个起事务处理过程前端作用的JAVA虚拟机的参与者来说,将文档中的特定字段翻译成JAVA对象,包括数据以及与JAVA对象相关的被获得和设置的函数。在公共对象请求中介器体系结构CORBA、构件对象模型COM、联机事务处理OLTP和电子数据交换EDI的意义上,本发明可支持的其它事务处理体系结构包括遵从一种接口描述语言的过程。
依照本发明的其它方面,提供了一个资源库,它存储了在多项事务中使用的文档类型。机器可读的一特定事务的规范说明通过参考资源库的文档类型至少定义了输入文档和输出文档中的一个。依照另一方面,包含在资源库的文档类型包括用于识别网络参与者的文档类型。这类文档类型提供了用于识别参与者的结构、用于规定参与者支持的服务的结构,以及用于规定每种服务之输入和输出文档的结构。
除了上述方法之外,本发明提供了一种用于管理网点间事务的设备,该设备包括网络接口;存储器,用于存储数据和指令程序,包括上述机器可读的事务接口规范说明;以及数据处理器,它与存储器和网络接口相连。存储在该设备中的指令程序包括逻辑电路,用以为事务参与者执行上述过程。
本发明还提供了一种为系统上执行的事务建立参与者接口的设备,其中参与者接口包括网络接口和数据处理资源,根据事务处理体系结构执行事务处理过程。所述设备包括指令程序,它们可以由系统执行,并且存储在系统可访问的媒体上,指令程序提供了为一特定事务参与者建立参与者接口定义的工具。参与者接口定义包括输入文档定义和输出文档定义。输入和输出文档定义包括对各组存储单元以及各组存储单元之逻辑结构的机器可读的描述,依照本发明的一个方面,各组存储单元以及各组存储单元的逻辑结构遵从XML文档类型定义。
依照本发明的这一方面,用于建立参与者接口的设备还包括以下指令程序,它们存储在数据处理系统可访问的媒体上,并且响应输入和输出文档定义,用于编译与存储单元组以及输入和输出文档之逻辑结构相对应的数据结构,其中存储单元组以及输入和输出文档的逻辑结构遵从事务处理体系结构;用于编译系统可执行的指令,以便将输入文档翻译成相应的数据结构;以及编译系统可执行的指令,以便将事务处理过程的输出翻译成各组存储单元和输出文档的逻辑结构。
在一较佳实施例中,用于建立参与者接口定义的工具包括系统可执行的指令,以便从补充网点和/或资源库中存取定义的元素,其中所述资源库存储了由逻辑结构以及用来建立接口描述的逻辑结构解释信息组成的库。根据本发明的各个方面,资源库不仅包括逻辑结构库,而且包括包含逻辑结构的文档定义,以及用于规定参与者接口的格式。依照本发明的这一方面,根据上述技术,并结合对参与者网点的描述,为建立商业接口规范说明提供了工具。在较佳实施例的参与者网点中实现了用于建立接口的工具以及用于将接口编译成资源库的工具,其中资源库是根据本发明该方面与事务处理体系结构进行通信所需要的。并且,当网络的使用根据定义输入和输出文档的接口描述而增长时,可以用这些工具开发和优化接口描述。
因此,本发明的另一方面提供一种设备,该设备包括存储器和数据处理器,其中数据处理器用于执行存储器中所存的指令,所述指令包括用于建立参与者接口定义的工具和用于完成上述功能的编译器。
依照本发明的另一方面,使用参与者接口描述能够使市场制造者网点工作。在这样的网点上,提供了一种用于管理事务的方法,该方法包括存储机器可读的多个参与者接口的规范说明,所述规范说明可以识别由接口支持的事务,以及这些事务的输入和输出文档。如上所述,输入和输出文档的定义包括对各组存储单元和各组存储单元之逻辑结构的描述,诸如根据XML标准。另外,事务的定义和参与者接口定义都包括根据一项技术规定的文档,所述技术遵从XML或其它标准化的文档表述语言。在这样的市场制造者网点上,通过通信网接口包含文档的数据。根据规范说明对文档进行语法分析,以便识别用于接受被识别输入文档的一个或多个事务中的输入文档。按机器可读的格式将至少一部分输入文档提供给与一个或多个被识别事务相关的事务处理过程。将至少一部分输入文档提供给事务处理过程的步骤包括在市场制造商网点上根据处理体系结构执行路由选择过程。根据一特定的处理体系结构,执行本发明一个方面的路由选择过程,并且将至少一部分输入文档翻译成路由选择过程的处理体系结构的格式。依照较佳实施例的翻译步骤包括根据路由选择过程的处理体系结构,产生包含许多变量的方法的编程对象。
依照本发明的另一方面,市场制造者网点还支持资源库结构。因此,在市场制造者网点上提供一个过程,用于允许网络中的参与者能够访问存储在市场制造者网点上的资源库。如上所述,资源库包括逻辑结构的定义,解释信息,以及参与者网点用来建立事务接口文档的文档定义,并且资源库包括用来识别参与者的商业接口定义的实例,以及各参与者执行的事务。
依照各种不同的情况,路由选择过程包括将输入文档翻译成文档将被发往的过程的不同处理体系结构,或者按原始文档格式通过网络将输入文档发送给一远程处理网点,或者发送给这类处理的组合。在另一种情况下,路由选择过程还可以包括下述技术,即将依照一个输入文档定义而定义的输入文档翻译成根据一个不同的过程文档规范说明而定义的不同文档,其中所述过程文档规范说明已经登记,以便等待该输入文档。
另外,根据本发明将市场制造者网点提供为一种设备,该设备包括网络接口、存储器和数据处理器。其中存储器用于存储数据和指令程序,指令程序包括参与者接口的规范说明。以指令程序的形式为逻辑电路提供了数据处理器,或者如上所述执行市场制造者过程。
因此,本发明根据共享输入和输出文档规范说明的原则,提供了电子事务的基础。文档为访问事务处理服务提供了直觉且灵活的方法,比编程API更容易实施。通过公司已在很大程序上达成一致的被交换的文档,而不是通过总是不同的商务系统接口,更容易使公司互连。另外,在较佳实施例中,用人可阅读的格式规定这类文档。根据本发明,在诸如XML文档等文档中规定商业接口,其中XML文档很容易被人或计算机解释。
使用本发明的基于文档的事务体系结构,包括使用语法分析器,对于任何文档源,语法分析器的工作方式基本相同。这样做大大减少了对定制程序的需要,其中定制程序用于从网络的每个参与者那里抽取和集成信息。因此,通过以下步骤可以对由会计、购买、制造、运输和其它功能产生的企业信息进行集成。所述步骤是,首先根据本发明将每个源转换成具有一体系结构的文档,然后处理作语法分析的数据流。系统中参与市场的每个网点都只需要知道其内部系统的格式,以及为根据事务进行互换而规定的文档的格式。因此,不需要为希望参与电子商务网络的每个其它网点产生本地格式。
为了完整的商业集成,本发明提供了一种具有标准化逻辑结构(类似XML元素)、属性或元数据的资源库,为特定的商业群体建立了语义语言。本发明还提供了一种在不同元数据描述之间映像的装置,以及用于处理文档并且调用合适应用程序和服务的服务器。依照本发明,网络的基本构成块包括商业接口定义,它们告诉潜在的贸易伙伴公司提供怎样的联机服务,以及用哪些文档来调用服务;服务器,它们提供桥梁,以便将内部和外部的事务处理服务组束缚在一起,从而建立一个贸易群体。服务器的作用是对输入文档进行语法分析,并且调用合适的服务。另外,本发明的服务器承担翻译任务,将被接收和被发送的文档格式翻译成各主系统的格式。因此,贸易伙伴只需要对被交换的商务文档的结构、内容和序列达成一致,不需要对应用程序设计接口的细节达到一致。如何处理文档以及因接收文档而引起的行为严格地由提供服务的企业决定。这将集成从系统层次提高至企业层次。这使得企业可以将一清楚且稳定的接口呈现给它的对手,不管其内部技术实施、组织或过程如何变化。
通过使用公共商业库或资源库,方便了建立商业接口定义并使服务器根据这些描述管理商业活动的整个过程,其中公共商业库或资源库包括一般商业概念的信息模型,这些模型包括诸如公司、服务和产品等商业描述原语,诸如目录、购货定单和发票等商业形式,以及包括时间和日期、位置以及货物分类等标准度量。
通过附图、详细描述和后面的权利要求书,将清楚本发明的其它方面。
附图概述
图1是一简化图,示出了依照本发明的包括商业接口定义BID的电子商务网。
图2是一简化图,示出了依照本发明的商业接口定义文档。
图3是一概念性的方框图,示出了本发明网络中在一参与者网点处的服务器。
图4是一流程图,示出了依照本发明的在一参与者网点处对接收文档的处理过程。
图5是一方框图,示出了基于XML系统的语法分析器和事务处理过程前端。
图6是一概念图,示出了分析函数的流程。
图7是一简化图,示出了服务器的资源,这些资源用来建立本发明的商业接口定义。
图8是一简化图,示出了依照本发明用来建立商业接口定义的资源库。
图9是一流程图,示出了依照本发明建立商业接口定义的过程。
图10提供了对本发明资源库的启发式观察。
图11是一简化图,示出了服务器的资源,这些资源根据商业接口定义为本发明的网络提供了市场制造者的功能。
图12是一流程图,示出了接收文档的市场制造者网点处理。
图13是一流程图,示出了依照本发明在一市场制造者网点处登记参与者的过程。
图14是一流程图,依照图9过程在一市场制造者网点处提供服务规范说明的过程。
图15是一示意图,示出了依照本发明在一参与者或市场制造者网点处的操作序列。
图16是一概念图,示出了依照本发明的、基于BID的商务网要素。
详细描述
针对各附图对本发明进行详细描述,其中图1示出了由市场参与者和市场制造者组成的网络,该网络基于使用商业接口定义,并且支持对依照这类接口描述规定的输入和输出文档进行交易。网络包括多个网点11-18,它们通过诸如互联网19或其它电信或数据通信网等通信网互联。每个网点11-19都包括一计算机,诸如便携式计算机、台式个人计算机、工作站、系统网络、或者其它数据处理资源。网点包括存储器,用于存储商业接口定义;处理器,用于执行与网络中其它网点进行商务交易的事务处理过程;计算机程序,它们由支持这些服务的的处理器执行。另外,每个网点包括一个网络接口,用于提供与互联网19或其余通信网的通信。
在图1的环境中,网点11、12、14、16和18表示市场参与者。市场参与者包括要根据本发明建立的商务处理交易货品或服务的消费者或供应者。
在本例中,网点15和17是市场制造者网点。市场制造者网点包括用于登记商业接口定义的资源,称为BID登记。参与者能够向市场制造者网点发送文档,而在市场制造者网点处,识别该文档并将文档传送给已登记可以接收这些文档作为输入的合适的参与者。市场制造者还保持标准形式的资源库,以方便商务网,这里标准形式的资源库构成一公共的商用库,用于建立商业接口定义。
在本例中,市场参与者18直接与市场制造者17相连,而不通过互联网19连接。这种与市场制造者的直接连接表示支持商务交易的网络结构可以是各种各样的,包括诸如互联网19等公用网,以及诸如局域网的专用连接,或者如网点17和18之间所示的点对点连接。实际通信网变化很多,并且适用于本发明的商务交易网。
图2是一启发图,示出了商业接口定义BID中的嵌套结构,其中商业接口定义BID是为本发明网络中的市场参与者建立的。图2所示的商业接口定义是一数据结构,它包括按照文档结构(诸如XML文档类型定义DTD)的形式定义布置的逻辑结构和存储单元。图2的结构包括用于识别一方的第一逻辑结构200。与逻辑结构200相关的是,嵌套了用于承载名称201、物理地址202、网络地址或单元203、以及一组服务事务204的逻辑结构。对于服务组中的每件事务,提供一接口定义,包括事务BID 205、事务BID 206和事务BID 207。在诸如事务BID 205等每个事务BID内,提供这样的逻辑结构,它们用于包含名称208、在网络上进行服务的位置209、由服务执行的操作210,以及一组由标签211表示的输入文档。另外,服务BID 205包括一组由标签212表示的输出文档。输入文档组211包括服务所响应的每个输入文档的商业接口定义,包括输入文档商业接口定义213、214和215。每个输入文档商业接口定义包括名称216、网络上可以找到文档描述的位置217,以及如字段218表示的在文档中携带的模块。类似地,输出文档组212包括输出文档的接口定义,包括输出文档BID 219、输出文档BID 220以及输出文档BID 221。对于每个输出文档BID,规定了名称222、网络上或其它地方的位置223、以及文档模块224。图2所示的参与者的商业接口定义包括逻辑结构的实际定义,它们将用于各种服务的输入和输出文档,或者可以找到这些定义位置的的指针或其它参考。
尽管可以使用其它文档定义结构,但在较佳系统中,图2的文档列在XML文档类型定义DTD中。另外,事务BID、输入文档BID和输出文档BID都是根据XML文档类型定义来规定的。XML型文档是一例基于分析数据的系统,所述分析数据包括标记数据和字符数据。标记数据识别文档内的逻辑结构,字符数据组识别逻辑结构的内容。另外,文档中还携带未分析的数据,用于各种目的。例如,参见WC3XML工作组在WWW.W3.ORG/TR/1998/REC-XML-19980210上公布的可扩充标记语言XML1.0REC-XML-19980210的规范说明。
因此,在一例示的系统中,网络中的参与者网点通过将商业系统和服务与商业活动接受和产生的XML编码文档互连,建立了虚拟的公司。例如一特定服务的商业接口定义建立以下内容:如果接收到一个与请求目录输入的BID相匹配的文档,那么将返回一个与目录输入的BID相匹配的文档。另外,如果接收到一个与定单BID相匹配的文档,并且可被接收终端接受,那么将返回与发票相匹配的文档。在XML文档输入本地商业系统之前,网络中的网点处理这些文档,其中本地商业系统是根据网络中任何给定系统的各种事务处理结构而建立的。因此,系统拆开相关的文档组(诸如,经MIMI编码的XML文档组),分析它们,产生“标记消息”流。将消息传送到例如使用下述事件收听器模型的适合的应用程序和服务。
用XML语言对商业服务之间交换的文档编码,其中XML语言由构成块的资源库建立,它是一种公用的商业语言,用该语言可以建立更复杂的文档定义。资源库存储了解释信息模块,着重于商业领域公共的功能和信息,包括诸如公司、服务和产品等商业描述原语;诸如目录、定单和发票等商业形式;诸如时间、日期的地址等标准度量;分类码;以及为XML文档中的逻辑结构提供解释信息的其它东西。
商业接口定义是一种高级文档,它起模式作用,用于根据本发明设计交易文档的接口。因此,商业接口定义在XML规定的文档和在一特定网点的事务处理服务的前端上执行的程序之间的间隙上架起了一座桥梁。这些前端可以用JAVA虚拟机或者其它使系统在网络上互连的普通结构来实现。因此,商业接口定义提供了一项技术,通过该技术,利用商业接口定义文档可以对事务处理协议编程。用文档型的详细形式规范建立事务处理协议的程序。
下面描述一例基于市场参与者文档的商业接口定义BID,其中所述市场参与者文档符合XML格式。市场参与者DTD对市场参与者的商业信息分组,使联系和地址信息与一种服务和金额信息的描述相关联。这种商业信息包括名称、代码、地址、用于描述商业机构的专用分类机制,以及用于商业术语的指针。另外,由市场参与者DTD标识的服务将规定希望参与者对之响应并产生的输入和输出文档。因此,下面是用例举的公用商业语言为市场参与者DTD、服务DTD和事务处理文档DTD(按XML规定)制定模式的文档,包括说明性的评述。
    市场参与者实例
    <!DOCTYPE SCHEMA SYSTEM″bidl.dtd″>
    <SCHEMA>
    <H1>Market Participant Sample BID</H1>
    <META
    WHO.OWNS=″Veo Systems″  WHO.COPYRIGHT=″Veo Systems″
    WHEN.COPYRIGHT=″1998″   DESCRIPTION=″Sample BID″
    WHO.CREATED=″*″         WHEN.CREATED=″*″
    WHAT.VERSION=″*″         WHO.MODIFIED=″*″
    WHEN.MODIFIED=″*″       WHEN.EFFECTIVE=″*″
    WHEN.EXPIRES=″*″         WHO.EFFECTIVE=″*″
    WHO.EXPIRES=″*″>
    </META>
    <PROLOG>
    <XMLDECL STANDALONE=″no″></XMLDECL>
    <DOCTYPE NAME=″market.participant″>
    <SYSTEM>markpart.dtd</SYSTEM></DOCTYPE>
    </PROLOG>
    <DTD NAME=″markpart.dtd″>
    <H2>Market Participant</H2>
    <H3>Market Participant</H3>
    <ELEMENTTYPE NAME=″market.participant″>
    <EXPLAIN><TITLE>A Market Participant</TITLE>
    <SYNOPSIS>A business or person and its service interfaces.</SYNOPSIS>
    <P>A market participant is a document definition that is created to describe a business and at least one
person with an email address,and it presents a set of pointers to service interfaces located on the network.
In this example,the pointers have been resolved and the complete BID is presented
here.</P></EXPLAIN>
    <MODEL><CHOICE>
    <ELEMENT NAME=″business″></ELEMENT>
    <ELEMENT NAME=″person″></ELEMENT>
    </CHOICE></MODEL></ELEMENTTYPE>
    <H3>Party Prototype</H3>
    <PROTOTYPE NAME=″party″>
    <EXPLAIN><TITLE>The Party Prototype</TITLE></EXPLAIN>
    <MODEL><SEQUENCE>
    <ELEMENT NAME=″party.name″OCCURS=″+″></ELEMENT>
    <ELEMENT NAME=″address.set″></ELEMENT>
    </SEQUENCE></MODEL>
    </PROTOTYPE>
    <H3>Party Types</H3>
    <ELEMENTTYPE NAME=″business″>
    <EXPLAIN><TITLE>A Business</TITLE>
    <SYNOPSIS>A business(party)with a business number attribute.</SYNOPSIS>
    <P>This element inherits the content model of the party prototype and adds a business number
attribute,which serves as a key for database lookup.The business number may be used as a cross-reference
to/from customer id,credit limits,contacts lists,etc.</P></EXPLAIN>
    <EXTENDS HREF=″party″>
    <ATTDEF NAME=″business.number″><REQUIRED></REQUIRED></ATTDEF>
    </EXTENDS>
    </ELEMENTTYPE>
    <H3>Person Name</H3>
    <ELEMENTTYPE NAME=″person″>
    <EXPLAIN><TITLE>A Person</TITLE></EXPLAIN>
    <EXTENDS HREF=″party″>
    <ATTDEF NAME=″SSN″><IMPLIED></IMPLIED></ATTDEF>
    </EXTENDS>
    </ELEMENTTYPE>
    <H3>Party Name</H3>
    <ELEMENTTYPE NAME=″party.name″>
    <EXPLAIN><TITLE>A Party′s Name</TITLE>
    <SYNOPSIS>A party′s name in a string of character.</SYNOPSIS></EXPLAIN>
    <MODEL><STRING></STRING></MODEL>
    </ELEMENTTYPE>
<H3>Address Set</H3>
<ELEMENTTYPE NAME=″address.set″>
<MODEL><SEQUENCE>
<ELEMENT NAME=″address.physical″></ELEMENT>
<ELEMENT NAME=″telephone″OCCURS=″*″></ELEMENT>
<ELEMENT NAME=″fax″OCCURS=″*″></ELEMENT>
<ELEMENT NAME=″email″OCCURS=″*″></ELEMENT>
<ELEMENT NAME=″internet″OCCURS=″*″></ELEMENT>
</SEQUENCE></MODEL>
</ELEMENTTYPE>
<H3>Physical Address</H3>
<ELEMENTTYPE NAME=″address.physical″>
<EXPLAIN><TITLE>Physical Address</TITLE>
<SYNOPSIS>The street address,city,state,and zip code.</SYNOPSIS></EXPLAIN>
<MODEL><SEQUENCE>
<ELEMENT NAME=″street″></ELEMENT>
<ELEMENT NAME=″city″></ELEMENT>
<ELEMENT NAME=″state″></ELEMENT>
<ELEMENT NAME=″postcode″OCCURS=″?″></ELEMENT>
<ELEMENT NAME=″country″></ELEMENT>
</SEQUENCE></MODEL>
</ELEMENTTYPE>
<H3>Street</H3>
<ELEMENTTYPE NAME=″street″>
<EXPLAIN><TITLE>Street Address</TITLE>
<SYNOPSIS>Street or postal address.</SYNOPSIS></EXPLAIN>
<MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE>
<H3>City</H3>
<ELEMENTTYPE NAME=″city″>
<EXPLAIN><TITLE>City Name or Code</TITLE>
    <P>The city name or code is a string that contains sufficient information to identify a city within a
designated state.</P>
    </EXPLAIN>
    <MODEL><STRING></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>State</H3>
    <ELEMENTTYPE NAME=″state″>
    <EXPLAIN><TITLE>State,Province or Prefecture Name or Code</TITLE>
    <P>The state name or code contains sufficient information to identify a state within a designated
country.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″COUNTRY.US.SUBENTITY″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Postal Code</H3>
    <ELEMENTTYPE NAME=″postcode″>
    <EXPLAIN><TITLE>Postal Code</TITLE>
    <P>A postal code is an alphanumeric code,designated by an appropriate postal authority,that is used
to identify a location or region within the jurisdiction of that postal authority.Postal authorities include
designated national postal authorities.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″string″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Country</H3>
    <ELEMENTTYPE NAME=″country″>
    <EXPLAIN><TITLE>Country Code</TITLE>
    <P>A country code is a two-letter code,designated by ISO,that is used to uniquely identify a
country.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″country″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Network Addresses</H3>
    <ELEMENTTYPE NAME=″telephone″>
    <EXPLAIN><TITLE>Telephone Number</TITLE>
    <P>A telephone number is a string of alphanumerics and punctuation that uniquely identifies a
telephone service terminal,including extension number.</P></EXPLAIN>
    <MODEL><STRING></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Fax</H3>
    <ELEMENTTYPE NAME=″fax″>
    <EXPLAIN><TITLE>Fax Number</TITLE>
    <P>A fax number is a string of alphanumerics and punctuation that uniquely identifies a fax service
terminal.</P>
    </EXPLAIN>
    <MODEL><STRING></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Email</H3>
    <ELEMENTTYPE NAME=″email″>
    <EXPLAIN><TITLE>Email Address</TITLE>
    <P>An email address is a datatype-constrained string that uniquely identifies a mailbox on a
server.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″email″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Internet Address</H3>
    <ELEMENTTYPE NAME=″internet″>
    <EXPLAIN><TITLE>Internet Address</TITLE>
    <P>An Internet address is a datatype-constrained string that uniquely identifies a resource on the
Internet by means of a URL.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″url″></STRING></MODEL>
    </ELEMENTTYPE>
    </DTD>
    </SCHEMA>
    服务描述实例
<!DOCTYPE schema SYSTEM″bidl.dtd″>
<SCHEMA>
<H1>Service Description Sample BID</H1>
<META
WHO.OWNS=″Veo Systems″   WHO.COPYRIGHT=″Veo Systems″
WHEN.COPYRIGHT=″1998″    DESCRIPTION=″Sample BID″
WHO CREATED=″*″          WHEN.CREATED=″*″
WHAT.VERSION=″*″         WHO.MODIFIED=″*″
WHEN.MODIFIED=″*″   WHEN.EFFECTIVE=″*″
WHEN.EXPIRES=″*″         WHO.EFFECTIVE=″*″
WHO.EXPIRES=″*″>
</META>
<PROLOG>
<XMLDECL STANDALONE=″no″></XMLDECL>
<DOCTYPE NAME=″service″>
<SYSTEM>service.dtd</SYSTEM></DOCTYPE>
</PROLOG>
<DTD NAME=″service.dtd″>
<H2>Services</H2>
<H3>Includes</H3>
<!--INCLUDE><SYSTEM>comments.bim</SYSTEM></INCLUDE-->
<H3>Service Set</H3>
<ELEMENTTYPE NAME=″service.set″>
<EXPLAIN><TITLE>Service Set</TITLE>
<SYNOPSIS>A set of services.</SYNOPSIS></EXPLAIN>
<MODEL>
<ELEMENT NAME=″service″OCCURS=″+″></ELEMENT>
</MODEL></ELEMENTTYPE>
<H3>Services Prototype</H3>
<PROTOTYPE NAME=″prototype.service″>
    <EXPLAIN><TITLE>Service</TITLE></EXPLAIN>
    <MODEL><SEQUENCE>
    <ELEMENT NAME=″service.name″></ELEMENT>
    <ELEMENT NAME=″service.terms″OCCURS=″+″></ELEMENT>
    <ELEMENT NAME=″service.location″OCCURS=″+″></ELEMENT>
    <ELEMENT NAME=″service.operation″OCCURS=″+″></ELEMENT>
    </SEQUENCE></MODEL>
    <!--ATTGROUP><IMPLEMENTS
    HREF=″common.attrib″></IMPLEMENTS></ATTGROUP-->
    </PROTOTYPE>
    <H3>Service</H3>
    <INTRO><P>A service is an addressable network resource that provides interfaces to specific
operations by way of input and output documents.</P></INTRO>
    <ELEMENTTYPE NAME=″service″>
    <EXPLAIN><TITLE>Service</TITLE>
    <P>A service is defined in terms of its name,the location(s)at which the service is available,and the
operation(s)that the service performs.</P></EXPLAIN>
    <MODEL><SEQUENCE>
    <ELEMENT NAME=″service.name″></ELEMENT>
    <ELEMENT NAME=″service.location″></ELEMENT>
    <ELEMENT NAME=″service.operation″OCCURS=″+″></ELEMENT>
    <ELEMENT NAME=″service.terms″></ELEMENT>
    </SEQUENCE></MODEL>
    </ELEMENTTYPE>
    <H3>Service Name</H3>
    <ELEMENTTYPE NAME=″service.name″>
    <EXPLAIN><TITLE>Service Name</TITLE>
    <P>The service name is a human-readable string that ascribes a moniker for a service.It may be
employed is user interfaces and documentation,or for other purposes.</P></EXPLAIN>
    <MODEL><STRING></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Service Location</H3>
    <ELEMENTTYPE NAME=″service.location″>
    <EXPLAIN><TITLE>Service Location</TITLE>
    <SYNOPSIS>A URI of a service.</SYNOPSIS>
    <P>A service location is a datatype-constrained string that locates a service on the Internet by means
of a URI.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″url″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Service Operations</H3>
    <INTRO><P>A service operation consists of a name,location and its interface,as identified by the
type of input document that the service operation accepts and by the type of document that it will return as
a result.</P></INTRO>
    <ELEMENTTYPE NAME=″service.operation″>
    <EXPLAIN><TITLE>Service Operations</TITLE>
    <P>A service operation must have a name,a location,and at least one document type as an input,with
one or more possible document types returned as a result of the operation.</P>
    </EXPLAIN>
    <MODEL><SEQUENCE>
    <ELEMENT NAME=″service.operation.name″></ELEMENT>
    <ELEMENT NAME=″service.operation.location″></ELEMENT>
    <ELEMENT NAME=″service.operation.input″></ELEMENT>
    <ELEMENT NAME=″service.operation.output″></ELEMENT>
    </SEQUENCE></MODEL>
    </ELEMENTTYPE>
    <H3>Service Operation Name</H3>
    <ELEMENTTYPE NAME=″service.operation.name″>
    <EXPLAIN><TITLE>Service Operation Name</TITLE>
    <P>The service operation name is a human-readable string that ascribes a moniker to a service
operation.It may be employed in user interfaces and documentation,or for other
purposes.</P></EXPLAIN>
    <MODEL><STRING></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Service Operation Location</H3>
    <INTRO><P>The service location is a network resource.That is to say,a URI.</P></INTRO>
    <ELEMENTTYPE NAME=″service.operation.location″>
    <EXPLAIN><TITLE>Service Operation Location</TITLE>
    <SYNOPSIS>A URI of a service operation.</SYNOPSIS>
    <P>A service operation location is a datatype-constrained string that locates a service operation on the
Internet by means of a URL.</P></EXPLAIN>
    <MODEL><STRING DATATYPE=″url″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Service Operation Input Document</H3>
    <INTRO><P>The input to a service operation is defined by its input document type.That is,the
service operation is invoked when the service operation location receives an input document whose type
corresponds to the document type specified by this element.</P>
    <P>Rather than define the expected input and outPut document types in the market participant
document,this example provides pointers to externally-defined BIDs.This allows reuse of the same BID
as the input and/or output document type for multiple operations.In addition,it encourages parallel design
and implementation.</P></INTRO>
    <ELEMENTTYPE NAME=″service.operation.input″>
    <EXPLAIN><TITLE>Service Operation Input</TITLE>
    <SYNOPSIS>Identifies the type of the service operation input document.</SYNOPSIS>
    <P>Service location input is a datatype-constrained string that identifies a BID on the Internet by
means of a URI.</P>
    </EXPLAIN>
    <MODEL><STRING DATATYPE=″url″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Service Operation Output Document Type</H3>
    <INTRO><P>The output of a service operation is defined by its output document type(s).That is,the
service operation is expected to emit a document whose type corresponds to the document type specified
by this element.</P></INTRO>
    <ELEMENTTYPE NAME=″service.operation.output″>
    <EXPLAIN><TITLE>Service Operation Output</TITLE>
    <SYNOPSIS>Identifies the type of the service operation output document.</SYNOPSIS>
    <P>Service location output is a datatype-constrained string that identifies a BID on the Internet by
means of a URI.</P>
    </EXPLAIN>
    <MODEL><STRING DATATYPE=″url″></STRING></MODEL>
    </ELEMENTTYPE>
    <H3>Service Terms</H3>
    <INTRO><P>This is a simple collection of string elements,describing the terms of an
agreement.</P></INTRO>
    <ELEMENTTYPE NAME=″service.terms″>
    <EXPLAIN><TITLE>Service Terms</TITLE>
    <SYNOPSIS>Describes the terms of a given agreement.</SYNOPSIS>
    </EXPLAIN>
    <MODEL><STRING DATATYPE=″string″></STRING></MODEL>
    </ELEMENTTYPE>
    </DTD>
    </SCHEMA>
可以如下所示,用公用商业语言资源库中的服务型元素扩充服务DTD模式。
<!ELEMENT service.type EMPTY>
<!ATTLIST service.type
       service.type.name(
       catalog.operator
       |commercial.directory.operator
       |eft.services.provider
       |escrower
       |fulfillment.service
       |insurer
       |manufacturer
       |market.operator
       |order.originator
       |ordering.service
       |personal.services.provider
   |retailer
   |retail.aggregator
   |schema.resolution.service
   |service.provider
   |shipment.acceptor
   |shipper
   |van
   |wholesale.aggregator
   )#REQUIRED
   %common.attrib;
>
上述服务型元素说明了由商业接口定义携带的解释信息,在本例中,一种内容形式允许识别一有效服务清单中的任何一个。其它解释信息包括数据类型,例如元素<H3>Internet Address</H3>,它包括内容形式“url”并用数据类型“串”表示。还有其它解释信息包括代码至清单元素的映像,例如元素<H3>State</H3>,它包括对文件“COUNTRY.US.SUBENTITY”中状态进行映像的代码。
由市场参与者DTD提到的服务描述定义了当完成服务时该服务接受并产生的文档。下面将基本服务描述指定为XML文档transact.dtd。
Transact.dtd模拟诸如发票等事务处理描述,或者对值交换的描述。这种文档类型支持许多种使用,因此事务描述元素具有允许用户区分发票、性能、表示出售和请求报价等属性。交换可以在两个以上的对象之间发生,但只取出两个对象,发价人和计算方,这两个对象都用指针表示,指针指向与上述市场参与者DTD相符的文档。计算方的指针是可选择的,以便适应出售意向。交换描述在以下所列的模块tranprim.mod中描述,并且包括定价和小计。在交换描述之后,可以提供作为整体应用于事务处理的费用,并且必须提供总的费用。因此,以下给出了本例的事务描述概要文档:
<!--transact.dtd Version:1.0-->
<!--Copyright 1998 Veo Systems,Inc.-->
<!ELEMENT transaction.description(meta?,issuer.pointer,
       counterparty.pointer?,exhange.descrption+,general.charges?,
       net.total?)>
<!ATTLIST transaction.description
       transaction.type(invoice|pro.forma|offer.to sell|order
               |request.for.quote|request.for.bid
               |request.for.proposal|response.to.request.for.quote
               |response.to.request.for.bid
               |response.to.request.for.proposal)″invoice″
         %common.attrib;
         %altrep.attrib;
         %ttl.attrib;
>
以下是根据上述定义建立的代表性的市场参与者和服务DTD:
市场参与者DTD
<!ELEMENT business(party.name+,address.set)>
<!ATTLIST business business.number CDATA #REQUIRED
    >
    <!ELEMENT party.name(#PCDATA)>
    <!ELEMENT city(#PCDATA)>
    <!ELEMENT internet(#PCDATA)>
    <!ELEMENT country(#PCDATA)>
    <!ELEMENT state(#PCDATA)>
    <!ELEMENT email(#PCDATA)>
    <!ELEMENT address.physical(street,city,state,postcode?,country)>
    <!ELEMENT telephone(#PCDATA)>
    <!ELEMENT person(party.name+,address.set)>
    <!ATTLIST person SSN CDATA #IMPLIED
               >
    <!ELEMENT fax(#PCDATA)>
    <!ELEMENT street(#PCDATA)>
    <!ELEMENT address.set(address.physical,telephone*,fax*,email*,internet*).>
    <!ELEMENT postcode(#PCDATA)>
    <!ELEMENT market.participant(business|person)>
    服务DTD
    <!ELEMENT service.location(#PCDATA)>
    <!ELEMENT service.terms(#PCDATA)>
    <!ELEMENT service.operation.name(#PCDATA)>
    <!ELEMENT service.operation (service.operation.name,service.operation.location,
service.operation.input,service.operation.output)>
    <!ELEMENT service(service.name,service.location,service.operation+,service.terms)>
    <!ELEMENT service.operation.input(#PCDATA)>
    <!ELEMENT service.operation.location(#PCDATA)>
    <!ELEMENT service.name(#PCDATA)>
    <!ELEMENT service.set(service+)>
    <!ELEMENT service.operation.output(#PCDATA)>
    以下是根据transact.dtd产生的一例文档:
            <?xml version=″1.0″?>
            <!--rorder.xml Version:1.0-->
            <!--Copyright 1998 Veo Systems,Inc.-->
            <!DOCTYPE transaction.desc ription SYSTEM″urn:x-
            veosystems:dtd:cbl:transact:1.0:>
            <transaction.description transaction.type=″order″>
            <meta>
            <urn?urn:x-veosystems:doc:00023
            </urn>
                   <thread.id party.assigned.by=″reqorg″>FRT876
                   </thread.id>
            </meta>
                   <issuer.pointer>
                           <xll.locator urllink=″reqorg.xml″>Customer
                           Pointer
                           </xll.locator>
            </issuer.pointer>
            <counterparty.pointer>
                       <xll.locator urllink=″compu.xml″>Catalog entry owner
                       pointer
                  </xll.locator>
           </counterparty.pointer>
    <exchange.description>
    <line.item>
            <product.instance>
            <product.description.pointer>
                    <xll.locator urllink=″cthink.xml″>Catalogue Entry Pointer
                    </xll.locator>
    </product.desc ription.pointer>
    <product.specifics>
    <info.description.set>
<info.description>
<xml.descriptor>
        <doctype>
        <dtd system.id=″urn:x-veosystems:dtd:cbl:gprod:1.0″/>
        </doctype>
        <xml.descriptor.details>
        <xll.xptr.frag>DESCENDANT(ALL,os)STRING(″Windows 95″)
        </xll.xptr.frag>
        <xll.xptr.frag>DECENDANT(ALL,p.speed)STRING(″200″)
        </xll.xptr.frag>
        <xll.xptr.frag>DESCENDANT(ALL,hard.disk.capacity)
                   STRING(″4″)
        </xll.xptr.frag>
        <xll.xptr.frag>DESCENDANT(ALL,d.size)STRING(″14.1″)
        </xll.xptr.frag>
        </xml.descriptor.details>
</xml.descriptor>
</info.description>
        </info.description.set>
        </product.specifics>
<quantity>1
</quantity>
        </product.instance>
<shipment.coordinates.set>
<shipment.coordinates>
<shipment.destination>
             <address.set>
    <address.named>SW-1
    </address.named>
    <address.physical>
             <building.sublocation>208C</building.sublocation>
             <location.in.street>123
             </location.in.street>
             <street>Frontage Rd.
             </street>
             <city>Beltway
             </city>
              <country.subentity.us
              country.subentity.us.name=″MD″/>
              <postcode>20000
              </postcode>
    </address.physical>
    <telephone>
               <telephone.number>617-666-2000
               </telephone.number>
               <telephone.extension>1201
               </telephone.extension>
       </telephone>
       </address.set>
</shipment.destination>
<shipment.special>No deliveries after 4PM</shipment.special>
</shipment.coordinates>
</shipment.coordinates.set>
    <payment.set>
    <credit.card
    issuer.name=″VISA″
    instrument.number=″3787-812345-67893″
    expiry.date=″12/97″
    currency.code=″USD″/>
    <amount.group>
                    <amount.monetary currency.code=″USD″>3975
                    </amount.monetary>
             </amount.group>
             </payment.set>
    </line.item>
    </exhange.description>
    </transaction.description>
因此,本发明提供了一项技术,利用该技术,市场参与者可以识别其本身,并且识别输入文档的类型和输出文档的类型,利用这些识别结果市场参与者将进行商业活动。由交易其余方或本地方处理这些文档中所载内容的特定方式不包括在建立商业关系和进行事务处理的过程中。
图3提供了一简化图,示出了依照本发明的网络中的参与者网点。图3所示的网点包括一网络接口300,它在端口301上与通信网相连。网络接口与文档语法分析器301相连。语法分析器301将来自输入文档的逻辑结构提供给翻译器模块302,翻译器模块将输入文档翻译成主交易系统可以使用的形式,并且反过来将主过程的输出翻译成与商业接口定义中输出文档形式相匹配的文档格式,以便传送到目的地。语法分析器301和翻译器302对参与者模块303中存储的商业接口定义作出响应。
将来自翻译器302的输出数据结构和语法分析器301发出的信号事件一起提供给事务处理过程前端304。一个实施例中的前端304包括JAVA虚拟机或其它类似的适于在网络不同网点之间通信的接口。事务处理前端304对语法分析器301和翻译器302表示的事件作出响应,以便将输入数据传送给企业系统和网络中与参与者相连的适当功能。因此图3示例中的事务处理过程前端304与商务功能305、数据库功能306、诸如会计和记账等其它企业功能307,并且与特殊的事件收听器和处理器308相连,其中装置308被设计成响应语法分析器所表示的事件。
语法分析器301获得类似上例中的定单,或者根据商业接口定义规定的其它文档,并且产生一组事件,所述事件用本地事务处理结构(诸如JAVA虚拟机的一组JAVA事件)来识出。
本发明的语法分析器不与根据接收文档收听事件的程序相连。满足某些规范说明的接收文档或完整文档的各标记段起收听功能指令的作用,以便开始处理。因此,收听程序完成与文档信息相关的商业逻辑。例如,与地址元素相关的程序可以是通过检查数据库而使邮政编码生效的代码。这些收听器通过用文档路由选择器进行登记来订购事件,路由选择器将相关的事件发送给对它们感兴趣的所有用户。
例如,可以用收听语法分析器产生之事件的程序来监视上述规定的定单,该程序会将文档或其内容与定单输入程序相连。接收购货定单内的产品说明将调用一程序,以检查存货。然后,接收购货定单内的地址信息将调用一程序,以检查交货服务的可用性。文档中的买方信息字段可以调用一些过程,以检查信用度的购货定单历史,或者在已知消费者身份的基础上提供提升或类似的处理。
复杂的收听器可以对原始收听器进行配置而构成。例如,定单收听器可以包含和调用前一段给出的清单收听器,或者可以对其自身调用清单成员。注意,收听器运行的应用程序不可能是本机XML过程或本机JAVA过程。在这些情况下,可以将对象转换成接收转换应用程序所要求的格式。当应用程序完成处理时,将其输出转换回XML格式,以便传输给网络中的其它网点。
可以看出,上述市场参与文档型描述和事务文档型描述包括一个示意性的用于文档中逻辑单元的映像,并且包括基于自然语言的标记语言。自然语言标记和XML的其它自然语言属性便于将XML型标记语言用于对商业接口定义的说明,服务描述以及对输入和输出文档的描述。
参与者模块303除了存储商业接口定义,还包括一编译程序,它用来编译事务处理过程前端304将要使用的对象或其它数据结构,其中事务处理过程前端304对应于输入文档中的逻辑结构,并且还对翻译器302进行编译。因此,由于当参与者涉及的事务改变时,参与者会修改或更新商业接口定义,所以翻译器302和语法分析器301将自动保持最新。
在一较佳实施例中,用对应于grove型SGML的编译程序产生一组JAVA事件,主要为标准元件结构信息组增加每个元件的“性能组”。国际标准ISO/IEC10179:1996(E),信息技术--处理语言--文档型语义和说明语言(DSSSL)。将XML文档变成一组全球事件,以便对照正常的分析模型,在正常分析模型中,语法分析器的输出保持为内部的数据结构。通过将XML文档的元素翻译成JAVA事件或其它适于各网点事务处理前端使用的编程结构,可以在使用被交易文档的网点处获得丰富的功能。
因此,事务处理过程前端304能够公开操作,并且预订能够增加收听器程序而不用知道或影响系统中其它收听程序的结构。图3中的每个收听器305、306、307和308保持一队列,前端304按该队列引导事件。这可以使多个收听器处理按其自身步调并行处理事件。
另外,依照本发明,收听器运行的应用程序不需要本机XML功能,或者与输入文档格式相匹配的本机功能。如果事务处理过程前端304是JAVA接口,那么这些收听器可以是JAVA功能,或者是根据唯一事务处理结构运行的功能。在这些情况下,可以将对象转换成接收应用程序所要求的格式。当收听器的应用程序结束时,将其输出转换回如模块303中商业接口定义所规定的文档格式。因此,翻译器302与网络接口300相连,直接用于提供组织好的文档,作为输出。
与事务处理前端相连的收听器可以包括用于输入文档收听器、用于输入文档中具体元素的收听器,以及用于存储在输入文档特定元素中的属性的收听器。这可以对参与者网点处的事务处理过程进行不同的且灵活的实现,以便过滤和响应输入文档。
图4示出了对于图3的系统接收和处理输入文档的过程。因此,过程开始是在网络接口接收一文档(步骤400)。语法分析器响应于商业接口定义识别文档类型(401)。利用该商业接口定义(它存储了XML格式文档的DTD),对文档进行语法分析(步骤402)。接下来,将文档的元素和属性翻译成主格式(步骤403)。在本例中,将XML逻辑结构翻译成JAVA对象,该对象载有XML元素的数据以及与诸如获取和设置功能等数据相关的方法。接下来,将主对象传递给主事务处理前端(步骤404)。响应于语法分析器和翻译器所表示的事件,将这些对象提供给某些过程。执行用于接收文档元素的过程,并且产生一输出(步骤405)。将输出翻译成如商业接口定义所定义的输出文档格式(步骤406)。在本例中,翻译从JAVA对象的形式进行到XML文档的形式。最后,通过网络接口将输出文档传送到目的地。
图5更详细地描述了图3所示系统的事件生成器/事件收听器机构。一般来说,图5所示的方法是对JAVA JDK 1.1事件模型的精练。在该模型中,考虑三种对象。第一种对象是事件对象,它包含事件发生的信息。可以有许多种事件对象,它们对应于所有可能发生的不同事件。第二种对象是事件生成器,它监视活动,并且当发生某些事情时产生事件对象。第三种是事件收听器,它收听由事件生成器产生的事件对象。事件收听器一般收听特殊的事件生成器,诸如用鼠标器在特定的窗口上点击。事件收听器在事件生成器上调用“增加事件收听器”。该模型适用于图3的环境,在图3的环境中,响应分析和走过诸如XML文档所表示的对象曲线,来产生各对象。
图5所示的系统包括一个普通XML语法分析器500。这种语法分析器可以用标准的回调模型来实现。当发生分析事件时,语法分析器调用应用对象中的特定方法,传送参数中的合适信息。因此,单个应用程序501与语法分析器在一起。如方框502所表示的,应用程序对XML事件对象中语法分析器所提供的信息进行封装,并且将其发送给许多已识别其本身的事件收听器。事件组502对语法分析器是完全独立的。可以将事件502提供给任何数目机器上的任何多收听器和任何多线程(thread)。在另一种情况下,事件基于元素结构信息组ESIS。因此,它们包括由文档结构的重要方面构成的清单,诸如元素的开始和结束,或者对属性的辨认。XML(和SGML)语法分析器一般将ESIS结构用作一组缺省信息,供语法分析器返回其应用程序。
将专用ESIS收听器503与一组事件502相连。该收听器503实现ESIS收听器API,并且收听来自一个或多个生成器的所有XML事件。元素事件生成器504是一种专用ESIS收听器,它也是一个XML事件生成器。它的收听器是只对特殊类型元素的事件感兴趣的对象。例如在HTML环境中,收听器只对定单感兴趣,这只是<OL>和</OL>标签之间的文档部分。在另一例子中,收听器根据公用商业语言,从以上例举的文档中收听“party.name”元素,或者“service.name”元素;处理事件,以保证元素携带与元素的示意性映像相匹配的数据;并且根据接收网点所需的过程起作用。
这允许系统具有较小的对象,它们收听文档的特定部分,诸如只相加价格部分。由于收听器可以从生成器中增加和删除其本身,所以可以有一个收听器只收听使用HTML文档<首标>部分。由于这一原因以及XML文档的高度递归特性,所以可以写出高度目标化的代码,并且写出迸发的收听器。例如,<OL>收听器可以建立<LI>收听器,其方式完全独立于<UL>(未定购的清单)收听器建立其<LI>收听器的方式。另一种方法是,建立一个产生图形用户接口的收听器,建立另一个用同一输入搜索数字库的收听器。因此,将文档视作由收听器执行的程序,与应用程序每次检查一段的精练的数据结构相反。如果用这种方法写应用程序,那么不必将整个文档放入内存中,以执行应用程序。
与事件组502相连的下一个收听器是属性过滤器505。属性过滤器505象元素过滤器504一样是根据ESIS收听器模型的属性事件生成器。用于属性过滤器的收听器规定了它感兴趣的属性,并且接收具有该规定属性的任何元素的事件。因此例如,字体管理器只接收具有字体属性的元素事件,诸如<PFONT=“Times Roman”/p>。
元素事件生成器504提供这类元素对象,以便使元素收听器504A专门化。
属性事件生成器505将属性事件对象提供给属性收听器505A。同样,在用属性从一种文档类型转换成另一种的SGML/XML变换的意义上,将属性对象提供给一种“结构”。因此,505B的结构允许一特定的属性具有一个可区分的特定名称。只有具有该规定属性的元素才会变成输出文档的一部分,并且输出文档中的元素名称是输入文档中的属性值。例如,如果结构505B是HTML,那么串:
<PURCHASES HTML=″OL″><ITEM HTML=″LI″><NAME
HTML=″B″>STUFF</NAME><PRICE
HTML=″B″>123</PRICE></ITEM></PURCHASES>
翻译成:
<OL><LI><B>STUFF</B><B>123</B></LI></OL>这是正确的HTML。
与事件组502相连的下一个模块是树构成器。树构成器取一个XML事件流,并且产生代表基础文档的树。树构成器506的一种较佳版本根据W3C的规范说明(参见,http://www.w3.org/TR/1998/WD-DOM-19980720),产生文档对象模型DOM对象507。但是,可以用事件流中的收听器处理大多数要求,树的版本适用于支持围绕文档的问询、网点的重排序、创建新的文档,并且支持可用来多次产生同一事件流的内存中的数据结构结构,例如象多次分析文档。可以将专用构成器508与树构成器506相连,以便为文档的各个部分构成特殊的子树,适应一特定的实施情况。
除了响应输入文档之外,还可以提供XML事件的其它源。因此,通过走过DOM对象树并且再生对文档分析时所建立的原始事件流,来产生事件流510。这允许系统表现出文档被分析了若干次。
使对象走过树并产生事件流的想法可以推广到DOM对象树以外,推广到可以质询的任何对象树。因此,JAVA行走器512可以是走过JAVA豆构件树513的应用程序。行走器走过所有可公开访问的字段和方法。行走器跟踪它已经访问过的对象,保证不进入死循环。JAVA事件514是JAVA行走器512产生的事件类型。这通常包括可以从对象中导出的大多数类型的信息。这是ESIS的JAVA等效体,并且允许将相同的编程方法应用于一般将用于JAVA对象的XML,尽管特别对于JAVA豆。
JAVA至XML事件生成器515构造了JAVA收听器和JAVA事件生成器。它接收来自JAVA行走器512的事件流514,并且翻译所选中的,以便将JAVA对象表示成XML文档。在一较佳实施例中,事件生成器515开发JAVA豆API。每个被观察的对象变成一个元素,元素名称与类别名称相同。在元素内,每个嵌入方法也变成这样一个元素,其内容是通过调用方法而返回的值。如果它是一个对象或者一个对象阵列,那么对它们轮流行走。
图6描绘了在图5框架上建立的特定应用程序。该应用程序在XML文档600中取得,并且将其应用于语法分析器/生成器601。产生ESIS事件602并将其提供给属性生成器603和树构成器604。属性生成器对应于图5的生成器505。它将事件提供给“结构”505B,以便将XML输入翻译成例如HTML输出。如方框605所表示的,并行处理这些事件,并且用收听器进行处理。将收听器的输出提供给文档书写器506,然后,翻译回到XML格式,进行输出。因此例如,图6所示的应用程序取XML文档,并且输出包括一种形式的HTML文档。然后,将该形式发送给浏览器,并且将结果转换回成XML。对于这一练习,结构概念提供了从XML到HTML的映像。图6中包括三种结构,一种提供了HTML文档的结构,诸如表格和列表;第二种规定了要显示的文本,诸如游览器文档上的输入字段标志;第三种描述了输入字段本身。在HTML形式下,XML文档中要求保持XML文档结构的元素变成不可见字段。这适用于由这样的信息重构XML文档,其中客户将所述信息译成HTTP邮寄消息,发回服务器。每个体系结构取得输入文档,并且将其转换成基于HTML子集的体系结构。收听这些事件的收听器输出HTML文档的事件,然后这些事件行至文档书写器对象。文档书写器对象收听XML事件,并且将它们转换回到XML文档。在本例中,对于所有收听体系结构的元素生成器来说,文档书写器对象是一个收听器。
图5和图6所示处理模块的构造方式代表了图3系统中语法分析器和事务处理过程前端的一个实施例。由图可见,提供了一种非常灵活的接口,通过这一接口,响应于输入XML文档或其它构造的文档格式,执行各种事务处理过程。
图7示出了与图3类似的网点,不同之处在于它包括商业接口定义构成器模块700。因此,图7的系统包括网络接口701、文档语法分析器702和文档翻译器703。翻译器703将其它输出提供给事务处理前端704,而事务处理前端704与诸如商务功能705、数据库706、企业功能707和其它普通收听器和处理器708等收听功能相连。如图7所示,商业接口定义构成器700包括用户接口、公用商业库CBL资源库、用于阅读补充商业接口定义的过程,以及编译程序。用户接口用来帮助企业依赖公用商业库资源库建立商业接口定义,并且阅读补充商业接口定义的能力。因此,可以将补充商业接口定义的输入文档指定为特定事务的输出文档,并且可以将补充商业接口定义的输出文档指定为这一事务处理过程的输入。用类似的方法,可以用从CBL资源库选出的构件组成事务商业接口定义。使用CBL资源库鼓励使用标准化的文档格式,诸如上述例举的模式(bidl)文档、在构成商业接口定义时的逻辑结构和解释信息,其中商业接口定义很容易被网络中的其它人采用。
商业接口定义构成器模块700还包括一编译程序,它用来生成翻译器703,翻译器根据主事务处理体系结构所产生的对象,并且管理分析功能702。
图8是一启发式的图,示出了存储在商业接口定义构成器700的资源库中的逻辑结构。因此,资源库存储代表当事方商业接口定义800,包括例如消费者BID 801、目录库BID 802、仓库BID 803和拍卖库BID 804。因此,联机市场上的新的参与者可以将一种最符合其商业活动的标准化BID选作基本接口描述。另外,资源库将存储一组服务商业接口定义805。例如,可以存储购货定单进入BID 806、购货定单跟踪BID 807、购货定单履行BID 808和目录服务BID 809。当市场中的新的参与者构成一个商业接口定义时,它可以选择存储在资源库中的标准化服务的商业接口定义。
除了当事方和服务BID之外,如字段810所示将输入和输出文档BID存储在资源库中。因此,可以将购货定单BID 811、发票BID 812、请求报价BID813、产品可用量报告BID 814,以及购货定单状态BID 815存储在资源库中。
除了在较佳实施例中根据XML指定为文档类型定义的商业接口定义之外,如字段816所示,资源库存储语义映像形式的解释信息。因此,可以将本例中用于规定重量817、货币818、尺寸819、产品标识符820和产品特性821的语义映像存储在资源库中。另外,解释信息为文档逻辑结构内的数据结构提供类型。
另外,如方框822所示,可以将组成商业接口定义时使用的逻辑结构存储在资源库中。因此,方框825可以提供用于提供地址信号的形式823,提供报价信号824的形式以及提供契约关系各项形式。当网络扩大时,CBL资源库也将扩大和标准化,以便新参与者的增加以及对商业接口定义的修改更方便。
图9示出了用图7系统构成商业接口定义的过程。过程开始于向用户显示BID构成器图形接口(步骤900)。系统接受用户输入,识别由图形接口产生的参与者、服务和文档信息(步骤901)。
接下来,响应通过图形用户接口的用户输入,从资源库中检索任何被引用的逻辑结构、解释信息和文档定义和/或服务定义(步骤902)。在下一步骤中,由网络中通过用户输入选中的其它参与者,通过定制的搜索引擎、web浏览器或类似手段,访问任何补充的商业接口定义或商业接口定义的构件(步骤903)。用收集到的信息建立参与者的文档定义(步骤904)。用编译程序建立文档至宿主和宿主至文档的翻译器(步骤905)。用编译程序建立与定义对应的主体系结构数据结构(步骤906),并且在网络上邮寄已建立的商业接口定义,诸如张贴在环球网站点或其它地方,使其对于网络中的其它网点可访问(步骤907)。
商业接口定义告诉潜在的贸易伙伴公司所提供的联机服务,以及用哪些文档来调用这些服务。因此,用它们接受和产生的文档将服务定义在商业接口定义中。在以下XML服务定义的片段中说明这一点。
<service>
<service.name>Order Service</service.name>
<service.location>www.veosystems.com/order</service.location>
<service.op>
<service.op.name>Submit Order</service.op.name>
<service.op.inputdoc>www.commerce.net/po.dtd</service.op.inputdoc>
<service.op.outputdoc>
        www.veosystems.com/invoice.dtd</service.op.outputdoc>
</service.op>
<service.op>
<service.op.name>Track Order</service.op.name>
<service.op.inputdoc>www.commerce.net
        /request.track.dtd<service.op.inputdoc>
<service.op.outputdoc>
        www.veosystems.com/response.track.dtd<service.op.outputdoc>
</service.op>
</service>
该XML片段定义了由两件事务组成的服务,一种事务是取得购货定单,另一种事务用于跟踪它们。如果将有效请求发送给规定的Weg地址,那么每个定义表示一种履行服务的联系或承诺。这里购货定单服务需要一种输入文档,该文档符合资源库中标准“po.dtd”文档类型定义,它可以是本地的,或者存储在网络上的行业范围登记中。如果一个网点可以履行该购货定单,那么它将返回一个符合定制“invoice.dtd”的文档,其定义是本地的。事实上,公司在承诺与发出购货定单的任何人做生意,其中购货定单符合它要求的XML规范说明。不需要任何在先的安排。
DTD是具有给定类型的文档的形式规范说明或语法;它描述了元素、其属性和它们必须出现的次序。例如,购货定单一般包括买方和卖方的名称和地址、一组产品描述,以及诸如价格和发货日期等术语和条件。例如在电子数据交换EDI中,X12 850是一种常用的购货定单模型。
资源库鼓励用对于许多商业领域公用的可重新使用的语义构件来开发XML文档模型。这类文档可以从它们的公用消息元素来理解,即使它们可以表现得非常难。这是公用商业库资源库的作用。
公用商业库资源由一般商业概念的信息模型组成,所述概念包括:
●诸如公司、服务和产品等商业描述原语;
●诸如目录、购货定单和发票等商业形式;
●标准度量、日期和时间、位置、分类码。
将此信息表示成一组可扩充的、公开的XML构成块,公司可以定制和组装这些构成块,快速开发XML应用程序。原子CBL元素实现了行业的消息发送标准和公约,诸如用于国家、货币、地址和时间的标准ISO代码。低级的CBL语义也来自对互联网资源之推荐的元数据框架(诸如,Dublin核)的分析。
下一等级的元素用这些构成块实现基本的商业形式,诸如那些在X12 EDI事务处理中使用的形式以及那些在形成互联网标准(诸如公开交易协议OTP和在互联网上公开购买OBI)时使用的形式。
CBL的重点是对于所有商业领域公用的功能和信息(诸如公司、服务和产品等商业描述原语;诸如目录、购货定单和发票等商业形式;标准度量、时期和时间、位置、分类码)。CBL在可能的语义标准或行业公约上构成(例如,在分立的CBL模型中对下述规则编码,即规定欧洲的“日期/月份/年份”对美国的“月份/日期/年份”)。
CBL是一种用于设计应用程序的语言。它被设计成连接XML“文档世界”和JAVA“编程世界”或其它事务处理体系结构之间的差距。模式体现了一种“用文档编程”的哲学思想,在该方法中,文档类型的详细形式规范说明是主源,由该主源可以生成各种相关的表格。这些表格包括用于CBL的XML DTD、JAVA对象、用于将XML的实例和对应的JAVA对象相互转换并支持文档的程序。
CBL建立单个源,编译程序通过该源可以自动生成系统的几乎所有片段。CBL通过扩充SGML/XML来工作,而SGML/XML通常用来正式定义特定文档类型的结构,以便包括与每个信息元素和属性相关的语义的规范说明。可以扩充由SGML/XML大部分字符类型组成的有限组,以定义任何种数据类型。
这里是来自CBL定义的关于“日期时间”模块的一个片段:
<!--datetime.mod Version:1.0-->
<!--Copyright 1998 Veo Systems,Inc.-->
<!ELEMENT year(#PCDATA)>
<!ATTLIST year
      schema CDATA#FIXED″urn:x-veosystems:stds:iso:8601:3.8″
>
<!ELEMENT month(#PCDATA)>
<!ATTLIST month
      schema CDATA#FIXED″urn:x-veosystems:stds:iso:8601:3.12″
>
在该片段中,将元素“年”定义为字符数据,并且相关的“模式”属性也定义为字符数据,它将“年”的模式定义为ISO 8601标准的3.8节。
此“日期时间”CBL模块事实上被定义为模式DTD的实例。首先,定义模块名称。然后,将“日期时间”元素“年”限制到ISO 8601的语义。
<!DOCTYPE SCHEMA SYSTEM″schema.dtd″>
<SCHEMA><H1>Date and Time Module</H1>
<ELEMNTTYPE NAME=″year″DATATYPE=″YEAR″><MODEL>
     <STRING
DATATYPE=″YEAR″></STRING></MODEL>
<ATTDEF  NAME=:schema:iso8601″DATATYPE=″CDATA″>
<FIXED>3.8
Gregorian calendar</FIXED></ATTDEF></ELEMENTTYPE>
上述例举的市场参与者和服务模块也存储在CBL资源库中。
在图10中,通过定制普通的购货定单DTD 1001,增加更具体的关于运送重量的信息1002,来定义航空帐单1000。普通购货定单1001最初全部用有关地址、日期和时间、货币,以及卖主和产品描述的CBL模块来组装。因此,使用CBL明显加速了XML商务应用程序的开发和实施。更重要的是,CBL使商务应用程序更容易互连。
在CBL中,用一种模式扩充XML。扩充为XML元素增加了强类型,致使很容易使内容有效。例如,可以将元素<CPU_clock_speed>定义为一个具有一组有效值为{100,133,166,200,233,266Mhz}的整数。模式还增加了类-子类的层次,致使很容易由类定义例示信息。例如,可以将膝上型计算机描述成具有有关显示类型和电池寿命等特征附加标签的一个计算机。这些和其它扩充方便了数据的输入,以及在XML与传统的面向对象的和关系数据模型间的自动翻译。
因此,通过编译程序、JAVA豆和转换代码运行完整的BID,编译程序如上所述为参与者和服务的实际实例产生DTD,JAVA豆对应于DTD实例中的逻辑结构,而转换代码用于从XML至JAVA以及从JAVA至XML的转换。在另一些系统中,还生成文档,显示在用户接口上,或者由用户打印出来,以便于对象的使用。
对于上述例举的市场参与者和服务DTD,由编译程序生成的JAVA豆叙述如下(为简明起见,使用一些新版本):
    import com.veo.vsp.doclet.meta.Document;
public class AddressPhysical extends Document{
    public static finalString DOC_TYPE=″address.physical″;
    String mStreet;
    String mCity;
    public final static int AK=0;
    public final static int AL=1;
    public final static int AR=2;
    public final static int AZ=3;
    public final static int CA=4;
    public final static int WI=48;
    public final static int WV=49;
    public final static int WY=50;
    int mS tate;
    String mPostcode;
    public final static int AD=51;
    public final static int AE=52;
    public final static int AF=53;
    public final static int AG=54;
    public final static int AI=55;
    public final static int AM=56;
    int mCountry;
    public AddressPhysical(){
            super(DOC_TYPE);
    mStreet=new String();
    mCity=new String();
           this.mS tate=-1;
    mPostcode=null;
           this.mCountry=-1;
    }
    public AddressPhysical(String doc_type){
           super(doc_type);
    mStreet=new String();
    mCity=new String();
           this.mState=-1;
    mPostcode=null;
           this.mCountry=-1;
    }
    static public AddressPhysical initAddressPhysical(String iStreet,String  iCity,int iState,String
iPostcode,int iCountry){
                 AddressPhysical obj=new AddressPhysical();
                 obj.initializeAll(iStreet,iCity,iState,iPostcode,iCountry);
                 return obj;
    }
    public void initializeAll(String iStreet,String iCity,int iState,String iPostcode,int iCountry){
            mStreet=iStreet;
            mCity=iCity;
            mState=iState;
            mPostcode=iPostcode;
            mCountry=iCountry;
    }
    public String getStreet(){
    return mStreet;
    }
    public String getStreetToXML(){
            if(getStreet()==null)return null;
            char[]c=getStreet().toCharArray();
            StringBuffer sb=new StringBuffer();
            for(int x=0;x<c.length;x++){
            switch(c[x]){
            case′>′:
            sb.append(″&gt;″);
            break;
            case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setStreet(String inp){
        this.mStreet=inp;
}
public void streetFromXML(String n){
        setStreet(n);
}
public String getCity(){
return mCity;
}
public String getCityToXML(){
        if(getCity()==null)return null;
        char[]c=getCity().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
    break;
    case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setCity(String inp){
    this.mCity=inp;
}
public void cityFromXML(String n){
    setCity(n);
}
public int getState(){
return mState;
}
public String getStateToXML(){
        switch(mState){
               case AK:return″AK″;
               case AL:return″AL″;
               case AR:return″AR″;
               case AZ:return″AZ″;
    }
return null;
}
public void setState(int inp){
    this.mState=inp;
}
public void stateFromXML(String s){
    if(s.equals(″AK″))mState=AK;
    else if(s.equals(″AL″))mState=AL;
    else if(s.equals(″AR″))mState=AR;
    else if(s.equals(″AZ″))mState=AZ;
}
public String getPostcode(){
return mPostcode;
}
public String getPostcodeToXML(){
        if(getPostcode()==null)return null;
        char[]c=getPostcode().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
    sb.append(″&quot;″);
    break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setPostcode(String inp){
        this.mPostcode=inp;
}
public void postcodeFromXML(String n){
       setPostcode(n);
}
public int getCountry(){
return mCountry;
}
public String getCountryToXML(){
        switch(mCountry){
              case AD:return″AD″;
              case AE:return″AE″;
              case AF:return″AF″;
         }
return null;
}
public void setCountry(int inp){
        this.mCountry=inp;
}
public void countryFromXML(String s){
    if(s.equals(″AD″))mCountry=AD;
    else if(s.equals(″AE″))mCountry=AE;
    else if(s.equals(″AF″))mCountry=AF;
    else if(s.equals(″AG″))mCountry=AG;
    else if(s.equals(″AI″))mCountry=AI;
    }
}
package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;
public class AddressSet extends Document{
    public static final String DOC_TYPE=″address.set″;
    AddressPhysical mAddressPhysical;
    String[]mTelephone;
    String[]mFax;
    String[]mEmail;
    String[]mInternet;
    public AddressSet(){
    super(DOC_TYPE);
    this.mAddressPhysical=new AddressPhysical();
    mTelephone=null;
    mFax=null;
    mEmail=null;
    mInternet=null;
    }
    public AddressSet(String doc_type){
    super(doc_type);
    this.mAddressPhysical=new AddressPhysical();
    mTelephone=null;
    mFax=null;
    mEmail=null;
    mInternet=null;
    }
    static public AddressSet initAddressSet(AddressPhysical iAddressPhysical,String[]
iTelephone,String[]iFax,String[]iEmail,String[]iInternet){
                 AddressSet obj=new AddressSet();
                 obj.initializeAll(iAddressPhysical,iTelephone,iFax,iEmail,iInternet);
                 return obj;
    }
    public void initializeAll(AddressPhysical iAddressPhysical,String[]iTelephone,String[]
iFax,String[]iEmail,String[]iInternet){
                mAddressPhysical=iAddressPhysical;
                mTelephone=iTelephone;
                mFax=iFax;
                mEmail=iEmail;
               mInternet=iInternet;
    }
    public AddressPhysical getAddressPhysical(){
    return mAddressPhysical;
    }
    public void setAddressPhysical(AddressPhysical inp){
            this.mAddressPhysical=inp;
    }
    public String[]getTelephone(){
    return mTelephone;
    }
    public String getTelephone(int index){
            if(this.mTelephone==null)
            return null;
            if(index>=this.mTelephone.length)
            return null;
            if(index<0&&-index>this.mTelephone.length)
            return null;
            if(index>=0)return this.mTelephone[index];
            return this.mTelephone[this.mTelephone.length+index];
    }
public String[]getTelephoneToXML(){
    String[]valArr=getTelephone();
    if(valArr==null)return null;
    String[]nvArr=new String[valArr.length];
    for(int z=0;z<nvArr.length;z++){
    char[]c=valArr[z].toCharArray();
    StringBuffer st=new StringBuffer();
    StringBuffer sb=new StringBuffer();
    for(int x=0;x<c.length;x++){
    switch(c[x]){
    case′>′:
    sb.append(″&gt;″);
    break;
    case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case″′:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    nvArr[z]=sb.toString();
    }
    return nvArr;
}
public void setTelephone(int index,String inp){
    if(this.mTelephone==null){
            if(index<0){
            this.mTelephone=new String[1];
            this.mTelephone[0]=inp;
            }else{
            this.mTelephone=new String[index+1];
            this.mTelephone[index]=inp;
            }
    }else if(index<0){
                     String[]newTelephone=new String[this.mTelephone.length+1];
                     java.lang.System.arraycopy((Object)mTelephone,0,
(Object)newTelephone,0,this.mTelephone.length);
                      newTelephone[newTelephone.length-1]=inp;
                      mTelephone=newTelephone;
             }else if(index>=this.mTelephone.length){
                      String[]newTelephone=new String[index+1];
                      java.lang.System.arraycopy((Object)mTelephone,0,
(Objec t)newTelephone,0,this.mTelephone.length);
                      newTelephone[index]=inp;
                      mTelephone=newTelephone;
                }else{
                      this.mTelephone[index]=inp;
                }
    }
    public void setTelephone(String[]inp){
            this.mTelephone=inp;
    }
    public void telephoneFromXML(String n){
            setTelephone(-1,n);
    }
    public String[]getFax(){
    return mFax;
    }
    public String getFax(int index){
             if(this.mFax==null)
    return null;
    if(index>=this.mFax.length)
    return null;
    if(index<0&&-index>this.mFax.length)
    return null;
    if(index>=0)return this.mFax[index];
    return this.mFax[this.mFax.length+index];
}
public String[]getFaxToXML(){
        Strung[]valArr=getFax();
        if(valArr==null)return null;
        String[]nvArr=new String[valArr.length];
        for(int z=0;z<nvArr.length;z++){
        char[]c=valArr[z].toCharArray();
        StringBuffer st=new StringBuffer();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case″′:
        sb.append(″&quot;″);
        break;
        default:
        if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    nvArr[z]=sb.toString();
    }
    return nvArr;
}
public void setFax(int index,String inp){
if(this.mFax==null){
        if(index<0){
        this.mFax=new String[1];
        this.mFax[0]=inp;
        }else{
        this.mFax=new String[index+1];
        this.mFax[index]=inp;
        }
}else if(index<0){
               String[]newFax=new String[this.mFax.length+1];
               java.lang.Sys tem.arraycopy((Object)mFax,0,(Object)newFax,0,
this.mFax.length);
               newFax[newFax.length-1]=inp;
               mFax=newFax;
    }else if(index>=this.mFax.length){
               String[]newFax=new String[index+1];
               java.lang.System.arraycopy((Object)mFax,0,(Object)newFax,0,
this.mFax.length);
               newFax[index]=inp;
               mFax=newFax;
        }else{
              this.mFax[index]=inp;
        }
    }
    public void setFax(String[]inp){
             this.mFax=inp;
    }
public void faxFromXML(String n){
        setFax(-1,n);
}
public String[]getEmail(){
return mEmail;
}
public String getEmail(int index){
        if(this.mEmail==null)
        return null;
        if(index>=this.mEmail.length)
        return null;
        if(index<0&&-index>this.mEmail.length)
        return null;
        if(index>=0)return this.mEmail[index];
        returnthis.mEmail[this.mEmail.length+index];
}
public String[]getEmailToXML(){
        String[]valArr=getEmail();
        if(valArr==null)return null;
        String[]nvArr=new String[valArr.length];
        for(int z=0;z<nvArr.length;z++){
        char[]c=valArr[z].toCharArray();
        StringBuffer st=new StringBuffer();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case″′:
        sb.append(″&quo t;″);
        break;
        default:
        if(Characte risDefined(c[x]))
        sb.append(c[x]);
        }
        }
        nvArr[z]=sb.toString();
        }
        return nvArr;
}
public void setEmail(int index,String inp){
if(this.mEmail==null){
        if(index<0){
        this.mEmail=new String[1];
        this.mEmail[0]=inp;
        }else{
        this.mEmail=new String[index+1];
        this.mEmail[index]=inp;
        }
}else if(index<0){
              String[]newEmail=new String[this.mEmail.length+1];
              java.lang.System.arraycopy((Object)mEmail,0,(Object)newEmail,0,
this.mEmail.length);
              newEmail[newEmail.length-1]=inp;
              mEmail=newEmail;
      }else if(index>=this.mEmail.length){
              String[]newEmail=new String[index+1];
              java.lang.System.arraycopy((Object)mEmail,0,(Object)newEmail,0,
this.mEmail.length);
              newEmail[index]=inp;
          mEmail=newEmail;
    }else{
          this.mEmail[index]=inp;
    }
}
public void setEmail(String[]inp){
        this.mEmail=inp;
}
public void emailFromxML(String n){
        setEmail(-1,n);
}
public String[]getInternet(){
return mInternet;
}
public String getInternet(int index){
        if(this.mInternet==null)
        return null;
        if(index>=this.mInternet.length)
        return null;
        if(index<0&&-index>this.mInternet.length)
        return null;
        if(index>=0)return this.mInternet[index];
        return this.mInternet[this.mInternet.length+index];
    }
    public String[]getInternetToXML(){
            String[]valArr=getInternet();
            if(valArr==null)return null;
            String[]nvArr=new String[valArr.length];
            for(int z=0;z<nvArr.length;z++){
            char[]c=valArr[z].toCharArray();
            StringBuffer st=new StringBuffer();
            StringBuffer sb=new StringBuffer();
            for(int x=0;x<c.length;x++){
            switch(c[x]){
            case′>′:
    sb.append(″&gt;″);
    break;
    case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case″′:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    nvA rr[z]=sb.toString();
    }
    return nvArr;
}
public void setInternet(int index,String inp){
if(this.mInternet==null){
        if(index<0){
        this.mInternet=new String[1];
        this.mInternet[0]=inp;
        }else{
        this.mInternet=new String[index+1];
        this.mInternet[index]=inp;
        }
}else if(index<0){
               String[|newInternet=new String|this.mInternet.length+1];
                        java.lang.System.arraycopy((Object)mInternet,0,
(Object)newInternet,0,this.mInternet.length);
                        newInternet[newInternet.length-1]=inp;
                        mInternet=newInternet;
                }else if(index>=this.mInternet.length){
                        String[]newInternet=new String[index+1];
                        java.lang.System.arraycopy((Object)mInternet,0,
(Object)newInternet,0,this.mInternet.length);
                        newInternet[index]=inp;
                        mInternet=newInternet;
                  }else{
                        this.mInternet[index]=inp;
              }
    }
    public void setInternet(String[]inp){
             this.mInternet=inp;
    }
    public void internetFromXML(String n){
            setInternet(-1,n);
    }
}
package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;
public class Business extends Party{
    public static final Srring DOC_TYPE=″business″;
    String aBusinessNumber;
    public Business(){
             super(DOC_TYPE);
    aBusinessNumber=new String();
    }
    public Business(String doc_tyPe){
            super(doc_tyPe);
    aBusinessNumber=new String();
    }
    static public Business initBusiness(String iBusinessNumber,String[]iPartyName,AddressSet
iAddressSet){
    Business obj=new Business();
    obj.initializeAll(iBusinessNumber,iPartyName,iAddressSet);
    return obj;
    }
    public void initializeAll(String iBusinessNumber,String[]iPartyName,AddressSet iAddressSet){
            aBusinessNumber=iBusinessNumber;
            super.initializeAll(iPartyName,iAddressSet);
    }
    public String getBusinessNumber(){
    return aBusinessNumber;
    }
    public String getBusinessNumberToXML(){
            if(getBusinessNumber()==null)return null;
            char[]c=getBusinessNumber().toCharArray();
            StringBuffer sb=new StringBuffer();
            for(int x=0;x<c.length;x++){
            switch(c[x]){
            case′>′:
            sb.append(″&gt;″);
            break;
            case′<′:
            sb.append(″&lt;″);
            break;
            case′&′:
            sb.append(″&amp;″);
            break;
            case″″:
            sb.append(″&quot;″);
            break;
            case ′\″:
        sb.append(″&quot;″);
        break;
        default:
        if(Character.isDefined(c[x]))
        sb.append(c[x]);
        }
        }
        return sb.toString();
    }
    public void setBusinessNumber(String inp){
            this.aBusinessNumber=inp;
    }
    public void businessNumberFromXML(String n){
            setBusinessNumber(n);
    }
}
    import com.veo.vsp.doclet.meta.Document;
    public class Party extends Document{
        public static final String DOC_TYPE=″party″;
        String[]mPartyName;
        AddressSet mAddressSet;
        public Party(){
               super(DOC_TYPE);
        mPartyName=new String[0];
              this.mAddressSet=new AddressSet();
    }
    public Party(String doc type){
           super(doc_tyPe);
    mPartyName=new String[0];
           this.mAddressSet=new AddressSet();
    }
    static public Party initParty(String[]iPartyName,AddressSet iAddressSet){
            Party obj=new Party();
    obj.initializeAll(iPartyName,iAddressSet);
    return obj;
}
public void initializeAll(String[]iPartyName,AddressSet iAddressSet){
    mPartyName=iPartyName;
    mAddressSet=iAddressSet;
}
public String[]getPartyName(){
return mP artyName;
}
public String getPartyName(int index){
        if(this.mPartyName==null)
        return null;
        if(index>=this.mPartyName.length)
        return null;
        if(index<0&&-index>this.mPartyName.length)
        return null;
        if(index>=0)return this.mPartyName[index];
        return this.mPartyName[this.mPartyName.length+index];
}
public String[]getPartyNameToXML(){
        String[]valArr=getPartyName();
        if(valArr==null)return null;
        String[]nvArr=new String[valArr.length];
        for(int z=0;z<nvArr.length;z++){
        char[]c=valArr[z].toCharArray();
        StringBuffer st=new StringBuffer();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case″′:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    nvArr[z]=sb.toString();
    }
    return nvArr;
}
public void setPartyName(int index,String inp){
if(this.mPartyName==null){
        if(index<0){
        this.mPartyName=new String[1];
        this.mPartyName[0]=inp;
        }else{
        this.mPartyName=new String[index+1];
        this.mPartyName[index]=inp;
        }
    }else if(index<0){
                    String[]newPartyName=new String[this.mPartyName.length+1];
                    java.lang.System.arraycopy((Object)mPartyName,0,
(Object)newPartyName,0,this.mPartyName.length);
                     newPartyName[newPartyName.length-1]=inp;
                     mPartyName=newPartyName;
                     }else if(index>=this.mPartyName.length){
                     String[]newPartyName=new String[index+1];
                     java.lang.System.arraycopy((Object)mPartyName,0,
(Object)newPartyName,0,this.mPartyName.length);
                      newPartyName[index]=inp;
                      mPartyName=newPartyName;
                }else{
                      this.mPartyName[index]=inp;
                }
    }
    public void setPartyName(String[]inp){
            this.mPartyName=inp;
    }
    public void partyNameFromXML(String n){
            setPartyName(-1,n);
    }
    public AddressSet getAddressSet(){
    return mAddressSet;
    }
    public void setAddressSet(AddressSet inp){
            this.mAddressSet=inp;
    }
}
package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;
public class Person extends Party{
    public static final String DOC_TYPE=″person″′;
    String aSSN;
    public Person(){
           super(DOC_TYPE);
    aSSN=null;
    }
    public Person(String doc_type){
    super(doc_type);
aSSN=null;
}
static public Person initPerson(String iSSN,String[]iPartyName,AddressSet iAddressSet){
        Person obj=new Person();
        obj.initializeAll(iSSN,iPartyName,iAddressSet);
        return obj;
}
public void initializeAll(String iSSN,String[]iPartyName,AddressSet iAddressSet){
        aSSN=iSSN;
        super.initializeAll(iPartyName,iAddressSet);
}
public String getSSN(){
return aSSN;
}
public String getSSNToXML(){
        if(getSSN()==null)return null;
        char[]c=getSSN().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setSSN(String inp){
        this.aSSN=inp;
}
public void sSNFromXML(String n){
    setSSN(n);
}
}
package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;
public class PrototyPeService extends Document{
    public static final String DOC_TYPE=″prototyPe.service″;
    String mServiceName;
    String[]mServiceTerms;
    String[]mServiceLocation;
    ServiceOperation[]mServiceOperation;
    public PrototypeService(){
            super(DOC_TYPE);
    mServiceName=new String();
    mServiceTerms=new String[0];
    mServiceLocation=new String[0];
            this.mServiceOperation=new ServiceOperation[0];
    }
    public PrototypeService(String doc_type){
            super(doc_type);
    mServiceName=new String();
    mServiceTerms=new String[0];
    mServiceLocation=new String[0];
            this.mServiceOperation=new ServiceOperation[0];
    }
    static public PrototypeService initProto typeService(String iServiceName,String[]
iServiceTerms,String[]iServiceLocation,ServiceOpera tion[]iServiceOperation){
                PrototypeService obj=new PrototypeService();
                obj.initializeAll(iServiceName,iServiceTerms,iServiceLocation,iServiceOperation);
                return obj;
    }
    public void initializeAll(String iServiceName,String[]iServiceTerms,String[]
ServiceLocation,ServiceOperation[]iServiceOperation){
                 mServiceName=iServiceName;
                 mServiceTerms=iServiceTerms;
                 mServiceLocation=iServiceLocation;
                 mServiceOperation=iServiceOperation;
    }
    public String getServiceName(){
    return mServiceName;
    }
    public String getServiceNameToXML(){
            if(getServiceName()==null)return null;
            char[]c=getServiceName().toCharArray();
            StringBuffer sb=new StringBuffer();
            for(int x=0;x<c.length;x++){
            switch(c[x]){
            case′>′:
            sb.append(″&gt;″);
            break;
            case′<′:
            sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setServiceName(String inp){
        this.mServiceName=inp;
}
public void serviceNameFromXML(String n){
        setServiceName(n);
}
public String[]getServiceTerms(){
return mServiceTerms;
}
public String getServiceTerms(int index){
        if(this.mServiceTerms==null)
        return null;
        if(index>=this.mServiceTerms.length)
        return null;
        if(index<0&&-index>this.mServiceTerms.length)
        return null;
        if(index>=0)return this.mServiceTerms[index];
        return this.mServiceTerms[this.mServiceTerms.length+index];
}
public String[]getServiceTermsToXML(){
    String[]valArr=getServiceTerms();
    if(valArr==null)return null;
    String[]nvArr=new String[valArr.length];
    for(int z=0;z<nvArr.length;z++){
    char[]c=valArr[z].toCharArray();
    StringBuffer st=new StringBuffer();
    StringBuffer sb=new StringBuffer();
    for(int x=0;x<c.length;x++){
    switch(c[x]){
    case′>′:
    sb.append(″&gt;″);
    break;
    case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″;
    sb.append(″&quot;″);
    break;
    case″′:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    nvArr[z]=sb.toString();
    }
    return nvArr;
}
    public void setServiceTerms(int index,String inp){
    if(this.mServiceTerms==null){
            if(index<0){
            this.mServiceTerms=new String[1];
            this.mServiceTerms[0]=inp;
            }else{
            this.mServiceTerms=new String[index+1];
            this.mServiceTerms[index]=inp;
            }
    }else if(index<0){
                   String[]newServiceTerms=new String[this.mServiceTerms.length+1];
                   java.lang.System.arraycopy((Object)mServiceTerms,0,
(Object)newServiceTerms,0,this.mServiceTerms.length);
                   newServiceTerms[newServiceTerms.length-1]=inp;
                   mServiceTerms=newServiceTerms;
           }else if(index>=this.mServiceTerms.length){
                   String[]newServiceTerms=new String[index+1];
                   java.lang.System.arraycopy((Object)mServiceTerms,0,
(Object)newServiceTerms,0,this.mServiceTerms.length);
                   newServiceTerms[index]=inp;
                   mServiceTerms=newServiceTerms;
             }else{
                   this.mServiceTerms[index]=inp;
             }
    }
    public void setServiceTerms(String[]inp){
            this.mServiceTerms=inp;
    }
    public void serviceTermsFromXML(String n){
             setServiceTerms(-1,n);
    }
    public String[]getServiceLocation(){
    return mServiceLocation;
    }
public String getServiceLocation(int index){
    if(this.mServiceLocation==null)
    return null;
    if(index>=this.mServiceLocation.length)
    return null;
    if(index<0&&-index>this.mServiceLocation.length)
    return null;
    if(index>=0)return this.mServiceLocation[index];
    return this.mServiceLocation[this.mServiceLocation.length+index];
}
public String[]getServiceLocationToXML(){
    String[]valArr=getServiceLocation();
    if(valArr==null)return null;
    String[]nvArr=new String[valArr.length];
    for(int z=0;z<nvArr.length;z++){
    char[]c=valArr[z].toCharArray();
    StringBuffer st=new StringBuffer();
    StringBuffer sb=new StringBuffer();
    for(int x=0;x<c.length;x++){
    switch(c[x]){
    case′>′:
    sb.append(″&gt;″);
    break;
    case′<′:
    sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case″′:
    sb.append(″&quot;″);
    break;
            default:
            if(Character.isDefined(c[x]))
            sb.append(c[x]);
            }
            }
            nvArr[z]=sb.toString();
            }
            return nvArr;
        }
        public void setServiceLocation(int index,String inp){
        if(this.mServiceLocation==null){
                if(index<0){
                this.mServiceLocation=new String[1];
                this.mServiceLocation[0]=inp;
                }else{
                this.mServiceLocation=new String[index+1];
                this.mServiceLocation[index]=inp;
                }
        }else if(index<0){
                       String[]newServiceLocation=new
String[this.mServiceLocation.length+1];
                       java.lang.System.arraycopy((Object)mServiceLocation,0,
(Object)newServiceLocation,0,this.mServiceLocation.length);
                       newServiceLocation[newServiceLocation.length-1]=inp;
                       mServiceLocation=newServiceLocation;
               }else if(index>=this.mServiceLocation.length){
                        String[]newServiceLocation=new String[index+1];
                        java.lang.System.arraycopy((Object)mServiceLocation,0,
(Object)newServiceLocation,0,this.mServiceLocation.length);
                        newServiceLocation[index]=inp;
                        mServiceLocation=newServiceLocation;
                  }else{
                        this.mServiceLocation[index]=inp;
                  }
    }
        public void setServiceLocation(String[]inp){
            this.mServiceLocation=inp;
    }
    public void serviceLocationFromXML(String n){
            setServiceLocation(-1,n);
    }
    public ServiceOperation[]getServiceOperation(){
    return mServiceOperation;
    }
    public ServiceOperation getServiceOperation(int index){
            if(this.mServiceOperation==null)
            return null;
            if(index>=this.mServiceOperation.length)
            return null;
            if(index<0&&-index>this.mServiceOperation.length)
            return null;
            if(index>=0)return this.mServiceOperation[index];
            return this.mServiceOperation[this.mServiceOperation.length+index];
    }
    public void setServiceOperation(int index,ServiceOperation inp){
    if(this.mServiceOperation==null){
            if(index<0){
            this.mServiceOperation=new ServiceOperation[1];
            this.mServiceOperation[0]=inp;
            }else{
            this.mServiceOperation=new ServiceOperation[index+1];
            this.mServiceOperation[index]=inp;
            }
    }else if(index<0){
                      ServiceOperation[]newServiceOperation=new
ServiceOperation[this.mServiceOperation.length+1];
                      java.lang.System.arraycopy((Object)mServiceOperation,0,
(Object)newServiceOperation,0,this.mServiceOperation.length);
                      newServiceOperation[newServiceOperation.length-1]=inp;
                      mServiceOperation=newServiceOperation;
        }else if(index>=this.mServiceOperation.length){
             ServiceOPeration[]newServiceOPeration=new ServiceOperation[index+1];
             java.lang.System.arraycopy((Object)mServiceOperation,0,
    (Object)newServiceOperation,0,this.mServiceOperation.length);
             newServiceOperation[index]=inp;
             mServiceOperation=newServiceOperation;
       }else{
            this.mServiceOperation[index]=inp;
       }
    }
    public void setServiceOperation(ServiceOperation[]inp){
            this.mServiceOperation=inp;
    }
}
package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;
public class Service extends Document{
    public static final String DOC_TYPE=″service ″;
    String mServiceName;
    String mServiceLocation;
    ServiceOperation[]mServiceOperation;
    String mServiceTerms;
    public Service(){
            super(DOC_TYPE);
    mServiceName=new String();
    mServiceLocation=new String();
            this.mServiceOperation=new ServiceOpera tion[0];
    mServiceTerms=new String();
    }
    public Service(String doc_type){
            super(doe_type);
    mServiceName=new String();
    mServiceLocation=new String();
            this.mServiceOperation=new ServiceOperation[0];
    mServiceTerms=new String();
    }
    static public Service initService(String iServiceName,String
iServiceLocation,ServiceOperation[]iServiceOperation,String iServiceTerms){
              Service obj=new Service();
              obj.initializeAll(iServiceName,iServiceLocation,iServiceOperation,
iServiceTerms);
              return obj;
       }
       public void initializeAll(String iServiceName,String
iServiceLocation,ServiceOperation[]iServiceOperation,String iServiceTerms){
                mServiceName=iServiceName;
                mServiceLocation=iServiceLocation;
                mServiceOperation=iServiceOperation;
                mServiceTerms=iServiceTerms;
    }
    public String getServiceName(){
    return mServiceName;
    }
    public String getServiceNameToXML(){
            if(getServiceName()==null)return null;
            char[]c=getServiceName().toCharArray();
            StringBuffer sb=new StringBuffer();
            for(int x=0;x<c.length;x++){
            switch(c[x]){
            case′>′:
            sb.append(″&gt;″);
            break;
            case′<′:
            sb.append(″&lt;″);
            break;
            case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setServiceName(String inp){
    this.mServiceName=inp;
}
public void serviceNameFromXML(String n){
        setServiceName(n);
}
public String getServiceLocation(){
return mServiceLocation;
}
public String getServiceLocationToXML(){
        if(getServiceLocation()==null)return null;
        char[]c=getServiceLocation().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
    break;
    case′&′:
    sb.append(″&amp;″);
    break;
    case″″:
    sb.append(″&quot;″);
    break;
    case′\″:
    sb.append(″&quot;″);
    break;
    default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setServiceLocation(String inp){
        this.mServiceLocation=inp;
}
public void serviceLocationFromXML(String n){
        setServiceLocation(n);
}
public ServiceOperation[]getServiceOperation(){
return mServiceOperation;
}
public ServiceOperation getServiceOperation(int index){
        if(this.mServiceOperation==null)
        return null;
        if(index>=this.mServiceOperation.length)
        return null;
        if(index<0&&-index>this.mServiceOperation.length)
        return null;
        if(index>=0)return this.mServiceOperation[index];
        return this.mServiceOperation[this.mServiceOperation.length+index];
    }
    public void setServiceOperation(int index,ServiceOperation inp){
    if(this.mServiceOperation==null){
            if(index<0){
            this.mServiceOperation=new ServiceOperation[1];
            this.mServiceOperation[0]=inp;
            }else{
            this.mServiceOperation=new ServiceOperation[index+1];
            this.mServiceOperation[index]=inp;
            }
    }else if(index<0){
                  ServiceOperation[]newServiceOperation=new
ServiceOperation[this.mServiceOperation.length+1];
                       java.lang.System.arraycopy((Object)mServiceOperation,0,
(Object)newServiceOperation,0,this.mServiceOperation.length);
                       newServiceOperation[newServiceOperation.length-1]=inp;
                       mServiceOperation=newServiceOperation;
               }else if(index>=this.mServiceOperation.length){
                       ServiceOperation[]newServiceOperation=new ServiceOperation[index+1];
                       java.lang.System.arraycopy((Object)mServiceOperation,0,
(Object)newServiceOperation,0,this.mServiceOperation.length);
                       newServiceOperation[index]=inp;
                       mServiceOperation=newServiceOperation;
                 }else{
                      this.mServiceOperation[index]=inp;
                 }
    }
    public void setServiceOperation(ServiceOperation[]inp){
            this.mServiceOperation=inp;
    }
    public String getServiceTerms(){
    return mServiceTerms;
    }
    public String getServiceTermsToXML(){
        if(getServiceTerms()==null)return null;
        char[]c=getServiceTerms().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case′\″:
        sb.append(″&quot;″);
        break;
        default:
        if(Character.isDefined(c[x]))
        sb.append(c[x]);
        }
        }
        return sb.toString();
    }
    public void setServiceTerms(String inp){
            this.mServiceTerms=inp;
    }
    public void serviceTermsFromXML(String n){
            setServiceTerms(n);
    }
}
    package com.veo.xdk.dev.schema.test.blib;
    import com.veo.vsp.doclet.meta.Document;
    public class ServiceOperation extends Document{
       public static final String DOC_TYPE=″service.operation″;
       Srring mServiceOperationName;
       String mServiceOperationLocation;
       Strnig mServiceOperationInput;
       String mServiceOperationOutput;
       public ServiceOperation(){
               super(DOC_TYPE);
       mServiceOperationName=new String();
       mServiceOpera tionLocation=new String();
       mServiceOperationlnput=new String();
       mServiceOperationOutput=new String();
       }
       public ServiceOperation(String doc_type){
               super(doc_tyPe);
       mServiceOperationName=new String();
       mServiceOperationLocation=new String();
       mServiceOperationInput=new String();
       mServiceOperationOutput=new String();
       }
       static public ServiceOperation initServiceOperation(String iServiceOperationName,String
iServiceOperationLocation,String iServiceOperationInput,String
iServiceOperationOutput){
                ServiceOperation obj=new ServiceOperation();
                obj.initializeAll(iServiceOperationName,iServiceOperationLocation,
iServiceOperationInput,iServiceOperationOutput);
                return obj;
    }
    public void initializeAll(String iServiceOperationName,String
iServiceOperationLocation,String iServiceOperationInput,String
iServiceOperationOutput){
                mServiceOperationName=iServiceOperationName;
    mServiceOperationLocation=iServiceOperationLocation;
    mServiceOperationInput=iServiceOperationInput;
    mServiceOperationOutput=iServiceOperationOutput;
}
public String getServiceOperationName(){
return mServiceOperationName;
}
public String getServiceOperationNameToXML(){
        if(getServiceOperationName()==null)return null;
        char[]c=getServiceOperationName().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case′\″:
        sb.append(″&quot;″);
        break;
        default:
        if(Character.isDefined(c[x]))
        sb.append(c[x]);
        }
        }
        return sb.toString();
    }
public void setServiceOperationName(String inp){
        this.mServiceOperationName=inp;
}
public void serviceOperationNameFromXML(String n){
        setServiceOperationName(n);
}
    public String getServiceOperationLocation(){
return mServiceOperationLocation;
}
public String getServiceOperationLocationToXML(){
        if(getServiceOperationLocation()==null)return null;
        char[]c=getServiceOperationLocation().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case′\″:
        sb.append(″&quot;″);
        break;
        default:
        if(Character.isDefined(c[x]))
        sb.append(c[x]);
        }
        }
            return sb.toString();
    }
    public void setServiceOperationLocation(String inp){
            this.mServiceOperationLocation=inp;
    }
    public void serviceOperationLocationFromXML(String n){
            setServiceOperationLocation(n);
}
public String getServiceOperationInput(){
return mServiceOperationInput;
}
public String getServiceOperationInputToXML(){
        if(getServiceOperationInput()==null)return null;
        char[]c=getServiceOperationInput().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case′\″:
        sb.append(″&quot;″);
        break;
        default:
        if(Character.isDefined(c[x]))
        sb.append(c[x]);
    }
    }
    return sb.toString();
}
public void setServiceOpera tionInput(String inp){
        this.mServiceOperationInput=inp;
}
public void serviceOperationInputFromXML(String n){
        setServiceOperationInput(n);
}
public String getServiceOperationOutput(){
return mServiceOperationOutput;
}
public String getServiceOperationOutputToXML(){
       if(getServiceOperationOutput()==null)return null;
        char[]c=getServiceOperationOutput().toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int x=0;x<c.length;x++){
        switch(c[x]){
        case′>′:
        sb.append(″&gt;″);
        break;
        case′<′:
        sb.append(″&lt;″);
        break;
        case′&′:
        sb.append(″&amp;″);
        break;
        case″″:
        sb.append(″&quot;″);
        break;
        case′\″:
        sb.append(″&quot;″);
        break;
        default:
    if(Character.isDefined(c[x]))
    sb.append(c[x]);
    }
    }
    return sb.toString();
    }
    public void setServiceOpera tionOutput(String inp){
            this.mServiceOperationOutput=inp;
    }
    public void serviceOperationOutputFromXML(String n){
            setServiceOperationOutput(n);
    }
}
package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;
public class ServiceSet extends Document{
    public static final String DOC_TYPE=″service.set″;
    Service[]mService;
    public ServiceSet(){
            super(DOC_TYPE);
            this.mService=new Service[0];
    }
    public ServiceSet(String doc_type){
            super(doc_type);
            this.mService=new Service[0];
    }
    static public ServiceSet initServiceSet(Service[]iService){
            ServiceSet obj=new ServiceSet();
            obj.initializeAll(iService);
            return obj;
    }
    public void initializeAll(Service[]iService){
            mService=iService;
    }
    public Service[]getService(){
    return mService;
    }
    public Service getService(int index){
             if(this.mService==null)
             return null;
             if(index>=this.mService.length)
             return null;
             if(index<0&&-index>this.mService.length)
             return null;
             if(index>=0)return this.mService[index];
             return this.mService[this.mService.length+index];
         }
         public void setService(int index,Service inp){
         if(this.mService==null){
                 if(index<0){
                  this.mService=new Service[1];
                  this.mService[0]=inp;
                  }else{
                  this.mService=new Service[index+1];
                  this.mService[index]=inp;
                  }
         }else if(index<0){
                        Service[]newService=new Service[this.mService.length+1];
                        java.lang.System.arraycopy((Object)mService,0,
(Object)newService,0,this.mService.length);
                        newService[newService.length-1]=inp;
                        mService=newService;
                }else if(index>=this.mService.length){
                         Service[]newService=new Service[index+1];
                         java.lang.System.arraycopy((Object)mService,0,
(Object)newService,0,this.mService.length);
                         newService[index]=inp;
              mService=newService;
        }else{
              this.mService[index]=inp;
        }
    }
    public void setService(Service[]inp){
            this.mService=inp;
    }
}
除了上述JAVA豆之外,还如下所述产生转换代码,用于从JAVA至XML的翻译以及从XML至JAVA的翻译:
    Java to XML
<!DOCTYPE tree SYSTEM″tree.dtd″>
<tree source=″null″pass-through=″false″>
<before>
<vardef name=″attribute.def″>
<element source=″ATTRIBUTE″class=″NAME″type=″5″position=″-2″>
<parse>
<data class=″java.lang.String″position=″-2″/>
</parse>
</element>
</vardef>
<vardef name=″pcdata.def″>
<element source=″PCDATA″class=″NAME″type=″4″position=″-2″>
<parse>
<data class=″999″type=″6″position=″-2″/>
</parse>
</element>
</vardef>
<vardef name=″content.def″>
<element source=″PCDATA″>
    <parse>
    <data class=″999″type=″6″position=″-2″/>
    </parse>
    </element>
    </vardef>
    <vardef name=″ServiceSet.var″>
    <element source=″com.veo.xdk.dev.schema.test.blib.ServiceSet″class=″service.set″type=″4″
position=″-2″>
    <parse>
    <callvar name=″Service.var″/>
    </parse>
    </element>
    </vardef>
    <vardef name=″PrototypeService.var″>
    <element source=″com.veo.xdk.dev.schema.test.blib.PrototypeService″class=″prototype.service″
type=″4″position=″-2″>
    <parse>
    <callvar name=″pcdata.def″parms=″setSource ServiceNameToXML setGenerator service.name″/>
    <callvar name=″pcdata.def″parms=″setSource ServiceTermsToXML setGenerator service.terms″/>
    <callvar name=″pcdata.def″parms=″setSource ServiceLocationToXML setGenerator
service.location″/>
    <callvar name=″ServiceOperation.var″/>
    </parse>
    </element>
    </vardef>
    <vardef name=″Service.var″>
    <element source=″com.veo.xdk.dev.schema.test.blib.Service″class=″service″type=″8″position=
″0″>
    <parse>
    <callvar name=″pcdata.def″parms=″setSource ServiceNameToXML setGenerator service.name″/>
    <callvar name=″pcdata.def″parms=″setSource ServiceLocationToXML setGenerator
service.location″/>
    <callvar name=″ServiceOperation.var″/>
    <callvar uame=″pcdata.def″parms=″setSource ServiceTermsToXML setGenerator service.terms″/>
    </parse>
    </element>
    </vardef>
    <vardef name=″ServiceOpera tion.var″>
    <element source=″com.veo.xdk.dev.schema.test.blib.ServiceOperation″class=″service.operation″
type=″4″position=″-2″>
    <parse>
    <callvar name=″pcdata.def″parms=″setSource ServiceOperationNameToXML setGenerator
service.operation.name″/>
    <callvar name=″pcdata.def″parms=″setSource ServiceOperationLocationToXML setGenerator
service.operation.location″/>
    <callvar name=″pcdata.def″parms=″setSource  ServiceOperationInputToXML setGenerator
service.operation.input″/>
    <callvar name =″pcdata.def″parms=″setSource ServiceOperationOutputToXML setGenerator
service.operation.output″/>
    </parse>
    </element>
    </vardef>
    </before>
    <parse>
    <callvar name=″ServiceSet.var″/>
    <callvar name=″PrototyPeService.var″/>
    <callvar name=″Service.var″/>
    <callvar name=″ServiceOperation.var″/>
    </parse>
    </tree>
    XML to Java
    <!DOCTYPE tree SYSTEM″tree.dtd″>
    <tree source=″null″pass-through=″false″>
    <before>
    <vardef name=″business.var″>
    <element source=″business″
    class=″com.veo.xdk.dev.schema.test.blib.Business″
    type=″7″setter=″setBusiness″>
    <before>
    <onattribute name=″business.number″>
    <actions>
    <callmeth name=″businessNumberFromXML″>
    <parms>
    <getattr name=″business.number″/>
    </parms>
    </callmeth>
    </actions>
    </onattribute>
    </before>
    <parse>
    <callvar name=″party.name.var″parms=″setPosition-1″/>
    <callvar name=″address.set.var″/>
    </parse>
    </element>
    </vardef>
    <vardef name=″party.name.var″>
    <element source=″party.name″setter=″partyNameFromXML″position=″-1″class=
″java.lang.String″>
    <parse>
    <data class=″java.lang.String″position=″0″/>
    </parse>
    </element>
    </vardef>
    <vardef name=″city.var″>
    <element source=″city″setter=″cityFromXML″position=″-1″class=″java.lang.String″>
    <parse>
    <data class=″java.lang.String″position=″0″/>
    </parse>
    </element>
</vardef>
<vardef name=″internet.var″>
<element source=″internet″setter=″internetFromXML″position=″-1″class=″java.lang.String″>
<parse>
<data class=″java.lang.String″position=″0″/>
</parse>
</element>
</vardef>
<vardef name=″country.var″>
<element source=″country″setter=″countryFromXML″position=″-1″class=″java.lang.String″>
<parse>
<data class=″java.lang.String″position=″0″/>
</parse>
</element>
</vardef>
<vardef name=″state.var″>
<element source=″state″setter=″stateFromXML″position=″-1″class=″java.lang.String″>
<parse>
<data class=″java.lang.String″position=″0″/>
</parse>
</element>
</vardef>
<vardef name=″email.var″>
<element source=″email″setter=″emailFromXML″position=″-1″class=″java.lang.String″>
<parse>
<data class=″java.lang.String″position=″0″/>
</parse>
</element>
</vardef>
<vardef name=″address.physical.var″>
<element source=″address.physical″
class=″com.veo.xdk.dev.schema.test.blib.AddressPhysical″
      type=″7″setter=″setAddressPhysical″>
      <before>
      </before>
      <parse>
      <callvar name=″street.var″parms=″setPosition-1″/>
      <callvar name=″city.var″parms=″setPosition-1″/>
      <callvar name=″state.var″parms=″setPosition-1″/>
      <callvar name=″postcode.var″parms=″setPosition-1″/>
      <callvar name=″country.var″parms=″setPosition-1″/>
      </parse>
      </element>
      </vardef>
      <vardef name=″telephone.var″>
      <element source=″telephone″setter=″telephoneFromXML″position=″-1″class=
″java.lang.String″>
      <parse>
      <data class=″java.lang.String″position=″0″/>
      </parse>
      </element>
      </vardef>
      <vardef name=″person.var″>
      <element source=″person″
      class=″com.veo.xdk.dev.schema.test.blib.Person″
      type=″7″setter=″setPerson″>
      <before>
      <onattribute name=″SSN″>
      <actions>
      <callmeth name=″sSNFromXML″>
      <parms>
      <getattr name=″SSN″/>
      </parms>
      </callmeth>
      </actions>
      </onattribute>
      </before>
<parse>
<callvar name=″party.name.var″parms=″setPosition-1″/>
<callvar name=″address.set.var″/>
</parse>
</element>
</vardef>
<vardef name=″fax.var″>
<element source=″fax″setter=″faxFromXML″position=″-1″class=″java.lang.String″>
<parse>
<data class=″java.lang.String″position=″0″/>
</parse>
</element>
</vardef>
<vardef name=″street.var″>
<element source=″street″setter=″streetFromXML″position=″-1″class=″java.lang.String″>
<parse>
<data class=″java.lang.String″position=″0″/>
</parse>
</element>
</vardef>
<vardef name=″address.set.var″>
<element source=″address.set″
class=″com.veo.xdk.dev.schema.test.blib.AddressSet″
type=″7″setter=″setAddressSet″>
<before>
</before>
<parse>
<callvar name=″address.physical.var″/>
<callvar name=″telephone.var″parms=″setPosition-1″/>
<callvar name=″fax.var″parms=″setPosition-1″/>
<callvar name=″email.var″parms=″setPosition-1″/>
<callvar name=″internet.var″parms=″setPosition-1″/>
</parse>
</element>
      </vardef>
      <vardef name=″postcode.var″>
      <element source=″postcode″setter=″postcodeFromXML″position=″-1″class=
″java.lang.String″>
      <parse>
      <data class=″java.lang.String″position=″0″/>
      </parse>
      </element>
      </vardef>
      <vardef name=″market.participant.var″>
      <element source=″market.participant″
      class=″com.veo.xdk.dev.schema.test.blib.MarketParticipant″
      type=″7″position=″0″>
      <before>
      </before>
      <parse>
      <callvar name=″business.var″/>
      <callvar name=″person.var″/>
      </parse>
      </element>
      </vardef>
      </before>
      <parse>
      <callvar name=″business.var″/>
      <callvar name=″party.name.var″/>
      <callvar name=″city.var″/>
      <callvar name=″internet.var″/>
      <callvar name=″country.var″/>
      <callvar name=″state.var″/>
      <callvar name=″email.var″/>
      <callvar name=″address.physical.var″/>
      <callvar name=″telephone.var″/>
      <callvar name=″person.var″/>
      <callvar name=″fax.var″/>
      <callvar name=″street.var″/>
<callvar name=″address.set.var″/>
<callvar name=″postcode.var″/>
<callvar name=″market.participant.var″/>
</parse>
</tree>
Makefiles:
#
#this makefile was generated by bic version 0.0.05/02/1998
#
#
#
#
#get the package name from the package argument passed to SchemaGen
PACKAGE_NAME=com/veo/xdk/dev/schema/test/blib
JAVA_SOURCES+=\
  MarketParticipant.java\
  Business.java\
  Person.java\
  Party.java\
  AddressPhysical.java\
  AddressSet.java\
MAKEFILE_MASTER_DIR=xxx
include$(MAKEFILE_MASTER_DIR)/Makefile.master
all::$(JAVA_CLASSES)
#
#this makefile was generated by bic version 0.0.05/02/1998
#
#
#
#
#get the package name from the package argument passed to SchemaGen
PACKAGE_NAME=com/veo/xdk/dev/schema/test/blib
JAVA_SOURCES+=\
  ServiceSet.java\
  PrototypeService.java\
  Service.java\
  ServiceOperation.java\
MAKEFILE_MASTER_DIR=xxx
include$(MAKEFILE_MASTER_DIR)/Makefile.master
all::$(JAVA_CLASSES)
最后,下面是作为一个例子,根据上述模型在运行时间生成的XML文档实例:
<!DOCTYPE market.participant SYSTEM″market.participant.dtd″>
<market.participant>
<business business.number=″1234567890″>
<party.name>IBM</party.name>
<address.set>
<address.physical>
<street>1IBM Way</street>
<city>Palo Alto</city>
<state>CA</state>
<postcode>94304</postcode>
<country>USA</country>
</address.physical>
<telephone>123456-7890</telephone>
<fax>1234560987</fax>
<email>ibmecibm.com</email>
</address.set>
</business>
</market.participant>
<!DOCTYPE service SYSTEM″service.dtd″>
<service.set>
<service>
<service.name>Order Service</service.name>
<service.location>www.ibm.com/order</service.location>
<service.operation>
<service.operation.name>Submit Order</service.operation.name>
<service.operation.location>www.ibm.com/order/submit</service.location>
<service.operation.input>urn:x-
ibm:services:order:operations:po.dtd</service.operation.input>
<service.operation.output>urn:x-
ibm:services:order:operations:poack.dtd</service.operation.output>
</service.operation>
<service.operation>
<service.operation.name>Track Order</service.operation.name>
<service.operation.location>www.ibm.com/order/track</service.location>
<service.operation.input>urn:x-
ibm:services:order:operations:track.irequest.dtd</service.operation.input>
<service.operation.output>urn:x-
ibm:services:order:operations:track.iresponse.dtd</service.operation.output>
</service.operation>
</service>
</service.set>
利用各种工具以及BID组合应用程序(提供拖曳,丢弃和形成编辑用户接口),开发器能够建立商业接口定义,并且以XML文档形式产生很好形成的、有效的商业接口定义。因此,例举性的运行时间实例是由Ingram Micro使用的、用于IBM定购服务以及从IBM定购膝上型计算机的其它定购服务的商业接口定义。(申请人与IBM或Ingram Micro之间没有关系)。利用这些过程,用户能够建立一种系统允许用根据本发明定义的文档对商业接口编程。
通过以下对购货定单处理的说明,可以进一步理解本发明CBL和BID处理器在XML/JAVA环境下的作用。
公司A用一个可见的编程环境定义其购货定单文档类型,其中所述编程环境包含一个由CBL DTD和模块组成的库,而CBL DTD和模块都是用公用商业语言元素定义的,因此它们包括数据类型和其它解释信息。公司A的PO可以就提供CBL库的更一般的“事务文档”范围仅仅包含最小的客户化,或者它可以完全由地址、时期和时间、货币等CBL模块来构造。
用于一般“事务文档”规范说明的文档(诸如上述transact.dtd)代表了由模块建立的并且与其它CBL DTD互链的CBL规范说明的方式。
编译程序取得购货定单定义,并且生成几个不同的目标形式。所有这些目标形式可以通过原始规范说明的“树到树”转换来导出。该例子最重要的地方是:
(a)用于购货定单的XML DTD
(b)JAVA豆,它封装购货定单的数据结构(建立JAVA类、形参、数据类型、方法和例外的结构,对应于购货定单模式定义中的信息)。
(c)“引渡”程序,它将符合购货定单DTD的购货定单转换成购货定单JAVA豆,或者将它们加载入数据库,或者建立HTML(或者XSL格式页),用于将购货定单显示在浏览器中。
(d)“非引渡”程序,它从购货定单JAVA豆中抽取数据值,并且将它们转换成与购货定单DTD符合的XML文档。
现在返回脚本。购买应用程序产生一购货定单,该购货定单符合为接受购货定单的供应商指定为服务接口的DTD。
语法分析器用购货定单DTD将购货定单实例分解成有关其所含元素和属性值的信息流。然后,通过用JAVA代码包裹这些“特性组”,将它们转换成对应的JAVA事件对象。事实上,这一转换将标记XML文档的片段视作定制编程语言中的指令,其语法由DTD定义。现在可以用编译程序生成的引渡应用程序处理这些JAVA事件,以便“加载”JAVA豆数据结构。
将XML文档转换成一组JAVA应用程序的事件以便处理,这不象将语法分析器输出作为内部数据结构保持的正常分析模型,并且处理直到分析结束后才开始。响应BID定义的、基于事件的处理是使处理器具有更多功能的关键,因为它允许一发出第一事件就开始处理进发的文档应用程序。
用于“收听”各种类型事件的JAVA程序由那些事件的模式定义生成。这些收听器是用来完成与CBL中XML定义相关的商业逻辑的程序,例如与“地址”元素相关的可以是通过检查数据库而使邮政编码有效的代码。这些收听器通过向文档路由器登记来“订购”事件,其中文档路由器将相关的事件引导给所有对它们感兴趣的用户。
这种公布和预订体系结构表示可以增加新的收听器程序,而不用知道或不影响现有的收听器程序。每个收听器都有一个队列,路由器将其事件引入该队列,并且该队列可使多个收听器以其自身的步调并行处理事件。
对于这里例举的购货定单,可以存在具有以下用途的收听器:
●购货定单,它可以与定单输入程序相连,
●产品描述,它可以检查存货情况,
●地址信息,它可以检查Fed Ex或者其它邮递服务,
●买方信息,它可以检查定购历史(关于信用度,或者提升,或者根据已知客户是谁来进行类似的处理)。
可以通过对原始收听器的配置创建复杂的收听器(例如,购货定单收听器可以包含和调用这里的这些收听器,或者它们可以被自身调用)。
图11示出了图1网络中的市场制造者网点。市场制造者网点包括图3系统的基本结构,包括网络接口1101,文档语法分析器1102、文档至宿主和宿主至文档的翻译器1103,以及前端1104,在本例中称之为路由器。本例中的市场制造者模块1105包括一组商业接口定义、或者其它足以为市场中的参与者支持市场制造者功能的标识符、CBL资源库,以及编译程序,所有这些都为市场参与者服务。路由器1104包括参与者登记和文档过滤器,它们对应于翻译器输出处生成的事件并由语法分析器根据参与者登记和收听器之间的元素和属性过滤器来路由选择输入文档,将它们提供给XML事件生成器。因此,市场中的某些参与者可以登记接收满足预定参数的文档。例如,可以用下述输入文档在路由器1104处过滤文档,所述输入文档根据特定DTD,并且包括诸如产品预购数目大于阈值,或者预购文档请求的最高价格等属性。然后,只将那些在路由器1104处与参与者登记中所登记的信息相一致的文档传送给登记过的参与者。
路由器1104还可以提供本地主服务1105和1106,因此起市场中参与者以及市场制造者的作用。一般来说,遍历路由器1104接收到的文档,以便确定这些文档应送达的目的地,这里如果必须可以再次通过翻译器1103传回,并且传出网络接口1101,到达各自的目的地。
市场制造者是一个服务器,它将一组内部的和外部的商业服务捆绑在一起,以产生一个虚似的企业或交易团体。服务器通过将产品数据请求切换至目录服务器,或者将购货定单发送给ERP系统,来对输入文档进行语法分析,并且调用适当的服务。服务器还处理翻译任务,将来自公司XML文档的信息映像到交易当事方所用的文档格式以及其传统系统所要求的数据格式。
对于上述服务定义,当公司发出一购货定单时,服务器中的XML语法分析器用购货定单DTD将购货定单实例转换成信息事件流。然后,将这些事件传送给这样的应用程序,这些应用程序被编制成处理具有某个类型的事件;在一些情况下,通过互联网将信息完整地发送给不同的企业。在购货定单的例子中,若干应用程序可以对来自语法分析器的信息起作用:
●定单输入程序将购货定单处理成一个完整的消息;
●ERP系统检查购货定单中所述产品的存货;
●客户数据库验证或更新客户的地址;
●运输公司使用地址信息安排递送的日程;
●银行用信用卡信息给交易授权。
交易当事方只需要就他们交换的商业文档的结构、内容和序列达成一致,不需要对API的细节达成一致。如何处理文档以及产生什么动作是严格由提供服务的企业来决定的。这提高了从系统级到企业级的集成。这使得企业表现出与其它生意伙伴的清楚且稳定的接口,尽管其内部技术实施、组织或处理中存在变化。
图12、13和14示出了在图11系统中,在市场制造者网点处执行的过程。在图12中,在网络接口处,接收来自原发参与者网点的输入文档(步骤1200)。对文档进行语法分析(步骤1201)。将文档翻译成宿主的格式,例如从XML至JAVA(步骤1202)。然后将宿主格式化的事件和对象传送给路由器服务(步骤1203)。识别被登记用来根据文档类型和文档内容来接收文档的服务(步骤1204)。将文档或文档的一部分传送给被识别的服务(步骤1205)。响应于文档内容进行服务(步骤1206)。产生服务的输出数据(步骤1207)。将输出转换成文档格式,例如从JAVA格式转换成XML格式(步骤1208)。最后,将输出文档发送给参与者网点(步骤1209)。
登记服务是一种由路由器管理的功能。因此,如图13所示,在网络接口处接受市场参与者文档(步骤1300)。将市场参与者文档存储在市场制造者网点的商业接口定义资源库(步骤1301)中。另外,对文档进行语法分析(步骤1302)。将分析过的文档翻译成宿主的格式(步骤1303)。接下来,将文档传送给路由器服务(步骤1304)。路由器服务包括一个收听器,它根据文档类型和内容,将登记服务识别为文档的目的地(步骤1305)。将文档或文档的元素传送给登记服务(1306)。在登记服务中,根据商业接口定义检索所需的服务规范说明(步骤1307)。如果在步骤1308集合服务规范说明,那么根据商业接口定义和服务规范说明设定路由器服务过滤器(步骤1309)。产生登记确认数据(步骤1310)。登记确认数据转换成文档格式(步骤1311)。最后,将确认文档发送给参与者网点,向参与者表示已向市场制造者作了成功的登记(步骤1312)。
图14例示了步骤1307中集合所需服务规范说明的过程。该过程的开始是,对市场参与者所支持的服务商业接口定义进行定位(步骤1400)。例如,通过电子邮件交易或者对资源库网点进行网络访问,来检索服务定义(步骤1401)。将服务规范说明存储在BID资源库中(步骤1402)。对服务商业接口定义文档进行语法分析(步骤1403)。将分析过的文档翻译成主格式(步骤1404)。将主对象传送给路由器服务(步骤1405)。根据文档类型和内容识别登记服务(步骤1406)。最后,根据图13的过程,将服务商业接口定义文档中的信息传送给登记服务(步骤1407),供使用。
图15示出了处理器、构件以及根据本发明在市场制造者网点处处理输入数据的序列。市场制造者网点包括在网络接口处的通信代理1500。通信代理与XML语法分析器1501相连,而XML语法分析器将事件提供给XML处理器1502。XML处理器将事件提供给文档路由器。文档路由器提供一文档服务1504,而文档服务1504又提供一个接口,用于将接收到的文档提供给主系统中的企业解答软件1505。通信代理1500是互联网接口,它包括支持诸如HTTP、SMTP、FTP或其它协议的适当协议堆栈。因此,输入数据可以按XML语法、ASCII数据语法或其它适合特定通信信道的语法而到来。将所有以非XML语法接收到的文档翻译成XML,并且传送给XML语法分析器。用翻译表1506支持从非XML形式至XML形式的翻译。
将转换后的文档提供给语法分析器1501。XML语法分析器根据与其匹配的文档类型定义对接收到的XML文档进行语法分析。如果发现错误,那么语法分析器将文档发回通信代理1500。商业接口定义编译器BIDC 1507起商业接口定义数据编译器的作用。通过编译BID数据,建立XML语法分析器的DTD文件、对应于DTD文件的JAVA豆以及将DTD文件翻译成JAVA豆的翻译规则。通过参考这些工具,将XML实例翻译成JAVA实例。因此,BID编译器1507存储DTD文档1508,并产生对应的JAVA文档1509。将XML文档传送给将它们翻译成JAVA格式的处理器1502。在一较佳系统中,产生状态与按XML格式接收到的文档类型定义相同的JAVA文档。将JAVA豆传送给文档路由器1503。文档路由器1503接收JAVA豆,并且用登记程序(例如用上述事件收听器体系结构)将接收到的类传送给合适的文档服务。从路由器1503接收JAVA豆形式的文档的文档服务1504起企业解答软件之接口的作用。这包括登记服务1510,XML事件的收听器通过该登记服务与输入数据流耦合,并且还包括服务管理器1511,用于管理将输入文档传送给合适的服务。文档服务管理器1511对登记服务进行管理,并且保持文档一致性。
文档服务用任何专用API或者用诸如CORBA/COM接口或其它体系结构等更普通的形式,与后端系统通信。
图16提供了本发明市场制造者和市场参与者结构的启发图。因此,如图16所示,可以有逻辑地组织本发明的电子商务市场。在组织的顶部,建立市场制造者网点1600。市场制造者网点包括用于建立市场1601的资源。这类资源包括市场登记服务等。企业1602通过公布商业接口定义在市场1601中登记。商业接口定义定义了企业将参与的商务交易的服务1603。事务1604和服务1603用文档1605定义输入和输出,并且划定了交易中参与者之间的贸易关系。文档包括内容1606,而内容1606载有每宗交易的参与者。市场参与者和市场制造者处理内容所用的方式完全独立于依照本发明建立的基于文档的电子商务网。总的来说,提供了一种稳健的、规模可变的、直观的结构,它能够提供通信网上的电子商务。
因此,本发明在一例举的系统中提供了一种基于XML处理器的平台,并且将XML文档用作松散连接的商业系统之间的接口。文档在企业之间传递,并且在进入公司商业系统之前由参与者网点处理。因此,平台能够使电子商务应用程序在企业之间工作,每个商业系统通过指定一组公用的商业文档和形式,用不同的内部商务平台、过程和语义进行工作。
依照本发明,通过互连商业系统和服务建立了虚拟的企业,并且主要用企业接受并产生的文档(XML编码的)对虚拟企业定义:
●“如果你发给我一个目录请求,我将发给你一个目录”
●“如果你发给我一份购货定单,并且我可以接受,那么我将发给你发票”。
为了说明和描述的目的,提供了上述对本发明较佳实施例的描述。并不试图将本发明穷尽或限制到所揭示的精确形式。显然,对于本领域的技术人员来说,可以进行许多变化和改变。本发明的范围由以下权利要求书及其等效权利来限制。

Claims (44)

1.一种为系统上执行的事务建立参与者接口的设备,其中所述参与者接口包括网络接口和数据处理资源,根据事务处理体系结构执行事务处理过程,其特征在于,所述设备包括:
用于提供为一特定事务参与者建立参与者接口定义的工具的装置,其中参与者接口定义包括参与者的输入文档定义和参与者的输出文档定义,输入和输出文档定义包括对各组存储单元以及各组存储单元之逻辑结构的机器可读的描述;和
用于响应输入和输出文档定义,编译与存储单元组以及输入和输出文档之逻辑结构相对应的数据结构,其中存储单元组以及输入和输出文档的逻辑结构遵从事务处理体系结构;编译系统可执行的指令,以便将输入文档翻译成相应的数据结构;以及编译系统可执行的指令,以便将事务处理过程的输出翻译成各组存储单元以及输出文档的逻辑结构的装置。
2.如权利要求1所述的设备,其特征在于,用于建立参与者接口定义的工具包括用于从资源库中访问定义的元素的装置,其中所述资源库存储了由逻辑结构以及用来建立接口描述的逻辑结构解释信息所组成的库。
3.如权利要求2所述的设备,其特征在于,所述资源库存储包含逻辑结构的文档定义。
4.如权利要求1所述的设备,其特征在于,用于建立参与者接口定义的工具包括:
用于访问补充事务的另一个参与者接口定义的装置,被访问的定义包括补充事务的输入文档定义,以及补充事务的输出文档定义;并且
用于通过包括补充事务的输出文档定义作为正在建立的接口的输入文档的定义,来建立参与者接口定义的装置。
5.如权利要求4所述的设备,其特征在于,用于建立参与者接口定义的工具包括:
用于通过包括补充事务的输入文档定义作为正在建立的接口的输出文档定义,来建立参与者接口定义的装置。
6.如权利要求1所述的设备,其特征在于,用于建立参与者接口定义的工具包括用于建立一个遵从参与者接口定义的文档的装置,所述参与者接口定义包括这样的逻辑结构,它们用于存储一特定事务的标识符,并且存储关于该特定事务的输入和输出文档定义与对定义的参考两者中的至少一个。
7.如权利要求1所述的设备,其特征在于,用于建立参与者接口定义的工具包括用于建立一个遵从参与者接口定义的文档的装置,所述参与者接口定义包括这样的逻辑结构,它们用于存储参与者接口的标识符,并且存储关于一个或多个由参与者接口支持的事务组成的事务组的规范说明与对规范说明的参考两者中的至少一种。
8.如权利要求7所述的设备,其特征在于,遵从参与者接口定义的文档包括对机器可读的一特定事务规范说明的参考,并且该特定事务的规范说明包括一文档,该文档包括这样的逻辑结构,它们用于存储关于该特定事务的输入和输出文档定义与对定义的参考两者中的至少一个。
9.如权利要求8所述的设备,其特征在于,存储单元包括作语法分析的数据。
10.如权利要求9所述的设备,其特征在于,在输入和输出文档的至少一个文档中的作语法分析的数据包括:
字符数据,用于对输入和输出文档中的一个文档中的文本字符编码,和标记数据,用于根据输入和输出文档中的一个文档的逻辑结构,识别存储单元组。
11.如权利要求10所述的设备,其特征在于,至少一组存储单元对提供自然语言字的多个文本字符编码。
12.如权利要求10所述的设备,其特征在于,规范说明包括用于至少一组存储单元的解释信息,解释信息对各组作语法分析的字符的定义进行编码,而存储单元由输入和输出文档中至少一个文档的逻辑结构来识别。
13.如权利要求9所述的设备,其特征在于,存储单元包括未作语法分析的数据。
14.如权利要求1所述的设备,其特征在于,根据不同的事务处理体系结构,对应于存储单元组以及输入和输出文档之逻辑结构的数据结构包括有包含许多变量和方法的编程对象。
15.如权利要求1所述的设备,其特征在于,事务过程的不同事务处理体系结构包括一个遵从接口描述语言的过程。
16.如权利要求1所述的设备,其特征在于,输入和输出文档定义包括遵从标准的可扩充标记语言XML的文档类型定义。
17.如权利要求3所述的设备,其特征在于,输入和输出文档中的一个文档的定义包括对资源库中某个文档类型的参考。
18.如权利要求2所述的设备,其特征在于,资源库包括用于规定事务的产品主题之度量的解释信息。
19.如权利要求2所述的设备,其特征在于,资源库包括用于规定事务的产品主题之成本的解释信息。
20.如权利要求2所述的设备,其特征在于,资源库包括用于规定事务的产品主题之特性的解释信息。
21.如权利要求2所述的设备,其特征在于,资源库包括用于规定事务的金额事项的解释信息。
22.如权利要求2所述的设备,其特征在于,资源库包括用于规定事务的产品主题之运送事项的解释信息。
23.一种为系统上执行的事务建立参与者接口的方法,其中所述参与者接口包括网络接口和数据处理资源,根据事务处理体系结构执行事务处理过程,其特征在于,所述方法包括:
提供为一特定事务参与者建立参与者接口定义的工具,其中参与者接口定义包括参与者的输入文档定义和参与者的输出文档定义,输入和输出文档定义包括对各组存储单元以及各组存储单元之逻辑结构的机器可读的描述;和响应输入和输出文档定义,编译与存储单元组以及输入和输出文档之逻辑结构相对应的数据结构,其中存储单元组以及输入和输出文档的逻辑结构遵从事务处理体系结构;编译系统可执行的指令,以便将输入文档翻译成相应的数据结构;以及编译系统可执行的指令,以便将事务处理过程的输出翻译成各组存储单元以及输出文档的逻辑结构。
24.如权利要求23所述的方法,其特征在于,建立参与者接口定义的工具用于从资源库中访问定义的元素,其中所述资源库存储了由逻辑结构以及用来建立接口描述的逻辑结构解释信息所组成的库。
25.如权利要求24所述的方法,其特征在于,所述资源库存储包含逻辑结构的文档定义。
26.如权利要求23所述的方法,其特征在于,用于建立参与者接口定义的工具用于:
访问补充事务的另一个参与者接口定义,被访问的定义包括补充事务的输入文档定义,以及补充事务的输出文档定义;并且
通过包括补充事务的输出文档定义作为正在建立的接口的输入文档的定义,来建立参与者接口定义。
27.如权利要求26所述的方法,其特征在于,用于建立参与者接口定义的工具用于:
通过包括补充事务的输入文档定义作为正在建立的接口的输出文档定义,来建立参与者接口定义。
28.如权利要求23所述的方法,其特征在于,用于建立参与者接口定义的工具用于建立一个遵从参与者接口定义的文档,所述参与者接口定义包括这样的逻辑结构,它们用于存储一特定事务的标识符,并且存储关于该特定事务的输入和输出文档定义与对定义的参考两者中的至少一个。
29.如权利要求23所述的方法,其特征在于,用于建立参与者接口定义的工具用于建立一个遵从参与者接口定义的文档,所述参与者接口定义包括这样的逻辑结构,它们用于存储参与者接口的标识符,并且存储关于一个或多个由参与者接口支持的事务组成的事务组的规范说明与对规范说明的参考两者中的至少一种。
30.如权利要求29所述的方法,其特征在于,遵从参与者接口定义的文档包括对机器可读的一特定事务规范说明的参考,并且该特定事务的规范说明包括一文档,该文档包括这样的逻辑结构,它们用于存储关于该特定事务的输入和输出文档定义与对定义的参考两者中的至少一个。
31.如权利要求30所述的方法,其特征在于,存储单元包括作语法分析的数据。
32.如权利要求31所述的方法,其特征在于,在输入和输出文档的至少一个文档中的作语法分析的数据包括:
字符数据,用于对输入和输出文档中的一个文档中的文本字符编码,和标记数据,用于根据输入和输出文档中的一个文档的逻辑结构,识别存储单元组。
33.如权利要求32所述的方法,其特征在于,至少一组存储单元对提供自然语言字的多个文本字符编码。
34.如权利要求32所述的方法,其特征在于,规范说明包括用于至少一组存储单元的解释信息,解释信息对各组作语法分析的字符的定义进行编码,而存储单元由输入和输出文档中至少一个文档的逻辑结构来识别。
35.如权利要求31所述的方法,其特征在于,存储单元包括未作语法分析的数据。
36.如权利要求23所述的方法,其特征在于,根据不同的事务处理体系结构,对应于存储单元组以及输入和输出文档之逻辑结构的数据结构包括有包含许多变量和方法的编程对象。
37.如权利要求23所述的方法,其特征在于,事务过程的不同事务处理体系结构包括一个遵从接口描述语言的过程。
38.如权利要求23所述的方法,其特征在于,输入和输出文档定义包括遵从标准的可扩充标记语言XML的文档类型定义。
39.如权利要求25所述的方法,其特征在于,输入和输出文档中的一个文档的定义包括对资源库中某个文档类型的参考。
40.如权利要求24所述的方法,其特征在于,资源库包括用于规定事务的产品主题之度量的解释信息。
41.如权利要求24所述的方法,其特征在于,资源库包括用于规定事务的产品主题之成本的解释信息。
42.如权利要求24所述的方法,其特征在于,资源库包括用于规定事务的产品主题之特性的解释信息。
43.如权利要求24所述的方法,其特征在于,资源库包括用于规定事务的金额事项的解释信息。
44.如权利要求24所述的方法,其特征在于,资源库包括用于规定事务的产品主题之运送事项的解释信息。
CN2008100927144A 1998-10-16 1999-10-08 贸易伙伴网络中的商务文档以及基于该文档的接口定义 Expired - Lifetime CN101266666B (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US09/173,858 US8006177B1 (en) 1998-10-16 1998-10-16 Documents for commerce in trading partner networks and interface definitions based on the documents
US09/173,858 1998-10-16
US09/173,847 US6226675B1 (en) 1998-10-16 1998-10-16 Participant server which process documents for commerce in trading partner networks
US09/173,854 US6125391A (en) 1998-10-16 1998-10-16 Market makers using documents for commerce in trading partner networks
US09/173,854 1998-10-16
US09/173,847 1998-10-16

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CNB998029823A Division CN100388292C (zh) 1998-10-16 1999-10-08 贸易伙伴网络中的商务文档以及基于该文档的接口定义

Publications (2)

Publication Number Publication Date
CN101266666A CN101266666A (zh) 2008-09-17
CN101266666B true CN101266666B (zh) 2012-08-22

Family

ID=22633821

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008100927144A Expired - Lifetime CN101266666B (zh) 1998-10-16 1999-10-08 贸易伙伴网络中的商务文档以及基于该文档的接口定义

Country Status (2)

Country Link
US (2) US8006177B1 (zh)
CN (1) CN101266666B (zh)

Families Citing this family (213)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6289322B1 (en) * 1998-03-03 2001-09-11 Checkfree Corporation Electronic bill processing
US7729988B1 (en) * 1997-03-21 2010-06-01 Walker Digital, Llc Method and apparatus for processing credit card transactions
US6760746B1 (en) * 1999-09-01 2004-07-06 Eric Schneider Method, product, and apparatus for processing a data request
US6125391A (en) * 1998-10-16 2000-09-26 Commerce One, Inc. Market makers using documents for commerce in trading partner networks
US7451106B1 (en) * 1998-11-30 2008-11-11 E-Lynxx Corporation System and method for competitive pricing and procurement of customized goods and services
US9262383B2 (en) 1999-05-21 2016-02-16 E-Numerate Solutions, Inc. System, method, and computer program product for processing a markup document
US9262384B2 (en) 1999-05-21 2016-02-16 E-Numerate Solutions, Inc. Markup language system, method, and computer program product
US9268748B2 (en) 1999-05-21 2016-02-23 E-Numerate Solutions, Inc. System, method, and computer program product for outputting markup language documents
US7472349B1 (en) * 1999-06-01 2008-12-30 Oracle International Corporation Dynamic services infrastructure for allowing programmatic access to internet and other resources
US6889260B1 (en) * 1999-06-10 2005-05-03 Ec Enabler, Ltd Method and system for transferring information
US8862507B2 (en) 1999-06-14 2014-10-14 Integral Development Corporation System and method for conducting web-based financial transactions in capital markets
US7266766B1 (en) * 1999-09-30 2007-09-04 International Business Machines Corporation Method for developing a custom tagbean
US7054952B1 (en) * 1999-12-09 2006-05-30 International Business Machines Corp. Electronic document delivery system employing distributed document object model (DOM) based transcoding and providing interactive javascript support
US7451107B1 (en) * 2000-01-28 2008-11-11 Supply Chain Connect, Llc Business-to-business electronic commerce clearinghouse
JP4091726B2 (ja) * 2000-02-23 2008-05-28 インターナショナル・ビジネス・マシーンズ・コーポレーション 構造化文書の表示規則の生成方法、システムおよびプログラムが記録された媒体ならびに構造化文書およびその文書型定義の変更方法、システムおよびプログラムが記録された媒体
US7207000B1 (en) * 2000-02-24 2007-04-17 International Business Machines Corporation Providing dynamic web pages by separating scripts and HTML code
US7730113B1 (en) 2000-03-07 2010-06-01 Applied Discovery, Inc. Network-based system and method for accessing and processing emails and other electronic legal documents that may include duplicate information
US7693866B1 (en) 2000-03-07 2010-04-06 Applied Discovery, Inc. Network-based system and method for accessing and processing legal documents
US7757168B1 (en) * 2000-04-07 2010-07-13 Xerox Corporation Meta-document and method of managing
US8001232B1 (en) * 2000-05-09 2011-08-16 Oracle America, Inc. Event message endpoints in a distributed computing environment
US7577834B1 (en) * 2000-05-09 2009-08-18 Sun Microsystems, Inc. Message authentication using message gates in a distributed computing environment
GB0011426D0 (en) * 2000-05-11 2000-06-28 Charteris Limited A method for transforming documents written in different XML-based languages
US7908200B2 (en) * 2000-05-16 2011-03-15 Versata Development Group, Inc. Method and apparatus for efficiently generating electronic requests for quote
US7496637B2 (en) * 2000-05-31 2009-02-24 Oracle International Corp. Web service syndication system
US7996295B1 (en) 2000-06-13 2011-08-09 Dell Products L.P. Data structure for use in an automated order entry system
US6871187B1 (en) * 2000-06-13 2005-03-22 Dell Products L.P. Translator for use in an automated order entry system
US20050283410A1 (en) * 2000-06-13 2005-12-22 Dell Products L.P. Automated configuration catalog
AU2001271677A1 (en) * 2000-06-30 2002-01-14 Flamenco Networks, Inc. Method, apparatus, and system for centrally defining and distributing connectiondefinitions over a network
TW511013B (en) * 2000-07-10 2002-11-21 Intumit Inc A joint web bidding method and system therefor
JP2002056033A (ja) * 2000-08-11 2002-02-20 Nissei Plastics Ind Co データ処理サービス方法
US7899690B1 (en) 2000-08-18 2011-03-01 The Crawford Group, Inc. Extended web enabled business to business computer system for rental vehicle services
US8600783B2 (en) 2000-08-18 2013-12-03 The Crawford Group, Inc. Business to business computer system for communicating and processing rental car reservations using web services
US7275038B1 (en) * 2000-08-18 2007-09-25 The Crawford Group, Inc. Web enabled business to business operating system for rental car services
US20030125992A1 (en) * 2001-12-26 2003-07-03 The Crawford Group, Inc. Web browser based computer network for processing vehicle rental transactions on a large scale
US7853833B1 (en) 2000-09-08 2010-12-14 Corel Corporation Method and apparatus for enhancing reliability of automated data processing
US7000223B1 (en) 2000-09-08 2006-02-14 Corel Corporation Method and apparatus for preparing a definition to control automated data processing
US7747673B1 (en) * 2000-09-08 2010-06-29 Corel Corporation Method and apparatus for communicating during automated data processing
US6944865B1 (en) * 2000-09-08 2005-09-13 Corel Corporation Method and apparatus for saving a definition for automated data processing
US7296238B1 (en) 2000-09-08 2007-11-13 Corel Corporation Method and apparatus for triggering automated processing of data
US6961922B1 (en) 2000-09-08 2005-11-01 Corel Corporation Method and apparatus for defining operations to be performed during automated data processing
US6850956B1 (en) 2000-09-08 2005-02-01 Corel Inc. Method and apparatus for obtaining and storing data during automated data processing
US6925593B1 (en) 2000-09-08 2005-08-02 Corel Corporation Method and apparatus for transferring data during automated data processing
US6938030B1 (en) 2000-09-08 2005-08-30 Corel Corporation Method and apparatus for facilitating accurate automated processing of data
US6868193B1 (en) 2000-09-08 2005-03-15 Corel Inc. Method and apparatus for varying automated data processing
US11526940B2 (en) 2000-10-31 2022-12-13 Integral Development Corporation System and method for conducting web-based financial transactions in capital markets
US7809600B1 (en) * 2000-11-09 2010-10-05 Accenture Llp Method and system for business planning via a communications network
US7225467B2 (en) * 2000-11-15 2007-05-29 Lockheed Martin Corporation Active intrusion resistant environment of layered object and compartment keys (airelock)
US7165113B2 (en) * 2000-11-28 2007-01-16 Hewlett-Packard Development Company, L.P. Computer language for defining business conversations
US6993506B2 (en) 2000-12-05 2006-01-31 Jgr Acquisition, Inc. Method and device utilizing polymorphic data in e-commerce
US9600842B2 (en) 2001-01-24 2017-03-21 E-Numerate Solutions, Inc. RDX enhancement of system and method for implementing reusable data markup language (RDL)
US8224672B1 (en) * 2001-02-01 2012-07-17 Versata Development Group, Inc. Actuary-manipulable rating model and system
US7085736B2 (en) * 2001-02-27 2006-08-01 Alexa Internet Rules-based identification of items represented on web pages
US7302634B2 (en) * 2001-03-14 2007-11-27 Microsoft Corporation Schema-based services for identity-based data access
US7024662B2 (en) 2001-03-14 2006-04-04 Microsoft Corporation Executing dynamically assigned functions while providing services
US20020143644A1 (en) * 2001-04-03 2002-10-03 Cafer Tosun Connection tool for connecting analytical applications to electronic document sources
US20020147745A1 (en) * 2001-04-09 2002-10-10 Robert Houben Method and apparatus for document markup language driven server
US8572059B2 (en) * 2001-05-15 2013-10-29 Colin P. Britton Surveillance, monitoring and real-time events platform
US6925457B2 (en) * 2001-07-27 2005-08-02 Metatomix, Inc. Methods and apparatus for querying a relational data store using schema-less queries
US6856992B2 (en) * 2001-05-15 2005-02-15 Metatomix, Inc. Methods and apparatus for real-time business visibility using persistent schema-less data storage
US6954749B2 (en) * 2002-10-07 2005-10-11 Metatomix, Inc. Methods and apparatus for identifying related nodes in a directed graph having named arcs
US20030208499A1 (en) * 2002-05-03 2003-11-06 David Bigwood Methods and apparatus for visualizing relationships among triples of resource description framework (RDF) data sets
US7890517B2 (en) * 2001-05-15 2011-02-15 Metatomix, Inc. Appliance for enterprise information integration and enterprise resource interoperability platform and methods
US7058637B2 (en) * 2001-05-15 2006-06-06 Metatomix, Inc. Methods and apparatus for enterprise application integration
US20030195844A1 (en) * 2001-05-31 2003-10-16 Hogan Lawrence Daniel Electronic bill and non-bill information presentation
US7016963B1 (en) 2001-06-29 2006-03-21 Glow Designs, Llc Content management and transformation system for digital content
US7185342B1 (en) * 2001-07-24 2007-02-27 Oracle International Corporation Distributed service aggregation and composition
US20030093756A1 (en) * 2001-10-19 2003-05-15 Behzadi Azad E. Extensible mark-up language (XML) tracer for conversion of XML documents to hypertext markup language (HTML)
US7502996B2 (en) 2002-02-21 2009-03-10 Bea Systems, Inc. System and method for fast XSL transformation
US6880125B2 (en) 2002-02-21 2005-04-12 Bea Systems, Inc. System and method for XML parsing
US7962925B2 (en) 2002-02-22 2011-06-14 Oracle International Corporation System and method for XML data binding
US7065561B2 (en) * 2002-03-08 2006-06-20 Bea Systems, Inc. Selective parsing of an XML document
US7103835B1 (en) * 2002-03-12 2006-09-05 Movaris, Inc. Process builder for a routable electronic document system and method for using the same
US7315980B2 (en) * 2002-03-21 2008-01-01 International Business Machines Corporation Method and apparatus for generating electronic document definitions
US7346647B2 (en) * 2002-04-19 2008-03-18 Computer Associates Think, Inc. System and method for interfacing with existing system management products or software solutions
US7210097B1 (en) 2002-05-22 2007-04-24 Pitney Bowes Inc. Method for loading large XML documents on demand
US7257647B2 (en) * 2002-06-12 2007-08-14 Seapass Solutions Inc. Development environment platform using message type mapping for converting message and providing information between systems having different data structures
JP2004023248A (ja) * 2002-06-13 2004-01-22 Panasonic Communications Co Ltd Dsl通信装置及びdsl通信プログラムのダウンロード方法
KR100472458B1 (ko) * 2002-06-26 2005-03-10 삼성전자주식회사 외부 xml유효성 검증 장치를 이용하는 xml파싱 장치및 방법
US9886309B2 (en) 2002-06-28 2018-02-06 Microsoft Technology Licensing, Llc Identity-based distributed computing for device resources
US7200601B1 (en) * 2002-07-31 2007-04-03 Bellsouth Intellectual Property Corporation Computer-readable medium and data structure for communicating technical architecture standards to vendors
US8914509B2 (en) * 2002-08-02 2014-12-16 Null Networks Llc Extensible configuration methods for optical networking apparatuses with multiple multi-protocol optical networking modules
US7451458B2 (en) * 2002-08-02 2008-11-11 Tuchow Jonathan A Software methods of an optical networking apparatus with multiple multi-protocol optical networking modules having packet filtering resources
US7047243B2 (en) * 2002-08-05 2006-05-16 Microsoft Corporation Coordinating transactional web services
US20040083199A1 (en) * 2002-08-07 2004-04-29 Govindugari Diwakar R. Method and architecture for data transformation, normalization, profiling, cleansing and validation
US20080313282A1 (en) 2002-09-10 2008-12-18 Warila Bruce W User interface, operating system and architecture
US7146643B2 (en) * 2002-10-29 2006-12-05 Lockheed Martin Corporation Intrusion detection accelerator
US7707563B2 (en) * 2003-01-10 2010-04-27 Nexaweb Technologies Inc System and method for network-based computing
US20040148309A1 (en) * 2003-01-27 2004-07-29 Hermann Resch Customer fields
US7934163B2 (en) * 2003-02-28 2011-04-26 Oracle International Corporation Method for portlet instance support in a graphical user interface
US7272818B2 (en) * 2003-04-10 2007-09-18 Microsoft Corporation Creation of an object within an object hierarchy structure
US7484204B2 (en) * 2003-07-18 2009-01-27 Bea Systems, Inc. System and method for extensible type repositories
US20050044145A1 (en) * 2003-08-20 2005-02-24 International Business Machines Corporation Collaboration method and system
US7499921B2 (en) * 2004-01-07 2009-03-03 International Business Machines Corporation Streaming mechanism for efficient searching of a tree relative to a location in the tree
US20050223288A1 (en) * 2004-02-12 2005-10-06 Lockheed Martin Corporation Diagnostic fault detection and isolation
US7584420B2 (en) * 2004-02-12 2009-09-01 Lockheed Martin Corporation Graphical authoring and editing of mark-up language sequences
US7801702B2 (en) * 2004-02-12 2010-09-21 Lockheed Martin Corporation Enhanced diagnostic fault detection and isolation
US20050182725A1 (en) * 2004-02-13 2005-08-18 Michael Modica Check replenishment method and process
US20050209928A1 (en) * 2004-03-19 2005-09-22 Michael Willoughby System and method for processing e-commerce transactions
US7665063B1 (en) 2004-05-26 2010-02-16 Pegasystems, Inc. Integration of declarative rule-based processing with procedural programming
EP1782366A2 (en) * 2004-06-04 2007-05-09 Sap Ag Consistent set of interfaces derived from a business object
US8606723B2 (en) * 2004-06-04 2013-12-10 Sap Ag Consistent set of interfaces derived from a business object model
US8694397B2 (en) * 2004-06-18 2014-04-08 Sap Ag Consistent set of interfaces derived from a business object model
US20050289138A1 (en) * 2004-06-25 2005-12-29 Cheng Alex T Aggregate indexing of structured and unstructured marked-up content
WO2006012160A2 (en) * 2004-06-25 2006-02-02 Michael Seubert Consistent set of interfaces derived from a business object model
US20060041522A1 (en) * 2004-08-18 2006-02-23 Xerox Corporation. Abstract document management systems and methods
US7565662B2 (en) * 2004-09-24 2009-07-21 International Business Machines Corporation Program agent initiated processing of enqueued event actions
US7774720B1 (en) * 2004-10-15 2010-08-10 Oracle America, Inc. Connectivity map editor
US7711676B2 (en) * 2004-11-12 2010-05-04 Sap Aktiengesellschaft Tracking usage of data elements in electronic business communications
US7818342B2 (en) * 2004-11-12 2010-10-19 Sap Ag Tracking usage of data elements in electronic business communications
US7865519B2 (en) * 2004-11-17 2011-01-04 Sap Aktiengesellschaft Using a controlled vocabulary library to generate business data component names
US20080052281A1 (en) 2006-08-23 2008-02-28 Lockheed Martin Corporation Database insertion and retrieval system and method
US8335704B2 (en) 2005-01-28 2012-12-18 Pegasystems Inc. Methods and apparatus for work management and routing
EP1875428A4 (en) * 2005-02-25 2013-11-20 Sap Ag DERIVED CONSISTENT SET OF INTERFACES DERIVED FROM A BUSINESS OBJECT MODEL
US8744937B2 (en) * 2005-02-25 2014-06-03 Sap Ag Consistent set of interfaces derived from a business object model
US8135750B2 (en) * 2005-04-22 2012-03-13 Microsoft Corporation Efficiently describing relationships between resources
US7523392B2 (en) * 2005-04-22 2009-04-21 Microsoft Corporation Method and system for mapping between components of a packaging model and features of a physical representation of a package
US20060277064A1 (en) * 2005-06-07 2006-12-07 Cannata Michael C Method of creating a pricing schedule for use by a pharmaceutical pricing system
US7624113B2 (en) * 2005-11-23 2009-11-24 Sap Ag Data element naming system and method
US8135645B2 (en) * 2005-12-06 2012-03-13 Microsoft Corporation Key distribution for secure messaging
US8924335B1 (en) 2006-03-30 2014-12-30 Pegasystems Inc. Rule-based user interface conformance methods
US8374931B2 (en) 2006-03-31 2013-02-12 Sap Ag Consistent set of interfaces derived from a business object model
EP2076874A4 (en) * 2006-05-13 2011-03-09 Sap Ag DERIVED CONSISTENT SET OF INTERFACES DERIVED FROM A BUSINESS OBJECT MODEL
US8392364B2 (en) * 2006-07-10 2013-03-05 Sap Ag Consistent set of interfaces derived from a business object model
US8566193B2 (en) * 2006-08-11 2013-10-22 Sap Ag Consistent set of interfaces derived from a business object model
US8402473B1 (en) 2006-09-28 2013-03-19 Sap Ag Managing consistent interfaces for demand business objects across heterogeneous systems
CA2664941C (en) * 2006-10-06 2017-09-12 The Crawford Group, Inc. Method and system for communicating vehicle repair information to a business-to-business rental vehicle reservation management computer system
US7702585B2 (en) 2006-11-30 2010-04-20 Checkfree Corporation Methods and systems for the determination and display of payment lead time in an electronic payment system
US8250525B2 (en) 2007-03-02 2012-08-21 Pegasystems Inc. Proactive performance management for multi-user enterprise software systems
US8099370B2 (en) 2007-04-03 2012-01-17 Microsoft Corporation System for financial documentation conversion
WO2009045450A1 (en) * 2007-10-01 2009-04-09 Grid Dynamics Consulting Services, Inc. System and method for enabling service transactions
US8417593B2 (en) 2008-02-28 2013-04-09 Sap Ag System and computer-readable medium for managing consistent interfaces for business objects across heterogeneous systems
US8413165B2 (en) * 2008-03-31 2013-04-02 Sap Ag Managing consistent interfaces for maintenance order business objects across heterogeneous systems
US20090249358A1 (en) * 2008-03-31 2009-10-01 Sap Ag Managing Consistent Interfaces for Kanban Business Objects Across Heterogeneous Systems
US8423418B2 (en) * 2008-03-31 2013-04-16 Sap Ag Managing consistent interfaces for business objects across heterogeneous systems
US8364715B2 (en) * 2008-03-31 2013-01-29 Sap Ag Managing consistent interfaces for automatic identification label business objects across heterogeneous systems
US8577991B2 (en) * 2008-03-31 2013-11-05 Sap Ag Managing consistent interfaces for internal service request business objects across heterogeneous systems
US20090248463A1 (en) * 2008-03-31 2009-10-01 Emmanuel Piochon Managing Consistent Interfaces For Trading Business Objects Across Heterogeneous Systems
US8473317B2 (en) * 2008-03-31 2013-06-25 Sap Ag Managing consistent interfaces for service part business objects across heterogeneous systems
US8370233B2 (en) * 2008-03-31 2013-02-05 Sap Ag Managing consistent interfaces for business objects across heterogeneous systems
US8589263B2 (en) * 2008-03-31 2013-11-19 Sap Ag Managing consistent interfaces for retail business objects across heterogeneous systems
US8433585B2 (en) * 2008-03-31 2013-04-30 Sap Ag Managing consistent interfaces for business objects across heterogeneous systems
US20090248429A1 (en) * 2008-03-31 2009-10-01 Sap Ag Managing Consistent Interfaces for Sales Price Business Objects Across Heterogeneous Systems
US8930248B2 (en) 2008-03-31 2015-01-06 Sap Se Managing consistent interfaces for supply network business objects across heterogeneous systems
US8286186B2 (en) 2008-04-14 2012-10-09 International Business Machines Corporation System and method for extensible data interface for shared service module
US8671064B2 (en) 2008-06-26 2014-03-11 Sap Ag Managing consistent interfaces for supply chain management business objects across heterogeneous systems
US8566185B2 (en) 2008-06-26 2013-10-22 Sap Ag Managing consistent interfaces for financial instrument business objects across heterogeneous systems
US8645228B2 (en) * 2008-06-26 2014-02-04 Sap Ag Managing consistent interfaces for business objects across heterogeneous systems
US20090326988A1 (en) * 2008-06-26 2009-12-31 Robert Barth Managing consistent interfaces for business objects across heterogeneous systems
US10481878B2 (en) * 2008-10-09 2019-11-19 Objectstore, Inc. User interface apparatus and methods
US20100125616A1 (en) * 2008-11-19 2010-05-20 Sterling Commerce, Inc. Automatic generation of document translation maps
US8463666B2 (en) * 2008-11-25 2013-06-11 Sap Ag Managing consistent interfaces for merchandise and assortment planning business objects across heterogeneous systems
US8577760B2 (en) * 2008-11-25 2013-11-05 Sap Ag Managing consistent interfaces for tax authority business objects across heterogeneous systems
US20100153297A1 (en) * 2008-12-12 2010-06-17 Sap Ag Managing Consistent Interfaces for Credit Portfolio Business Objects Across Heterogeneous Systems
US8843435B1 (en) 2009-03-12 2014-09-23 Pegasystems Inc. Techniques for dynamic data processing
US8468492B1 (en) 2009-03-30 2013-06-18 Pegasystems, Inc. System and method for creation and modification of software applications
JP5538742B2 (ja) * 2009-04-01 2014-07-02 キヤノン株式会社 メッセージ通信装置及びその処理方法
US8396751B2 (en) * 2009-09-30 2013-03-12 Sap Ag Managing consistent interfaces for merchandising business objects across heterogeneous systems
US8732083B2 (en) 2010-06-15 2014-05-20 Sap Ag Managing consistent interfaces for number range, number range profile, payment card payment authorisation, and product template template business objects across heterogeneous systems
US8364608B2 (en) 2010-06-15 2013-01-29 Sap Ag Managing consistent interfaces for export declaration and export declaration request business objects across heterogeneous systems
US8412603B2 (en) 2010-06-15 2013-04-02 Sap Ag Managing consistent interfaces for currency conversion and date and time business objects across heterogeneous systems
US8370272B2 (en) 2010-06-15 2013-02-05 Sap Ag Managing consistent interfaces for business document message monitoring view, customs arrangement, and freight list business objects across heterogeneous systems
US8417588B2 (en) 2010-06-15 2013-04-09 Sap Ag Managing consistent interfaces for goods tag, production bill of material hierarchy, and release order template business objects across heterogeneous systems
US8515794B2 (en) 2010-06-15 2013-08-20 Sap Ag Managing consistent interfaces for employee time event and human capital management view of payroll process business objects across heterogeneous systems
US9135585B2 (en) 2010-06-15 2015-09-15 Sap Se Managing consistent interfaces for property library, property list template, quantity conversion virtual object, and supplier property specification business objects across heterogeneous systems
US9373102B2 (en) * 2010-07-30 2016-06-21 Mcgraw Hill Financial, Inc. System and method using a simplified XML format for real-time content publication
US8880487B1 (en) 2011-02-18 2014-11-04 Pegasystems Inc. Systems and methods for distributed rules processing
US8666845B2 (en) 2011-07-28 2014-03-04 Sap Ag Managing consistent interfaces for a customer requirement business object across heterogeneous systems
US8725654B2 (en) 2011-07-28 2014-05-13 Sap Ag Managing consistent interfaces for employee data replication business objects across heterogeneous systems
US8560392B2 (en) 2011-07-28 2013-10-15 Sap Ag Managing consistent interfaces for a point of sale transaction business object across heterogeneous systems
US8521838B2 (en) 2011-07-28 2013-08-27 Sap Ag Managing consistent interfaces for communication system and object identifier mapping business objects across heterogeneous systems
US8601490B2 (en) 2011-07-28 2013-12-03 Sap Ag Managing consistent interfaces for business rule business object across heterogeneous systems
US8775280B2 (en) 2011-07-28 2014-07-08 Sap Ag Managing consistent interfaces for financial business objects across heterogeneous systems
US9195936B1 (en) 2011-12-30 2015-11-24 Pegasystems Inc. System and method for updating or modifying an application without manual coding
US8762453B2 (en) 2012-02-16 2014-06-24 Sap Ag Consistent interface for feed collaboration group and feed event subscription
US9237425B2 (en) 2012-02-16 2016-01-12 Sap Se Consistent interface for feed event, feed event document and feed event type
US9232368B2 (en) 2012-02-16 2016-01-05 Sap Se Consistent interface for user feed administrator, user feed event link and user feed settings
US8762454B2 (en) 2012-02-16 2014-06-24 Sap Ag Consistent interface for flag and tag
US8756274B2 (en) 2012-02-16 2014-06-17 Sap Ag Consistent interface for sales territory message type set 1
US8984050B2 (en) 2012-02-16 2015-03-17 Sap Se Consistent interface for sales territory message type set 2
US20130232400A1 (en) * 2012-03-01 2013-09-05 Brett Finnell Dynamic Data Collection for Rule Based Documents
US9246869B2 (en) 2012-06-28 2016-01-26 Sap Se Consistent interface for opportunity
US8615451B1 (en) 2012-06-28 2013-12-24 Sap Ag Consistent interface for goods and activity confirmation
WO2014000200A1 (en) 2012-06-28 2014-01-03 Sap Ag Consistent interface for document output request
US9400998B2 (en) 2012-06-28 2016-07-26 Sap Se Consistent interface for message-based communication arrangement, organisational centre replication request, and payment schedule
US8521621B1 (en) 2012-06-28 2013-08-27 Sap Ag Consistent interface for inbound delivery request
US8756135B2 (en) 2012-06-28 2014-06-17 Sap Ag Consistent interface for product valuation data and product valuation level
US8949855B2 (en) 2012-06-28 2015-02-03 Sap Se Consistent interface for address snapshot and approval process definition
US9367826B2 (en) 2012-06-28 2016-06-14 Sap Se Consistent interface for entitlement product
US9076112B2 (en) 2012-08-22 2015-07-07 Sap Se Consistent interface for financial instrument impairment expected cash flow analytical result
US9547833B2 (en) 2012-08-22 2017-01-17 Sap Se Consistent interface for financial instrument impairment calculation
US9043236B2 (en) 2012-08-22 2015-05-26 Sap Se Consistent interface for financial instrument impairment attribute values analytical result
US9323736B2 (en) * 2012-10-05 2016-04-26 Successfactors, Inc. Natural language metric condition alerts generation
US9191357B2 (en) 2013-03-15 2015-11-17 Sap Se Consistent interface for email activity business object
US9191343B2 (en) 2013-03-15 2015-11-17 Sap Se Consistent interface for appointment activity business object
JP6550692B2 (ja) * 2014-06-18 2019-07-31 株式会社リコー サービス提供システム、ログ情報提供方法及びプログラム
US10469396B2 (en) 2014-10-10 2019-11-05 Pegasystems, Inc. Event processing with enhanced throughput
US9792579B2 (en) * 2014-10-28 2017-10-17 MetaBrite, Inc. Capturing product details of purchases
CN104268750B (zh) * 2014-10-30 2018-08-07 中国建设银行股份有限公司 一种缴费方法及系统、电子商务平台
US10692139B2 (en) * 2015-01-30 2020-06-23 Walmart Apollo, Llc System, method, and non-transitory computer-readable storage media for applying for a credit card
US10698599B2 (en) 2016-06-03 2020-06-30 Pegasystems, Inc. Connecting graphical shapes using gestures
US10698647B2 (en) 2016-07-11 2020-06-30 Pegasystems Inc. Selective sharing for collaborative application usage
US10878232B2 (en) 2016-08-16 2020-12-29 Blinkreceipt, Llc Automated processing of receipts and invoices
US10417488B2 (en) 2017-07-06 2019-09-17 Blinkreceipt, Llc Re-application of filters for processing receipts and invoices
WO2019171328A1 (en) * 2018-03-07 2019-09-12 Open Text Sa Ulc Flexible and scalable artificial intelligence and analytics platform with advanced content analytics and data ingestion
CN108572823B (zh) * 2018-04-23 2021-07-23 武汉斗鱼网络科技有限公司 基于接口引擎的前后端开发管理方法及系统
US11048488B2 (en) 2018-08-14 2021-06-29 Pegasystems, Inc. Software code optimizer and method
US10572607B1 (en) * 2018-09-27 2020-02-25 Intuit Inc. Translating transaction descriptions using machine learning
US10789052B2 (en) * 2018-10-29 2020-09-29 Salesforce.Com, Inc. User interface (UI) design system mapping platform for automatically mapping design system components to a design document file from a design tool to generate a mapped specification
CN111666161B (zh) * 2019-03-07 2024-03-12 深圳Tcl数字技术有限公司 一种统一设置接口的方法、系统及可读存储介质
US11087083B1 (en) 2020-03-31 2021-08-10 Coupa Software Incorporated Managing bundles of digital objects in an e-procurement system
US11567945B1 (en) 2020-08-27 2023-01-31 Pegasystems Inc. Customized digital content generation systems and methods
US11386265B2 (en) 2020-12-15 2022-07-12 International Business Machines Corporation Facilitating information technology solution templates
US11645595B2 (en) 2020-12-15 2023-05-09 International Business Machines Corporation Predictive capacity optimizer

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557798A (en) 1989-07-27 1996-09-17 Tibco, Inc. Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US5311438A (en) * 1992-01-31 1994-05-10 Andersen Consulting Integrated manufacturing system
ATE237854T1 (de) * 1992-10-26 2003-05-15 Intellect Australia Pty Ltd Host-benutzer-transaktionssystem
US5490217A (en) * 1993-03-05 1996-02-06 Metanetics Corporation Automatic document handling system
US5806049A (en) 1993-04-21 1998-09-08 Petruzzi; Christopher R. Data processing system for global assessment of investment opportunity and cost
US6145739A (en) * 1993-10-26 2000-11-14 Intellect Australia Pty Ltd. System and method for performing transactions and an intelligent device therefor
EP1235177A3 (en) 1993-12-16 2003-10-08 divine technology ventures Digital active advertising
GB2293470A (en) 1994-09-22 1996-03-27 Ibm Message encapsulation in Object Oriented Programming.
US5684985A (en) 1994-12-15 1997-11-04 Ufil Unified Data Technologies Ltd. Method and apparatus utilizing bond identifiers executed upon accessing of an endo-dynamic information node (EDIN)
US5740427A (en) * 1994-12-29 1998-04-14 Stoller; Lincoln Modular automated account maintenance system
US5742845A (en) 1995-06-22 1998-04-21 Datascape, Inc. System for extending present open network communication protocols to communicate with non-standard I/O devices directly coupled to an open network
US5790677A (en) * 1995-06-29 1998-08-04 Microsoft Corporation System and method for secure electronic commerce transactions
US5842193A (en) * 1995-07-28 1998-11-24 Sterling Software, Inc. Knowledge based planning and analysis (KbPA)™
JPH0969101A (ja) * 1995-08-31 1997-03-11 Hitachi Ltd 構造化文書生成方法および装置
US5758126A (en) * 1996-03-19 1998-05-26 Sterling Commerce, Inc. Customizable bidirectional EDI translation system
GB2311391A (en) * 1996-03-19 1997-09-24 Ibm Restart and recovery of OMG compliant transaction systems
US5915259A (en) * 1996-03-20 1999-06-22 Xerox Corporation Document schema transformation by patterns and contextual conditions
JP3605941B2 (ja) * 1996-05-20 2004-12-22 富士ゼロックス株式会社 文書構造作成装置及び文書構造作成方法
US6373950B1 (en) * 1996-06-17 2002-04-16 Hewlett-Packard Company System, method and article of manufacture for transmitting messages within messages utilizing an extensible, flexible architecture
US6253027B1 (en) * 1996-06-17 2001-06-26 Hewlett-Packard Company System, method and article of manufacture for exchanging software and configuration data over a multichannel, extensible, flexible architecture
US6029150A (en) * 1996-10-04 2000-02-22 Certco, Llc Payment and transactions in electronic commerce system
US5983200A (en) * 1996-10-09 1999-11-09 Slotznick; Benjamin Intelligent agent for executing delegated tasks
US6182029B1 (en) * 1996-10-28 2001-01-30 The Trustees Of Columbia University In The City Of New York System and method for language extraction and encoding utilizing the parsing of text data in accordance with domain parameters
US6470448B1 (en) * 1996-10-30 2002-10-22 Fujitsu Limited Apparatus and method for proving transaction between users in network environment
US6873973B2 (en) * 1996-11-27 2005-03-29 Diebold, Incorporated Cash dispensing automated banking machine and method
US5917913A (en) * 1996-12-04 1999-06-29 Wang; Ynjiun Paul Portable electronic authorization devices and methods therefor
IL130736A0 (en) 1997-01-24 2000-06-01 Extricity Software Inc A system and method for creating executing and maintaining cross-enterprise processes
AUPO489297A0 (en) 1997-01-31 1997-02-27 Aunty Abha's Electronic Publishing Pty Ltd A system for electronic publishing
US6724896B1 (en) * 1997-03-31 2004-04-20 Sun Microsystems, Inc. Event-driven servers for data extraction and merge for EDI transaction processing using the internet
US6141658A (en) 1997-09-10 2000-10-31 Clear With Computers, Inc. Computer system and method for managing sales information
US7024377B1 (en) * 1997-09-30 2006-04-04 Intel Corporation Method and apparatus for managing electronic commerce
JPH11110441A (ja) * 1997-10-02 1999-04-23 Fujitsu Ltd 電子取り引きシステム
US5978779A (en) 1997-11-14 1999-11-02 Merrill Lynch, Pierce, Fenner & Smith Distributed architecture utility
US6385596B1 (en) * 1998-02-06 2002-05-07 Liquid Audio, Inc. Secure online music distribution system
US6012098A (en) * 1998-02-23 2000-01-04 International Business Machines Corp. Servlet pairing for isolation of the retrieval and rendering of data
US6009407A (en) * 1998-02-27 1999-12-28 International Business Machines Corporation Integrated marketing and operations decisions-making under multi-brand competition
US6055513A (en) 1998-03-11 2000-04-25 Telebuyer, Llc Methods and apparatus for intelligent selection of goods and services in telephonic and electronic commerce
US7028312B1 (en) 1998-03-23 2006-04-11 Webmethods XML remote procedure call (XML-RPC)
US6154738A (en) * 1998-03-27 2000-11-28 Call; Charles Gainor Methods and apparatus for disseminating product information via the internet using universal product codes
US6230201B1 (en) * 1998-05-29 2001-05-08 Ip Net Solutions, Inc. Configurable transaction routing system and method
US6083276A (en) * 1998-06-11 2000-07-04 Corel, Inc. Creating and configuring component-based applications using a text-based descriptive attribute grammar
US6338067B1 (en) 1998-09-01 2002-01-08 Sector Data, Llc. Product/service hierarchy database for market competition and investment analysis
US6148290A (en) 1998-09-04 2000-11-14 International Business Machines Corporation Service contract for managing service systems
US6226675B1 (en) * 1998-10-16 2001-05-01 Commerce One, Inc. Participant server which process documents for commerce in trading partner networks
US6125391A (en) * 1998-10-16 2000-09-26 Commerce One, Inc. Market makers using documents for commerce in trading partner networks
US7594167B1 (en) * 1998-10-16 2009-09-22 Open Invention Network, Llc System and method for schema evolution in an e-commerce network
US6351746B1 (en) * 1998-11-09 2002-02-26 Unisys Corporation Cool ice icons
US6216158B1 (en) 1999-01-25 2001-04-10 3Com Corporation System and method using a palm sized computer to control network devices
US6668322B1 (en) * 1999-08-05 2003-12-23 Sun Microsystems, Inc. Access management system and method employing secure credentials
US20010042041A1 (en) 2000-03-28 2001-11-15 Moshal David Clive Method for configuring and conducting exchanges over a network

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JP特開平10-162032A 1998.06.19

Also Published As

Publication number Publication date
US20020165872A1 (en) 2002-11-07
US8006177B1 (en) 2011-08-23
CN101266666A (zh) 2008-09-17
US6542912B2 (en) 2003-04-01

Similar Documents

Publication Publication Date Title
CN101266666B (zh) 贸易伙伴网络中的商务文档以及基于该文档的接口定义
CN100388292C (zh) 贸易伙伴网络中的商务文档以及基于该文档的接口定义
US6226675B1 (en) Participant server which process documents for commerce in trading partner networks
US6125391A (en) Market makers using documents for commerce in trading partner networks
Lampathaki et al. Business to business interoperability: A current review of XML data integration standards
US8180796B1 (en) Supplier integration with services business language
US20020099735A1 (en) System and method for conducting electronic commerce
JP2008084328A5 (zh)
AU2003208845B2 (en) Method, software application and system for exchanging benchmark data
CA2389323A1 (en) Commerce community schema for the global trading web
Chiu EbXML simplified: a guide to the new standard for global e-commerce
CN109597603B (zh) 一种基于文档构件的需求文档自动生成方法
Janner et al. A core component-based modelling approach for achieving e-business semantics interoperability
Meadows et al. Universal business language 1.0
Nurmilaakso XML-based supply chain integration: a review and a case study
Schmitz et al. Findings and recommendations from a pan-European research project: Comparative analysis of E-catalog standards
US20030036968A1 (en) Process &amp; transformation private exchange
Schmitz et al. Do e-catalog standards support advanced processes in B2B e-commerce? Findings from the CEN/ISSS workshop eCAT
Liegl et al. A UML profile and add-in for UN/CEFACT's modeling methodology
Kunzler Electronic Data Reporting (EDR), metadata, standards and the European statistical system (ESS)
Lim et al. Object-oriented XML document meta-model for B2B collaborations
Chyrun et al. Information Resources Analysis in Electronic Content Commerce Systems
KNÜPPEL et al. Influence of the Internet on data collection and dissemination in the European Statistical System (ESS)
Yu et al. A Dynamic Framework for e-Commerce Portals
Palacios et al. FP6–027324

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: RED HAT INC.

Free format text: FORMER OWNER: OPEN INV NETWORK LLC

Effective date: 20121025

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20121025

Address after: North Carolina

Patentee after: Red hat Limited by Share Ltd

Address before: Delaware

Patentee before: Open Inv Network LLC

CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20120822