CN100388292C - Business document in trading partner network and interface definition based on the document - Google Patents
Business document in trading partner network and interface definition based on the document Download PDFInfo
- Publication number
- CN100388292C CN100388292C CNB998029823A CN99802982A CN100388292C CN 100388292 C CN100388292 C CN 100388292C CN B998029823 A CNB998029823 A CN B998029823A CN 99802982 A CN99802982 A CN 99802982A CN 100388292 C CN100388292 C CN 100388292C
- Authority
- CN
- China
- Prior art keywords
- document
- input
- transaction
- interface
- definition
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06Q—INFORMATION 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/00—Administration; Management
- G06Q10/06—Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06Q—INFORMATION 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/00—Subject matter not provided for in other groups of this subclass
Landscapes
- Business, Economics & Management (AREA)
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Human Resources & Organizations (AREA)
- Entrepreneurship & Innovation (AREA)
- Game Theory and Decision Science (AREA)
- Educational Administration (AREA)
- Development Economics (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Document Processing Apparatus (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
Description
发明背景Background of the invention
发明领域field of invention
本发明涉及这样的系统和协议,它们支持与网络相连的不同客户之间的事务;尤其涉及这样的系统和协议,它们支持具有不同体系结构的平台之间的商务。The present invention relates to systems and protocols that support transactions between different clients connected to a network, and more particularly to systems and protocols that support commerce between platforms with different architectures.
相关技术的描述Description of related technologies
互联网和其它通信网在人和各计算机平台之间提供了通信的途径,这些途径正被广泛地用于各种事务,包括参与者买卖贷物和服务的商务活动。正在为方便互联网上的商务活动作各种努力。但是,面对许多竞争标准,为了执行一项事务,当事方必须预先对将要使用的协议达成一致,并且通常要求对平台体系结构进行定制集成,以支持这些事务。对某个与已达成一致的标准不相容的特定网点为内部的商业过程,可以要求进行实质的再工作,以便与其它网点集成。另外,当一家公司提交一种标准或另一个标准时,该公司会陷入一个关于交易当事方的给定标准群中,并排除其它的对象。The Internet and other communication networks provide means of communication between humans and various computer platforms that are being used in a wide variety of transactions, including commerce in which participants buy and sell goods and services. Efforts are being made to facilitate commerce on the Internet. However, in the face of many competing standards, in order to execute a transaction, the parties must agree in advance on the protocol to be used, and often require custom integration of the platform architecture to support these transactions. Business processes internal to a particular site that are not compatible with agreed standards may require substantial rework to integrate with other sites. In addition, when a company submits one standard or another, the company falls into a given group of standards with respect to the parties to the transaction, to the exclusion of others.
Tenenbaum等人在“Eco系统:互联网商务体系结构”中很好地概述了互联网商务发展所遇到的挑战,该论文发表在1997年5月的“计算机”杂志第48-55页上。Tenenbaum et al. provide a good overview of the challenges encountered in the development of Internet commerce in "Eco Systems: Internet Commerce Architecture," published in the May 1997 issue of Computers, pp. 48-55.
为了在互联网上开展商务活动,需要对体系结构框架标准化。为支持这类商务框架而开发的平台包括IBM商务点、Microsoft互联网商务框架、Netscape ONE(开放网络环境)、Oracle NCA(网络计算体系结构),和Sun/JAVASoft JECF(JAVA电子商务框架)。In order to conduct business activities on the Internet, the architectural framework needs to be standardized. Platforms developed to support such commerce frameworks include IBM Commerce Point, Microsoft Internet Commerce Framework, Netscape ONE (Open Network Environment), Oracle NCA (Network Computing Architecture), and Sun/JAVASoft JECF (JAVA Electronic Commerce Framework).
除了这些专利框架外,正在研究编程技术,诸如基于CORBA IIOP的公共分布式对象模型(公共对象请求中介器体系结构互联网ORB协议)。使用公共分布式对象模型的意图是为了简化下述的系统转移,即从企业系统转移至可以在电子商务的商业应用层面上协同工作的系统。但是,使用某个框架的用户或企业不能在另一个框架上进行交易。这限制了电子商务系统的成长。In addition to these patent frameworks, programming techniques such as the Common Distributed Object Model based on CORBA IIOP (Common Object Request Broker Architecture Internet ORB Protocol) are being researched. The intent of using a common distributed object model is to simplify the migration of systems from enterprise systems to systems that can work together at the business application level of e-business. However, a user or business using one framework cannot transact on another framework. This limits the growth of e-commerce systems.
实施某个框架的公司将拥有一个应用程序设计接口API,该API与支持其它框架的API不同。因此,如果不要求采用公共商务系统接口,那么公司很难访问其它的事务处理服务。在API层面上开发这类商务系统接口要求在在当事双方之间进行重要的合作,这通常是不现实的。A company that implements a certain framework will have an application programming interface API that is distinct from the APIs that support other frameworks. Therefore, it is difficult for a company to access other transaction processing services without requiring a common business system interface. Developing such business system interfaces at the API level requires significant cooperation between the parties involved, which is often unrealistic.
因此,希望提供一种框架,它能够使通信网中不同平台之间的相互作用变得容易。这种系统应该方便交易伙伴间的自发贸易,不需要对全行业的标准定制集成或者达成在先协议。另外,这类系统应该鼓励增加商务自动化的途径,以避免了传统系统集成费时多,成本高及风险大的缺点。Therefore, it is desirable to provide a framework that facilitates the interaction between different platforms in a communication network. Such a system should facilitate spontaneous trade between trading partners, without the need for custom integration or prior agreement on industry-wide standards. In addition, such systems should encourage ways to increase business automation to avoid the time-consuming, high-cost and high-risk shortcomings of traditional system integration.
总的来说,希望提供一种电子商务系统,它用开放式市场代替了基于专利标准的封闭式贸易伙伴网络。In general, it is desirable to provide an e-commerce system that replaces a closed network of trading partners based on proprietary standards with an open marketplace.
发明内容 Contents of the invention
本发明提供了一种将企业与客户、供应者和贸易伙伴连接起来的基础结构。在本发明的基础结构下,公司用自定义的、机器可读的文档(诸如,基于可扩充标记语言XML的文档)交换信息和服务,而所述文档很容易在贸易伙伴之间被理解。在本文中,用于描述被交换文档的文档被称为商业接口定义BID,这类文档公布在互联网上,或者与网络成员通信的其它地方。商业接口定义告诉潜在的贸易伙伴公司提供的服务,以及当与这类服务通信要使用的文档。因此,一般的商业接口定义允许客户通过发购货定单进行定购,其中所述购货定单遵从在某一方BID中公布的文档定义,以便接收此购货定单。允许供应者通过下载存货状态报告来检查可获得的量,其中所述存货状态报告遵从在用于管理存货数据的一个商务系统的BID中公布的文档定义。使用预定的、机器可读的商务文档为访问企业应用程序提供了更直观的、更灵活的方法。The present invention provides an infrastructure that connects businesses with customers, suppliers and trading partners. Under the infrastructure of the present invention, companies exchange information and services in custom, machine-readable documents, such as documents based on Extensible Markup Language XML, that are easily understood among trading partners. In this paper, the document used to describe the document being exchanged is called the business interface definition BID, such document is published on the Internet, or communicates with network members elsewhere. The business interface definition tells potential trading partners the services the company provides, and the documents to use when communicating with such services. Thus, a generic business interface definition allows a customer to place an order by issuing a purchase order conforming to a document definition published in a party's BID in order to receive the purchase order. Allows suppliers to check availability by downloading inventory status reports that comply with document definitions published in the BID of a business system used to manage inventory data. Using predetermined, machine-readable business documents provides a more intuitive and flexible method of accessing enterprise applications.
依照本发明,商务网络中的网点建立了一个事务接口,它包括机器可读的接口规范说明,以及机器可读的数据结构,其中机器可读的接口规范说明包括对机器可读的接口规范说明的解释信息。机器可读的接口规范说明包括对输入文档的定义以及对输出文档的定义,这些定义被网点起接口作用的事务处理过程所接受和产生。例如,按照基于标准XML的文档,输入和输出文档的定义包括对各组存储单元以及各组存储单元之逻辑结构的描述。根据本发明的各个方面,包括解释信息的机器可读的数据结构包括对输入和输出文档定义中逻辑结构的数据类型规范说明(例如,串,阵列等)、逻辑结构的内容模型(例如,可能值的清单),和/或将某一特定逻辑结构的预定存储单元组映像到一清单的各个条目以便提供逻辑结构之语义定义的数据结构(例如,将代码映像成产品名称)。According to the present invention, a network point in a business network establishes a transaction interface, which includes a machine-readable interface specification and a machine-readable data structure, wherein the machine-readable interface specification includes a machine-readable interface specification explanation information. The machine-readable interface specification includes the definition of the input document and the definition of the output document, which are accepted and generated by the transaction process that the network node acts as the interface. For example, according to standard XML-based documents, the definition of input and output documents includes a description of each set of storage units and the logical structure of each set of storage units. According to various aspects of the invention, machine-readable data structures including interpretation information include data type specifications (e.g., strings, arrays, etc.) for logical structures in input and output document definitions, content models for logical structures (e.g., list of values), and/or a data structure that maps predetermined groups of storage units of a particular logical structure to individual entries of a list to provide a semantic definition of the logical structure (e.g., mapping code to a product name).
根据本发明的其它方面,接口包括一个至少可以由网络中的一个网点访问的记忆资源库,它存储了一个由逻辑结构和逻辑结构的解释信息所组成的库。资源库可以扩充,以便包括由输入和输出文档定义组成的库、由接口规范说明组成的库,以及由网络中参与者接口网点之规范说明组成的库。According to other aspects of the invention, the interface includes a memory repository accessible by at least one node in the network, which stores a repository of logical structures and interpretation information of the logical structures. The repository can be extended to include a library of input and output document definitions, a library of interface specifications, and a library of specifications for participant interface sites in the network.
因此,本发明事务框架中的参与者在网络的诸网点之间执行各项事务,其中所述网络包括多个网点,它们执行诸事务中所包含的过程。方法是为一事务存储机器可读的接口规范说明,而所述规范说明包括一输入文档的定义和一输出文档的定义。输入和输出文档的定义包括对各组存储单元以及各组存储单元之逻辑结构的描述。在一较佳系统中,定义的表述方式遵从标准的XML文档类型定义DTD,可以通过对一些元素进行语义映像、内容模型化以及数据归类而得以扩充。事务参与者通过通信网接收包含文档的数据。参与者根据为事务存储的规范说明对文档进行语法分析,以便识别该事务的输入文档。在对文档作了语法分析之后,至少将一部分输入文档按机器可读的格式提供给一事务处理过程,以产生一输出。根据所存规范说明中输出文档的定义,形成一输出文档,该输出文档包括事务处理过程的输出。一般,在通信网上将输出文档发回输入文档的源,或者适合一特定事务类型需要的其它地方。Thus, the participants in the transaction framework of the invention carry out transactions between nodes of a network comprising a plurality of nodes which carry out the processes contained in the transactions. A method is to store a machine-readable interface specification for a transaction, the specification including a definition of an input document and a definition of an output document. The definition of input and output documents includes a description of each set of storage units and the logical structure of each set of storage units. In a preferred system, the expression of the definition complies with the standard XML document type definition DTD, and can be extended by performing semantic mapping, content modeling and data classification on some elements. Transaction participants receive data, including documents, over a communication network. A participant parses a document against the specification stored for a transaction in order to identify the input document for that transaction. Following parsing of the document, at least a portion of the input document is provided in a machine-readable format to a transaction process to produce an output. An output document is formed according to the definition of the output document in the stored specification, and the output document includes the output of the transaction process. Typically, output documents are sent back to the source of the input documents over a communications network, or elsewhere as appropriate for a particular type of transaction.
因此,商业接口定义跨接了下述文档和程序之间的间隙,其中所述文档例如是根据XML规定的,而所述程序是在特定网点处的事务处理服务的前端上执行的。此类前端例如可以通过JAVA虚拟机或者通过在网络上提供系统互连的其它公共体系结构来实现。商业接口定义提供了一项技术,通过该技术,利用商业接口定义文档,可以设计事务协议。用文档型的详细形式规范说明可以建立事务协议程序。Thus, the business interface definition bridges the gap between documents specified, for example, in terms of XML, and programs executed on the front end of a transaction service at a particular site. Such front ends may be implemented, for example, by a JAVA virtual machine or by other common architectures that provide system interconnection over a network. The business interface definition provides a technique by which transaction protocols can be designed using a business interface definition document. A transaction protocol program can be established with a detailed formal specification of the document type.
机器可读的事务接口规范说明可以被网络中的其它平台访问。参与者平台包括用于根据一互补网点上规定的事务接口来设计输入文档和输出文档的资源。因此,参与者网点包括用于存取互补接口的输入文档定义以及互补接口的输出文档定义的资源。通过在存储于规范说明中的接口的输入文档定义中至少包括一部分互补接口的输出文档定义,来建立关于访问参与者网点的所存储规范说明。The machine-readable transaction interface specification can be accessed by other platforms in the network. The participant platform includes resources for designing input documents and output documents according to transaction interfaces specified on a complementary web site. Thus, a participant node includes resources for accessing input document definitions of complementary interfaces as well as output document definitions of complementary interfaces. A stored specification for an access participant site is built by including at least a portion of an output document definition for a complementary interface in an input document definition for an interface stored in the specification.
根据本发明的另一方面,用于建立接口的所存储规范说明的过程包括对资源库存取机器可读的规范说明的元素。资源库存储了由逻辑结构、内容模型和逻辑结构的示意图所组成的库,以及文档的定义,其中所述文档包括用来建立接口描述的逻辑结构。可在网络中访问的资源库使得接口描述的建立变得容易,而接口描述很容易被共享。通过网络通信以及对公共逻辑结构认同很容易协商为一特定过程建立的输入文档与希望由互补过程返回的输出文档之间的任何差异,以便表达特殊的信息。According to another aspect of the invention, the process for building a stored specification of an interface includes accessing elements of the machine-readable specification to a repository. The resource library stores a library consisting of logical structures, content models, schematic diagrams of logical structures, and definitions of documents, wherein the documents include logical structures used to build interface descriptions. A resource library accessible on the network makes it easy to create interface descriptions, and interface descriptions are easily shared. Any differences between input documents built for a particular process and output documents expected to be returned by complementary processes are easily negotiated through network communication and agreement on a common logical structure in order to express particular information.
根据本发明的一个方面,机器可读的事务接口规范说明包括一个遵从接口文档定义的文档,所述接口文档定义在网络的各成员之间共享。该接口文档定义包括这样的逻辑结构,它们用于存储一特定事务的标识符,以及关于该特定事务的输入和输出文档的定义与对定义的参考两者中的至少一种。也就是说,对一特定服务的接口描述实际上可以包含对输入和输出文档的定义。另一种方法是,包括指向资源库某个位置或者这种定义在网络中其它地方的指针。According to one aspect of the invention, a machine-readable transaction interface specification includes a document conforming to the definition of an interface document shared among members of the network. The interface document definition includes logical structures for storing an identifier for a particular transaction and at least one of a definition and a reference to a definition of input and output documents pertaining to the particular transaction. That is, the interface description for a particular service can actually include the definition of input and output documents. Alternatively, include a pointer to a location in the repository or elsewhere in the network for such a definition.
依照本发明的另一方面,机器可读的规范说明包括遵从接口文档定义的商业接口定义BID文档,而所述接口文档定义包括这样的逻辑结构,它们用于存储接口的标识符,并且存储关于一个或多个由接口支持的事务组成的事务组的规范说明与对规范说明的参考两者中的至少一种。对于每个被支持的事务,文档至少包括关于特定事务的输入和输出文档的定义和对定义的参考两者中的一种。According to another aspect of the invention, the machine-readable specification includes a business interface definition BID document conforming to the interface document definition, and the interface document definition includes logical structures for storing identifiers of interfaces and storing information about At least one of a specification and a reference to a specification of one or more transaction groups of transactions supported by the interface. For each supported transaction, the document includes at least one of a definition and a reference to the definition of the input and output documents for the particular transaction.
依照本发明的另一方面,根据输入和输出文档的逻辑结构,在输入和输出文档定义中定义的存储单元包括作语法分析的数据,而这些数据又包括对文本字符编码的字符数据,以及用于识别存储单元组的标记数据。依照本发明的另一方面,至少一组存储单元对提供自然语言字的多个文本字符编码。这便于此类文档的人类阅读者和开发者使用输入和输出文档定义。According to another aspect of the present invention, according to the logical structure of the input and output documents, the storage units defined in the input and output document definitions include data for parsing, which in turn includes character data encoding text characters, and Tag data used to identify groups of memory cells. According to another aspect of the invention, at least one set of memory cells encodes a plurality of text characters providing natural language words. This facilitates the use of input and output document definitions by human readers and developers of such documents.
依照本发明的另一方面,输入和输出规范说明包括逻辑结构所识别的多组存储单元中至少一组的解释信息。在一个例子中,解释信息对各组经分析字符的定义进行编码。在另一例中,解释信息提供了概念模型规范说明,诸如要求一具体的逻辑结构,以便携带代码清单中一个成员,其中所述代码被映像至目录的产品描述。在一些系统中,文档之逻辑结构中的存储单元包括许多组未分析的数据,这符合某种特定实施的需要。According to another aspect of the invention, the input and output specifications include interpretation information for at least one of the plurality of sets of memory cells identified by the logical structure. In one example, the interpretation information encodes the definition of each set of analyzed characters. In another example, the interpretation information provides a conceptual model specification, such as requiring a specific logical structure to carry a member in a manifest of code mapped to a product description of a catalog. In some systems, storage units within the logical structure of a document include as many sets of unanalyzed data as are required by a particular implementation.
依照本发明的另一方面,在一特定平台中的事务处理过程具有一种事务处理体系结构,它是多种不同事务处理体系结构中的一种。因此,根据使用该信息的事务处理过程的不同事务处理体系结构,参与者网点包括用于将至少一部分输入文档翻译成一种可读格式的资源。根据事务处理过程的不同事务处理体系结构,将文档定义的诸元素翻译成包括许多变量和方法的编程对象。对于具有一个起事务处理过程前端作用的JAVA虚拟机的参与者来说,将文档中的特定字段翻译成JAVA对象,包括数据以及与JAVA对象相关的被获得和设置的函数。在公共对象请求中介器体系结构CORBA、构件对象模型COM、联机事务处理OLTP和电子数据交换EDI的意义上,本发明可支持的其它事务处理体系结构包括遵从一种接口描述语言的过程。According to another aspect of the invention, a transaction process in a particular platform has a transaction architecture that is one of a plurality of different transaction architectures. Thus, depending on the transaction architecture of the transaction process using the information, the participant site includes resources for translating at least a portion of the input document into a readable format. According to the different transaction processing architectures of the transaction processing process, the elements defined by the document are translated into programming objects including many variables and methods. For participants with a JAVA virtual machine acting as the front end of the transaction process, specific fields in the document are translated into JAVA objects, including data and get and set functions related to the JAVA objects. Other transaction processing architectures supportable by the present invention include procedures conforming to an interface description language in the sense of Common Object Request Broker Architecture CORBA, Component Object Model COM, Online Transaction Processing OLTP and Electronic Data Interchange EDI.
依照本发明的其它方面,提供了一个资源库,它存储了在多项事务中使用的文档类型。机器可读的一特定事务的规范说明通过参考资源库的文档类型至少定义了输入文档和输出文档中的一个。依照另一方面,包含在资源库的文档类型包括用于识别网络参与者的文档类型。这类文档类型提供了用于识别参与者的结构、用于规定参与者支持的服务的结构,以及用于规定每种服务之输入和输出文档的结构。According to other aspects of the present invention, a repository is provided that stores document types used in transactions. A machine-readable specification of a particular transaction defines at least one of an input document and an output document by reference to a document type of a repository. According to another aspect, the document types contained in the repository include document types for identifying network participants. This type of document provides structures for identifying actors, for specifying the services that actors support, and for specifying the input and output documents for each service.
除了上述方法之外,本发明提供了一种用于管理网点间事务的设备,该设备包括网络接口;存储器,用于存储数据和指令程序,包括上述机器可读的事务接口规范说明;以及数据处理器,它与存储器和网络接口相连。存储在该设备中的指令程序包括逻辑电路,用以为事务参与者执行上述过程。In addition to the above method, the present invention provides a device for managing transactions between network points, which device includes a network interface; a memory for storing data and instruction programs, including the above-mentioned machine-readable transaction interface specification; and data Processor, which is connected to memory and network interface. The program of instructions stored in the device includes logic circuits to perform the above-described processes for the transaction participants.
本发明还提供了一种为系统上执行的事务建立参与者接口的设备,其中参与者接口包括网络接口和数据处理资源,根据事务处理体系结构执行事务处理过程。所述设备包括指令程序,它们可以由系统执行,并且存储在系统可访问的媒体上,指令程序提供了为一特定事务参与者建立参与者接口定义的工具。参与者接口定义包括输入文档定义和输出文档定义。输入和输出文档定义包括对各组存储单元以及各组存储单元之逻辑结构的机器可读的描述,依照本发明的一个方面,各组存储单元以及各组存储单元的逻辑结构遵从XML文档类型定义。The present invention also provides a device for establishing a participant interface for transactions executed on the system, wherein the participant interface includes network interfaces and data processing resources, and executes transaction processing processes according to the transaction processing architecture. The apparatus includes a program of instructions executable by the system and stored on a medium accessible to the system, the program of instructions providing the means to establish a participant interface definition for a particular transaction participant. Actor interface definitions include input document definitions and output document definitions. The input and output document definitions include a machine-readable description of each set of storage units and the logical structure of each set of storage units. According to one aspect of the present invention, each set of storage units and the logical structure of each set of storage units conform to the XML document type definition .
依照本发明的这一方面,用于建立参与者接口的设备还包括以下指令程序,它们存储在数据处理系统可访问的媒体上,并且响应输入和输出文档定义,用于编译与存储单元组以及输入和输出文档之逻辑结构相对应的数据结构,其中存储单元组以及输入和输出文档的逻辑结构遵从事务处理体系结构;用于编译系统可执行的指令,以便将输入文档翻译成相应的数据结构;以及编译系统可执行的指令,以便将事务处理过程的输出翻译成各组存储单元和输出文档的逻辑结构。In accordance with this aspect of the invention, the apparatus for establishing a participant interface further includes a program of instructions stored on a medium accessible to the data processing system and responsive to input and output document definitions for compiling and storing sets of units and A data structure corresponding to the logical structure of the input and output documents, where the group of storage units and the logical structure of the input and output documents follow the transaction processing architecture; used to compile system-executable instructions to translate the input documents into the corresponding data structures ; and compile system-executable instructions for translating the output of the transaction process into logical structures of groups of storage units and output documents.
在一较佳实施例中,用于建立参与者接口定义的工具包括系统可执行的指令,以便从补充网点和/或资源库中存取定义的元素,其中所述资源库存储了由逻辑结构以及用来建立接口描述的逻辑结构解释信息组成的库。根据本发明的各个方面,资源库不仅包括逻辑结构库,而且包括包含逻辑结构的文档定义,以及用于规定参与者接口的格式。依照本发明的这一方面,根据上述技术,并结合对参与者网点的描述,为建立商业接口规范说明提供了工具。在较佳实施例的参与者网点中实现了用于建立接口的工具以及用于将接口编译成资源库的工具,其中资源库是根据本发明该方面与事务处理体系结构进行通信所需要的。并且,当网络的使用根据定义输入和输出文档的接口描述而增长时,可以用这些工具开发和优化接口描述。In a preferred embodiment, the means for establishing the participant interface definition includes system-executable instructions for accessing elements of the definition from a supplemental network site and/or a repository storing elements defined by the logical structure As well as a library of logical structure interpretation information used to create interface descriptions. According to various aspects of the invention, the resource repository includes not only a repository of logical structures, but also document definitions containing logical structures, and formats for specifying participant interfaces. According to this aspect of the invention, tools are provided for building business interface specifications based on the techniques described above, combined with descriptions of participant sites. The tools for building the interface and the tools for compiling the interface into the repository required to communicate with the transaction processing architecture according to this aspect of the invention are implemented in the participant node of the preferred embodiment. Also, these tools can be used to develop and optimize interface descriptions as the usage of the network grows according to the interface descriptions that define the input and output documents.
因此,本发明的另一方面提供一种设备,该设备包括存储器和数据处理器,其中数据处理器用于执行存储器中所存的指令,所述指令包括用于建立参与者接口定义的工具和用于完成上述功能的编译器。Accordingly, another aspect of the invention provides an apparatus comprising a memory and a data processor, wherein the data processor is operable to execute instructions stored in the memory, the instructions including means for establishing a participant interface definition and for A compiler that performs the above functions.
依照本发明的另一方面,使用参与者接口描述能够使市场制造者网点工作。在这样的网点上,提供了一种用于管理事务的方法,该方法包括存储机器可读的多个参与者接口的规范说明,所述规范说明可以识别由接口支持的事务,以及这些事务的输入和输出文档。如上所述,输入和输出文档的定义包括对各组存储单元和各组存储单元之逻辑结构的描述,诸如根据XML标准。另外,事务的定义和参与者接口定义都包括根据一项技术规定的文档,所述技术遵从XML或其它标准化的文档表述语言。在这样的市场制造者网点上,通过通信网接口包含文档的数据。根据规范说明对文档进行语法分析,以便识别用于接受被识别输入文档的一个或多个事务中的输入文档。按机器可读的格式将至少一部分输入文档提供给与一个或多个被识别事务相关的事务处理过程。将至少一部分输入文档提供给事务处理过程的步骤包括在市场制造商网点上根据处理体系结构执行路由选择过程。根据一特定的处理体系结构,执行本发明一个方面的路由选择过程,并且将至少一部分输入文档翻译成路由选择过程的处理体系结构的格式。依照较佳实施例的翻译步骤包括根据路由选择过程的处理体系结构,产生包含许多变量的方法的编程对象。In accordance with another aspect of the invention, market maker sites are enabled using participant interface descriptions. At such a site, there is provided a method for managing transactions, the method comprising storing a machine-readable specification of a multi-participant interface, the specification identifying the transactions supported by the interface, and the Input and output documents. As mentioned above, the definition of input and output documents includes a description of each set of storage units and the logical structure of each set of storage units, such as according to the XML standard. In addition, both the transaction definition and the participant interface definition include documents specified according to a technology that follows XML or other standardized document expression language. On such a market maker site, the data of the document is contained via a communication network interface. The document is parsed according to the specification to identify input documents for one or more transactions that accept the identified input documents. At least a portion of the input document is provided to a transaction processing process associated with the one or more identified transactions in a machine-readable format. The step of providing at least a portion of the input document to the transaction process includes performing a routing process at the market maker site according to the processing architecture. According to a particular processing architecture, the routing process of one aspect of the present invention is executed and at least a portion of the input document is translated into the format of the processing architecture of the routing process. The translating step according to the preferred embodiment includes generating a programming object containing a method of a number of variables according to the processing architecture of the routing process.
依照本发明的另一方面,市场制造者网点还支持资源库结构。因此,在市场制造者网点上提供一个过程,用于允许网络中的参与者能够访问存储在市场制造者网点上的资源库。如上所述,资源库包括逻辑结构的定义,解释信息,以及参与者网点用来建立事务接口文档的文档定义,并且资源库包括用来识别参与者的商业接口定义的实例,以及各参与者执行的事务。According to another aspect of the present invention, the market maker site also supports a repository structure. Accordingly, a process is provided on the market maker site for allowing participants in the network to access the repository stored on the market maker site. As mentioned above, the repository includes definitions of logical structures, interpretation information, and document definitions used by participant sites to build transaction interface documents, and the repository includes instances of business interface definitions used to identify participants, and each participant implements affairs.
依照各种不同的情况,路由选择过程包括将输入文档翻译成文档将被发往的过程的不同处理体系结构,或者按原始文档格式通过网络将输入文档发送给一远程处理网点,或者发送给这类处理的组合。在另一种情况下,路由选择过程还可以包括下述技术,即将依照一个输入文档定义而定义的输入文档翻译成根据一个不同的过程文档规范说明而定义的不同文档,其中所述过程文档规范说明已经登记,以便等待该输入文档。Depending on the circumstances, the routing process includes translating the input document into a different processing architecture for the process to which the document is to be sent, or sending the input document over the network in the original document format to a remote processing site, or to the A combination of class handling. In another case, the routing process may also include the technique of translating an input document defined according to one input document definition into a different document defined according to a different process document specification, wherein the process document specification Indicates that it has already checked in to wait for this input document.
另外,根据本发明将市场制造者网点提供为一种设备,该设备包括网络接口、存储器和数据处理器。其中存储器用于存储数据和指令程序,指令程序包括参与者接口的规范说明。以指令程序的形式为逻辑电路提供了数据处理器,或者如上所述执行市场制造者过程。Furthermore, according to the present invention a market maker site is provided as a device comprising a network interface, a memory and a data processor. The memory is used to store data and instruction programs, and the instruction programs include specification descriptions of participant interfaces. The logic circuit is provided with a data processor in the form of a program of instructions, or executes the market maker process as described above.
因此,本发明根据共享输入和输出文档规范说明的原则,提供了电子事务的基础。文档为访问事务处理服务提供了直觉且灵活的方法,比编程API更容易实施。通过公司已在很大程序上达成一致的被交换的文档,而不是通过总是不同的商务系统接口,更容易使公司互连。另外,在较佳实施例中,用人可阅读的格式规定这类文档。根据本发明,在诸如XML文档等文档中规定商业接口,其中XML文档很容易被人或计算机解释。Thus, the present invention provides the basis for electronic transactions based on the principle of sharing input and output document specifications. Documentation provides an intuitive and flexible approach to accessing transactional services that is easier to implement than a programmatic API. It is easier to interconnect companies through exchanged documents on which the companies have largely agreed, rather than through always different business system interfaces. Additionally, in the preferred embodiment, such documents are specified in a human-readable format. According to the invention, the business interface is specified in a document, such as an XML document, which is easily interpreted by a human or computer.
使用本发明的基于文档的事务体系结构,包括使用语法分析器,对于任何文档源,语法分析器的工作方式基本相同。这样做大大减少了对定制程序的需要,其中定制程序用于从网络的每个参与者那里抽取和集成信息。因此,通过以下步骤可以对由会计、购买、制造、运输和其它功能产生的企业信息进行集成。所述步骤是,首先根据本发明将每个源转换成具有一体系结构的文档,然后处理作语法分析的数据流。系统中参与市场的每个网点都只需要知道其内部系统的格式,以及为根据事务进行互换而规定的文档的格式。因此,不需要为希望参与电子商务网络的每个其它网点产生本地格式。Using the document-based transaction architecture of the present invention, including the use of a parser, the parser works in essentially the same way for any document source. Doing so greatly reduces the need for custom programs for extracting and integrating information from each participant in the network. Therefore, enterprise information generated by accounting, purchasing, manufacturing, shipping, and other functions can be integrated through the following steps. The steps are first to convert each source according to the invention into a document with an architecture, and then to process the data stream for parsing. Each outlet in the system that participates in the market needs only to know the format of its internal system, and the format of the documents specified for the exchange according to the transaction. Thus, there is no need to generate a local format for every other site wishing to participate in the e-commerce network.
为了完整的商业集成,本发明提供了一种具有标准化逻辑结构(类似XML元素)、属性或元数据的资源库,为特定的商业群体建立了语义语言。本发明还提供了一种在不同元数据描述之间映像的装置,以及用于处理文档并且调用合适应用程序和服务的服务器。依照本发明,网络的基本构成块包括商业接口定义,它们告诉潜在的贸易伙伴公司提供怎样的联机服务,以及用哪些文档来调用服务;服务器,它们提供桥梁,以便将内部和外部的事务处理服务组束缚在一起,从而建立一个贸易群体。服务器的作用是对输入文档进行语法分析,并且调用合适的服务。另外,本发明的服务器承担翻译任务,将被接收和被发送的文档格式翻译成各主系统的格式。因此,贸易伙伴只需要对被交换的商务文档的结构、内容和序列达成一致,不需要对应用程序设计接口的细节达到一致。如何处理文档以及因接收文档而引起的行为严格地由提供服务的企业决定。这将集成从系统层次提高至企业层次。这使得企业可以将一清楚且稳定的接口呈现给它的对手,不管其内部技术实施、组织或过程如何变化。For complete business integration, the present invention provides a resource library with standardized logical structure (similar to XML elements), attributes or metadata, and establishes a semantic language for specific business groups. The invention also provides a means for mapping between different metadata descriptions, and a server for processing documents and invoking appropriate applications and services. In accordance with the present invention, the basic building blocks of a network include business interface definitions, which tell potential trading partners what online services a company provides, and which documents to use to invoke the services; servers, which provide a bridge between internal and external transaction services; Groups are bound together, thus creating a trade group. The role of the server is to parse the input document and invoke the appropriate service. In addition, the server of the present invention undertakes the task of translating the received and sent document formats into the formats of each host system. Therefore, trading partners only need to agree on the structure, content and sequence of the business documents to be exchanged, and do not need to agree on the details of the application programming interface. How documents are handled and the actions that result from receipt of documents are strictly at the discretion of the business providing the services. This elevates integration from the system level to the enterprise level. This allows a business to present a clear and stable interface to its adversaries regardless of changes in its internal technical implementation, organization or processes.
通过使用公共商业库或资源库,方便了建立商业接口定义并使服务器根据这些描述管理商业活动的整个过程,其中公共商业库或资源库包括一般商业概念的信息模型,这些模型包括诸如公司、服务和产品等商业描述原语,诸如目录、购货定单和发票等商业形式,以及包括时间和日期、位置以及货物分类等标准度量。The overall process of establishing business interface definitions and enabling servers to manage business activities based on these descriptions is facilitated by the use of a common business library or resource library that includes information models of general business concepts, such as companies, services, Business description primitives such as and products, business forms such as catalogs, purchase orders, and invoices, and standard metrics including time and date, location, and item classification.
通过附图、详细描述和后面的权利要求书,将清楚本发明的其它方面。Other aspects of the invention will become apparent from the drawings, detailed description, and claims that follow.
附图概述Figure overview
图1是一简化图,示出了依照本发明的包括商业接口定义BID的电子商务网。Fig. 1 is a simplified diagram showing an electronic commerce network including a business interface definition BID according to the present invention.
图2是一简化图,示出了依照本发明的商业接口定义文档。Figure 2 is a simplified diagram illustrating a business interface definition document in accordance with the present invention.
图3是一概念性的方框图,示出了本发明网络中在一参与者网点处的服务器。Figure 3 is a conceptual block diagram illustrating a server at a participant site in the network of the present invention.
图4是一流程图,示出了依照本发明的在一参与者网点处对接收文档的处理过程。FIG. 4 is a flowchart illustrating the processing of received documents at a participant site in accordance with the present invention.
图5是一方框图,示出了基于XML系统的语法分析器和事务处理过程前端。Figure 5 is a block diagram showing a parser and transaction processing front end for an XML-based system.
图6是一概念图,示出了分析函数的流程。Fig. 6 is a conceptual diagram showing the flow of an analysis function.
图7是一简化图,示出了服务器的资源,这些资源用来建立本发明的商业接口定义。Figure 7 is a simplified diagram showing the server resources used to build the business interface definitions of the present invention.
图8是一简化图,示出了依照本发明用来建立商业接口定义的资源库。Figure 8 is a simplified diagram illustrating the resource library used to create business interface definitions in accordance with the present invention.
图9是一流程图,示出了依照本发明建立商业接口定义的过程。Fig. 9 is a flowchart illustrating the process of creating a business interface definition in accordance with the present invention.
图10提供了对本发明资源库的启发式观察。Figure 10 provides a heuristic look at the repository of the present invention.
图11是一简化图,示出了服务器的资源,这些资源根据商业接口定义为本发明的网络提供了市场制造者的功能。Figure 11 is a simplified diagram showing the resources of the server providing the market maker functionality for the network of the present invention according to the business interface definition.
图12是一流程图,示出了接收文档的市场制造者网点处理。Fig. 12 is a flowchart showing the market maker site processing of receiving documents.
图13是一流程图,示出了依照本发明在一市场制造者网点处登记参与者的过程。FIG. 13 is a flowchart illustrating the process of enrolling participants at a market maker site in accordance with the present invention.
图14是一流程图,依照图9过程在一市场制造者网点处提供服务规范说明的过程。FIG. 14 is a flowchart of the process of providing service specification at a market maker site in accordance with the process of FIG. 9. FIG.
图15是一示意图,示出了依照本发明在一参与者或市场制造者网点处的操作序列。Figure 15 is a schematic diagram showing the sequence of operations at a participant or market maker site in accordance with the present invention.
图16是一概念图,示出了依照本发明的、基于BID的商务网要素。Fig. 16 is a conceptual diagram showing BID-based business network elements according to the present invention.
详细描述A detailed description
针对各附图对本发明进行详细描述,其中图1示出了由市场参与者和市场制造者组成的网络,该网络基于使用商业接口定义,并且支持对依照这类接口描述规定的输入和输出文档进行交易。网络包括多个网点11-18,它们通过诸如互联网19或其它电信或数据通信网等通信网互联。每个网点11-19都包括一计算机,诸如便携式计算机、台式个人计算机、工作站、系统网络、或者其它数据处理资源。网点包括存储器,用于存储商业接口定义;处理器,用于执行与网络中其它网点进行商务交易的事务处理过程;计算机程序,它们由支持这些服务的的处理器执行。另外,每个网点包括一个网络接口,用于提供与互联网19或其余通信网的通信。The invention is described in detail with reference to the accompanying drawings, in which Figure 1 shows a network of market participants and market makers based on the use of business interface definitions and support for input and output documents specified in accordance with such interface descriptions Trading. The network comprises a plurality of sites 11-18 interconnected by a communications network such as the
在图1的环境中,网点11、12、14、16和18表示市场参与者。市场参与者包括要根据本发明建立的商务处理交易货品或服务的消费者或供应者。In the context of Figure 1, the
在本例中,网点15和17是市场制造者网点。市场制造者网点包括用于登记商业接口定义的资源,称为BID登记。参与者能够向市场制造者网点发送文档,而在市场制造者网点处,识别该文档并将文档传送给已登记可以接收这些文档作为输入的合适的参与者。市场制造者还保持标准形式的资源库,以方便商务网,这里标准形式的资源库构成一公共的商用库,用于建立商业接口定义。In this example,
在本例中,市场参与者18直接与市场制造者17相连,而不通过互联网19连接。这种与市场制造者的直接连接表示支持商务交易的网络结构可以是各种各样的,包括诸如互联网19等公用网,以及诸如局域网的专用连接,或者如网点17和18之间所示的点对点连接。实际通信网变化很多,并且适用于本发明的商务交易网。In this example, the
图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所示的参与者的商业接口定义包括逻辑结构的实际定义,它们将用于各种服务的输入和输出文档,或者可以找到这些定义位置的的指针或其它参考。Fig. 2 is a heuristic diagram showing the nested structure in the Business Interface Definition BID established for market participants in the network of the present invention. The business interface definition shown in FIG. 2 is a data structure including logical structures and storage units arranged in the form definition of a document structure (such as XML document type definition DTD). The structure of Figure 2 includes a first
尽管可以使用其它文档定义结构,但在较佳系统中,图2的文档列在XML文档类型定义DTD中。另外,事务BID、输入文档BID和输出文档BID都是根据XML文档类型定义来规定的。XML型文档是一例基于分析数据的系统,所述分析数据包括标记数据和字符数据。标记数据识别文档内的逻辑结构,字符数据组识别逻辑结构的内容。另外,文档中还携带未分析的数据,用于各种目的。例如,参见WC3 XML工作组在WWW.W3.ORG/TR/1998/REC-XML-19980210上公布的可扩充标记语言XML 1.0 REC-XML-19980210的规范说明。In a preferred system, the documents of Figure 2 are listed in an XML Document Type Definition DTD, although other document definition structures may be used. In addition, the transaction BID, the input document BID and the output document BID are all specified according to the XML document type definition. An XML-type document is an example of a system based on analyzing data including markup data and character data. Markup data identifies logical structure within a document, and character data sets identify logically structured content. In addition, the documents carry unanalyzed data and are used for various purposes. See, for example, the Extensible Markup Language XML 1.0 REC-XML-19980210 specification published by the WC3 XML Working Group at WWW.W3.ORG/TR/1998/REC-XML-19980210.
因此,在一例示的系统中,网络中的参与者网点通过将商业系统和服务与商业活动接受和产生的XML编码文档互连,建立了虚拟的公司。例如一特定服务的商业接口定义建立以下内容:如果接收到一个与请求目录输入的BID相匹配的文档,那么将返回一个与目录输入的BID相匹配的文档。另外,如果接收到一个与定单BID相匹配的文档,并且可被接收终端接受,那么将返回与发票相匹配的文档。在XML文档输入本地商业系统之前,网络中的网点处理这些文档,其中本地商业系统是根据网络中任何给定系统的各种事务处理结构而建立的。因此,系统拆开相关的文档组(诸如,经MIMI编码的XML文档组),分析它们,产生“标记消息”流。将消息传送到例如使用下述事件收听器模型的适合的应用程序和服务。Thus, in an exemplary system, participant sites in the network create virtual corporations by interconnecting business systems and services with XML-encoded documents received and generated by business activities. For example a business interface definition for a particular service establishes the following: If a document is received that matches the BID of the requested catalog entry, then a document matching the BID of the catalog entry will be returned. Additionally, if a document is received that matches the order BID and is acceptable to the receiving terminal, then the document that matches the invoice will be returned. Sites in the network process the XML documents before they are imported into the local business systems that are built upon the various transaction structures of any given system in the network. Thus, the system unpacks related sets of documents (such as MIMI-encoded sets of XML documents), analyzes them, and produces a stream of "marked messages". Messages are delivered to suitable applications and services, for example using the event listener model described below.
用XML语言对商业服务之间交换的文档编码,其中XML语言由构成块的资源库建立,它是一种公用的商业语言,用该语言可以建立更复杂的文档定义。资源库存储了解释信息模块,着重于商业领域公共的功能和信息,包括诸如公司、服务和产品等商业描述原语;诸如目录、定单和发票等商业形式;诸如时间、日期的地址等标准度量;分类码;以及为XML文档中的逻辑结构提供解释信息的其它东西。Documents exchanged between business services are encoded in XML language, where XML language is established by a resource library of building blocks. It is a common business language, and more complex document definitions can be established in this language. The repository stores interpretive information modules, focusing on functions and information common to the business world, including business description primitives such as companies, services, and products; business forms such as catalogs, orders, and invoices; and standard metrics such as addresses such as time and date ; classification codes; and other things that provide interpretation information for the logical structure in an XML document.
商业接口定义是一种高级文档,它起模式作用,用于根据本发明设计交易文档的接口。因此,商业接口定义在XML规定的文档和在一特定网点的事务处理服务的前端上执行的程序之间的间隙上架起了一座桥梁。这些前端可以用JAVA虚拟机或者其它使系统在网络上互连的普通结构来实现。因此,商业接口定义提供了一项技术,通过该技术,利用商业接口定义文档可以对事务处理协议编程。用文档型的详细形式规范建立事务处理协议的程序。A business interface definition is a high-level document that acts as a pattern for designing the interface of a transaction document according to the present invention. Thus, the business interface definition bridges the gap between XML-specified documents and programs executed on the front end of a transaction processing service at a particular site. These front ends can be implemented using JAVA virtual machines or other common structures that interconnect systems over a network. Thus, the business interface definition provides a technique by which a transaction processing protocol can be programmed using a business interface definition document. Procedures for establishing transaction protocols are specified in a documented, detailed form.
下面描述一例基于市场参与者文档的商业接口定义BID,其中所述市场参与者文档符合XML格式。市场参与者DTD对市场参与者的商业信息分组,使联系和地址信息与一种服务和金额信息的描述相关联。这种商业信息包括名称、代码、地址、用子描述商业机构的专用分类机制,以及用于商业术语的指针。另外,由市场参与者DTD标识的服务将规定希望参与者对之响应并产生的输入和输出文档。因此,下面是用例举的公用商业语言为市场参与者DTD、服务DTD和事务处理文档DTD(按XML规定)制定模式的文档,包括说明性的评述。The following describes an example of a business interface definition BID based on a market participant document, wherein the market participant document conforms to the XML format. The Market Participant DTD groups the business information of a Market Participant, associating contact and address information with a description of a service and amount information. This business information includes names, codes, addresses, sub-categories to describe business establishments, and pointers to business terms. Additionally, the service identified by the Market Participant DTD will specify the input and output documents to which the Participant is expected to respond and generate. Accordingly, the following are documents that formulate schemas for Market Participant DTDs, Services DTDs, and Transaction Document DTDs (specified in XML) in an exemplary common business language, including illustrative comments.
市场参与者实例Examples of Market Participants
<!DOCTYPE SCHEMA SYSTEM ″bidl. dtd″><! DOCTYPE SCHEMA SYSTEM ″bidl. dtd″>
<SCHEMA><SCHEMA>
<H1>Market Participant Sample BID</H1> <H1>Market Participant Sample BID</H1>
<META<META
WHO.OWNS=″Veo Systems″ WHO.COPYRIGHT=″Veo Systems″WHO.OWNS="Veo Systems" WHO.COPYRIGHT="Veo Systems"
WHEN.COPYRIGHT=″1998″ DESCRIPTION=″Sample BID″WHEN.COPYRIGHT="1998" DESCRIPTION="Sample BID"
WHO.CREATED=″*″ WHEN.CREATED=″*″WHO.CREATED="*" WHEN.CREATED="*"
WHAT.VERSION=″*″ WHO.MODIFIED=″*″WHAT.VERSION="*" WHO.MODIFIED="*"
WHEN.MODIFIED=″*″ WHEN.EFFECTIVE=″*″WHEN.MODIFIED="*" WHEN.EFFECTIVE="*"
WHEN.EXPIRES=″*″ WHO.EFFECTIVE=″*″WHEN.EXPIRES="*" WHO.EFFECTIVE="*"
WHO.EXPIRES=″*″>WHO.EXPIRES="*">
</META></META>
<PROLOG><PROLOG>
<XMLDECL STANDALONE=″no″></XMLDECL><XMLDECL STANDALONE=″no″></XMLDECL>
<DOCTYPE NAME=″market.participant″><DOCTYPE NAME="market.participant">
<SYSTEM>markpart.dtd</SYSTEM></DOCTYPE><SYSTEM>markpart.dtd</SYSTEM></DOCTYPE>
</PROLOG></PROLOG>
DTD NAME=″markpart.dtd″>DTD NAME="markpart.dtd">
<H2>Market Participant</H2> <H2>Market Participant</H2>
<H3>Market Participant</H3> <H3>Market Participant</H3>
<ELEMENTTYPE NAME=″market. participant″><ELEMENTTYPE NAME="market. participant">
<EXPLAIN><TITLE>A Market Participant</TITLE><EXPLAIN><TITLE>A Market Participant</TITLE>
<SYNOPSIS>A business or person and its service interfaces.</SYNOPSIS><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<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 serviceand 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 theinterfaces located on the network. In this example, the pointers have been resolved and the
complete BID is presented here.</P></EXPLAIN>complete BID is presented here.</P></EXPLAIN>
<MODEL><CHOICE><MODEL><CHOICE>
<ELEMENT NAME=″business″></ELEMENT><ELEMENT NAME="business"></ELEMENT>
<ELEMENT NAME=″person″></ELEMENT><ELEMENT NAME="person"></ELEMENT>
</CHOICE></MODEL></ELEMENTTYPE></CHOICE></MODEL></ELEMENTTYPE>
<H3>Party Prototype</H3> <H3>Party Prototype</H3>
<PROTOTYPE NAME=″party″><PROTOTYPE NAME="party">
<EXPLAIN><TITLE>The Party Prototype</TITLE></EXPLAIN><EXPLAIN><TITLE>The Party Prototype</TITLE></EXPLAIN>
<MODEL><SEQUENCE><MODEL><SEQUENCE>
<ELEMENT NAME=″party.name″ OCCURS=″+″></ELEMENT><ELEMENT NAME="party.name" OCCURS="+"></ELEMENT>
<ELEMENT NAME=″address.set″></ELEMENT><ELEMENT NAME="address.set"></ELEMENT>
</SEQUENCE></MODEL></SEQUENCE></MODEL>
</PROTOTYPE></PROTOTYPE>
<H3>Party Types</H3> <H3>Party Types</H3>
<ELEMENTTYPE NAME=″business″><ELEMENTTYPE NAME="business">
<EXPLAIN><TITLE>A Business</TITLE><EXPLAIN><TITLE>A Business</TITLE>
<SYNOPSIS>A business(party)with a business number attribute.</SYNOPSIS><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<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 usednumber 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>as a cross-reference to/from customer id, credit limits, contacts lists, etc.</P></EXPLAIN>
<EXTENDS HREF=″party″><EXTENDS HREF="party">
<ATTDEF NAME=″business. number″><REQUIRED></REQUIRED></ATTDEF><ATTDEF NAME="business. number"><REQUIRED></REQUIRED></ATTDEF>
</EXTENDS></EXTENDS>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Person Name</H3> <H3>Person Name</H3>
<ELEMENTTYPE NAME=″person″><ELEMENTTYPE NAME="person">
<EXPLAIN><TITLE>A Person</TITLE></EXPLAIN><EXPLAIN><TITLE>A Person</TITLE></EXPLAIN>
<EXTENDS HREF=″party″><EXTENDS HREF="party">
<ATTDEF NAME=″SSN″><IMPLIED></IMPLIED></ATTDEF><ATTDEF NAME="SSN"><IMPLIED></IMPLIED></ATTDEF>
</EXTENDS></EXTENDS>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Party Name</H3> <H3>Party Name</H3>
<ELEMENTTYPE NAME=″party.name″><ELEMENTTYPE NAME="party.name">
<EXPLAIN><TITLE>A Party’s Name</TITLE><EXPLAIN><TITLE>A Party’s Name</TITLE>
<SYNOPSIS>A party’s name in a string of character.</SYNOPSIS></EXPLAIN><SYNOPSIS>A party’s name in a string of character.</SYNOPSIS></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Address Set</H3><H3>Address Set</H3>
<ELEMENTTYPE NAME=″address.set″><ELEMENTTYPE NAME="address.set">
<MODEL><SEQUENCE><MODEL><SEQUENCE>
<ELEMENT NAME=″address.physical″></ELEMENT><ELEMENT NAME="address.physical"></ELEMENT>
<ELEMENT NAME=″telephone″ OCCURS=″*″></ELEMENT><ELEMENT NAME="telephone" OCCURS="*"></ELEMENT>
<ELEMENT NAME=″fax″ OCCURS=″*″></ELEMENT><ELEMENT NAME="fax" OCCURS="*"></ELEMENT>
<ELEMENT NAME=″email″ OCCURS=″*″></ELEMENT><ELEMENT NAME="email" OCCURS="*"></ELEMENT>
<ELEMENT NAME=″internet″ OCCURS=″*″></ELEMENT><ELEMENT NAME="internet" OCCURS="*"></ELEMENT>
</SEQUENCE></MODEL></SEQUENCE></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Physical Address</H3><H3>Physical Address</H3>
<ELEMENTTYPE NAME=″address.physical″><ELEMENTTYPE NAME="address.physical">
<EXPLAIN><TITLE>Physical Address</TITLE><EXPLAIN><TITLE>Physical Address</TITLE>
<SYNOPSIS>The street address,city,state,and zip code.</SYNOPSIS></EXPLAIN><SYNOPSIS>The street address, city, state, and zip code.</SYNOPSIS></EXPLAIN>
<MODEL><SEQUENCE><MODEL><SEQUENCE>
<ELEMENT NAME=″street″></ELEMENT><ELEMENT NAME="street"></ELEMENT>
<ELEMENT NAME=″city″></ELEMENT><ELEMENT NAME="city"></ELEMENT>
<ELEMENT NAME=″state″></ELEMENT><ELEMENT NAME="state"></ELEMENT>
<ELEMENT NAME=″postcode″ OCCURS=″?″></ELEMENT><ELEMENT NAME="postcode" OCCURS="?"></ELEMENT>
<ELEMENT NAME=″country″></ELEMENT><ELEMENT NAME="country"></ELEMENT>
</SEQUENCE></MODEL></SEQUENCE></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Street</H3><H3>Street</H3>
<ELEMENTTYPE NAME=″street″><ELEMENTTYPE NAME="street">
<EXPLAIN><TITLE>Street Address</TITLE><EXPLAIN><TITLE>Street Address</TITLE>
<SYNOPSIS>Street or postal address.</SYNOPSIS></EXPLAIN><SYNOPSIS>Street or postal address.</SYNOPSIS></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>City</H3><H3>City</H3>
<ELEMENTTYPE NAME=″city″><ELEMENTTYPE NAME="city">
<EXPLAIN><TITLE>City Name or Code</TITLE><EXPLAIN><TITLE>City Name or Code</TITLE>
<P>The city name or code is a string that contains sufficient information to identify<P>The city name or code is a string that contains sufficient information to identify
a city within a designated state.</P>a city within a designated state.</P>
</EXPLAIN></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>State</H3><H3>State</H3>
<ELEMENTTYPE NAME=″state″><ELEMENTTYPE NAME="state">
<EXPLAIN><TITLE>State,Province or Prefecture Name or Code</TITLE><EXPLAIN><TITLE>State, Province or Prefecture Name or Code</TITLE>
<P>The state name or code contains sufficient information to identify a state within<P>The state name or code contains sufficient information to identify a state within
a designated country.</P></EXPLAIN>a designated country.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″COUNTRY.US.SUBENTITY″></STRING></MODEL><MODEL><STRING DATATYPE="COUNTRY.US.SUBENTITY"></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Postal Code</H3><H3>Postal Code</H3>
<ELEMENTTYPE NAME=″postcode″><ELEMENTTYPE NAME="postcode">
<EXPLAIN><TITLE>Postal Code</TITLE><EXPLAIN><TITLE>Postal Code</TITLE>
<P>A postal code is an alphanumeric code,designated by an appropriate postal authority,<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.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>Postal authorities include designated national postal authorities.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″string″></STRING></MODEL><MODEL><STRING DATATYPE=″string″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Country</H3><H3>Country</H3>
<ELEMENTTYPE NAME=″country″><ELEMENTTYPE NAME="country">
<EXPLAIN><TITLE>Country Code</TITLE><EXPLAIN><TITLE>Country Code</TITLE>
<P>A country code is a two-letter code,designated by ISO,that is used to uniquely<P>A country code is a two-letter code, designated by ISO, that is used to uniquely
identify a country.</P></EXPLAIN>identify a country.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″country″></STRING></MODEL><MODEL><STRING DATATYPE="country"></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Network Addresses</H3><H3>Network Addresses</H3>
<ELEMENTTYPE NAME=″telephone″><ELEMENTTYPE NAME="telephone">
<EXPLAIN><TITLE>Telephone Number</TITLE><EXPLAIN><TITLE>Telephone Number</TITLE>
<P>A telephone number is a string of alphanumerics and punctuation that uniquely<P>A telephone number is a string of alphanumerics and punctuation that uniquely
identifies a telephone service terminal,including extension number.</P></EXPLAIN>identifies a telephone service terminal, including extension number.</P></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Fax</H3> <H3>Fax</H3>
<ELEMENTTYPE NAME=″fax″><ELEMENTTYPE NAME="fax">
<EXPLAIN><TITLE>Fax Number</TITLE><EXPLAIN><TITLE>Fax Number</TITLE>
<P>A fax number is a string of alphanumerics and punctuation that uniquely identifies<P>A fax number is a string of alphanumerics and punctuation that uniquely identifies
a fax service terminal.</P>a fax service terminal.</P>
</EXPLAIN></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Email</H3> <H3>Email</H3>
<ELEMENTTYPE NAME=″email″><ELEMENTTYPE NAME="email">
<EXPLAIN><TITLE>Email Address</TITLE><EXPLAIN><TITLE>Email Address</TITLE>
<P>An email address is a datatype-constrained string that uniquely identifies a mailbox<P>An email address is a datatype-constrained string that uniquely identifies a mailbox
on a server.</P></EXPLAIN>on a server.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″email″></STRING></MODEL><MODEL><STRING DATATYPE="email"></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Internet Address</H3> <H3>Internet Address</H3>
<ELEMENTTYPE NAME=″internet″><ELEMENTTYPE NAME="internet">
<EXPLAIN><TITLE>Internet Address</TITLE><EXPLAIN><TITLE>Internet Address</TITLE>
<P>An Internet address is a datatype-constrained string that uniquely identifies a<P>An Internet address is a datatype-constrained string that uniquely identifies a
resource on the Internet by means of a URL.</P></EXPLAIN>resource on the Internet by means of a URL.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″url″></STRING></MODEL><MODEL><STRING DATATYPE=″url″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
</DTD></DTD>
</SCHEMA></SCHEMA>
服务描述实例Service Description Example
<!DOCTYPE schema SYSTEM ″bidl.dtd″><! DOCTYPE schema SYSTEM ″bidl.dtd″>
<SCHEMA><SCHEMA>
<H1>Service Description Sample BID</H1><H1>Service Description Sample BID</H1>
<META<META
WHO.OWNS=″Veo Systems″ WHO.COPYRIGHT=″Veo Systems″WHO.OWNS="Veo Systems" WHO.COPYRIGHT="Veo Systems"
WHEN.COPYRIGHT=″1998″ DESCRIPTION=″Sample BID″WHEN.COPYRIGHT="1998" DESCRIPTION="Sample BID"
WHO.CREATED=″*″ WHEN.CREATED=″*″WHO.CREATED="*" WHEN.CREATED="*"
WHAT.VERSION=″*″ WHO.MODIFIED=″*″WHAT.VERSION="*" WHO.MODIFIED="*"
WHEN.MODIFIED=″*″ WHEN.EFFECTIVE=″*″WHEN.MODIFIED="*" WHEN.EFFECTIVE="*"
WHEN.EXPIRES=″*″ WHO.EFFECTIVE=″*″WHEN.EXPIRES="*" WHO.EFFECTIVE="*"
WHO.EXPIRES=″*″>WHO.EXPIRES="*">
</META></META>
<PROLOG><PROLOG>
<XMLDECL STANDALONE=″no″></XMLDECL><XMLDECL STANDALONE="no"></XMLDECL>
<DOCTYPE NAME=″service″><DOCTYPE NAME="service">
<SYSTEM>service.dtd</SYSTEM></DOCTYPE><SYSTEM>service.dtd</SYSTEM></DOCTYPE>
</PROLOG></PROLOG>
<DTD NAME=″service.dtd″><DTD NAME="service.dtd">
<H2>Services</H2><H2>Services</H2>
<H3>Includes</H3><H3>Includes</H3>
<!-- INCLUDE><SYSTEM>comments.bim</SYSTEM></INCLUDE --><! -- INCLUDE><SYSTEM>comments.bim</SYSTEM></INCLUDE -->
<H3>Service Set</H3><H3>Service Set</H3>
<ELEMENTTYPE NAME=″service.set″><ELEMENTTYPE NAME="service.set">
<EXPLAIN><TITLE>Service Set</TITLE><EXPLAIN><TITLE>Service Set</TITLE>
<SYNOPSIS>A set of services.</SYNOPSIS></EXPLAIN><SYNOPSIS>A set of services.</SYNOPSIS></EXPLAIN>
<MODEL><MODEL>
<ELEMENT NAME=″service″ OCCURS=″+″></ELEMENT><ELEMENT NAME="service" OCCURS="+"></ELEMENT>
</MODEL></ELEMENTTYPE></MODEL></ELEMENTTYPE>
<H3>Services Prototype</H3><H3>Services Prototype</H3>
<PROTOTYPE NAME=″prototype.service″><PROTOTYPE NAME="prototype.service">
<EXPLAIN><TITLE>Service</TITLE></EXPLAIN><EXPLAIN><TITLE>Service</TITLE></EXPLAIN>
<MODEL><SEQUENCE><MODEL><SEQUENCE>
<ELEMENT NAME=″service.name″></ELEMENT><ELEMENT NAME="service.name"></ELEMENT>
<ELEMENT NAME=″service.terms″ OCCURS=″+″></ELEMENT><ELEMENT NAME="service.terms" OCCURS="+"></ELEMENT>
<ELEMENT NAME=″service.location″ OCCURS=″+″></ELEMENT><ELEMENT NAME="service.location" OCCURS="+"></ELEMENT>
<ELEMENT NAME=″service.operation″ OCCURS=″+″></ELEMENT><ELEMENT NAME="service.operation" OCCURS="+"></ELEMENT>
</SEQUENCE></MODEL></SEQUENCE></MODEL>
<!-- ATTGROUP><IMPLEMENTS<! -- ATTGROUP><IMPLEMENTS
HREF=″common.attrib″></IMPLEMENTS></ATTGROUP -->HREF="common.attrib"></IMPLEMENTS></ATTGROUP -->
</PROTOTYPE></PROTOTYPE>
<H3>Service</H3> <H3>Service</H3>
<INTRO><P>A service is an addressable network resource that provides interfaces to<INTRO><P>A service is an addressable network resource that provides interfaces to
specific operations by way of input and output documents.</P></INTRO>specific operations by way of input and output documents.</P></INTRO>
<ELEMENTTYPE NAME=″service″><ELEMENTTYPE NAME="service">
<EXPLAIN><TITLE>Service</TITLE><EXPLAIN><TITLE>Service</TITLE>
<P>A service is defined in terms of its name,the location(s) at which the service is<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>available, and the operation(s) that the service performs.</P></EXPLAIN>
<MODEL><SEQUENCE><MODEL><SEQUENCE>
<ELEMENT NAME=″service.name″></ELEMENT><ELEMENT NAME="service.name"></ELEMENT>
<ELEMENT NAME=″service.location″></ELEMENT><ELEMENT NAME="service.location"></ELEMENT>
<ELEMENT NAME=″service.operation″ OCCURS=″+″></ELEMENT><ELEMENT NAME="service.operation" OCCURS="+"></ELEMENT>
<ELEMENT NAME=″service.terms″></ELEMENT><ELEMENT NAME="service.terms"></ELEMENT>
</SEQUENCE></MODEL></SEQUENCE></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Name</H3> <H3>Service Name</H3>
<ELEMENTTYPE NAME=″service.name″><ELEMENTTYPE NAME="service.name">
<EXPLAIN><TITLE>Service Name</TITLE><EXPLAIN><TITLE>Service Name</TITLE>
<P>The service name is a human-readable string that ascribes a moniker for a service.<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>It may be employed is user interfaces and documentation, or for other purposes.</P></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Location</H3> <H3>Service Location</H3>
<ELEMENTTYPE NAME=″service.location″><ELEMENTTYPE NAME="service.location">
<EXPLAIN><TITLE>Service Location</TITLE><EXPLAIN><TITLE>Service Location</TITLE>
<SYNOPSIS>A URI of a service.</SYNOPSIS><SYNOPSIS>A URI of a service.</SYNOPSIS>
<P>A service location is a datatype-constrained string that locates a service on the<P>A service location is a datatype-constrained string that locates a service on the
Internet by means of a URI.</P></EXPLAIN>Internet by means of a URI.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″url″></STRING></MODEL><MODEL><STRING DATATYPE=″url″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Operations</H3> <H3>Service Operations</H3>
<INTRO><P>A service operation consists of a name,location and its interface,as<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 typeidentified 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>of document that it will return as a result.</P></INTRO>
<ELEMENTTYPE NAME=″service.operation″><ELEMENTTYPE NAME="service.operation">
<EXPLAIN><TITLE>Service Operations</TITLE><EXPLAIN><TITLE>Service Operations</TITLE>
<P>A service operation must have a name,a location,and at least one document type as<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>an input, with one or more possible document types returned as a result of the operation.</P>
</EXPLAIN></EXPLAIN>
<MODEL><SEQUENCE><MODEL><SEQUENCE>
<ELEMENT NAME=″service.operation.name″></ELEMENT><ELEMENT NAME="service.operation.name"></ELEMENT>
<ELEMENT NAME=″service.operation.location″></ELEMENT><ELEMENT NAME="service.operation.location"></ELEMENT>
<ELEMENT NAME=″service.operation.input″></ELEMENT><ELEMENT NAME="service.operation.input"></ELEMENT>
<ELEMENT NAME=″service.operation.output″></ELEMENT><ELEMENT NAME="service.operation.output"></ELEMENT>
</SEQUENCE></MODEL></SEQUENCE></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Operation Name</H3> <H3>Service Operation Name</H3>
<ELEMENTTYPE NAME=″service.operation.name″><ELEMENTTYPE NAME="service.operation.name">
<EXPLAIN><TITLE>Service Operation Name</TITLE><EXPLAIN><TITLE>Service Operation Name</TITLE>
<P>The service operation name is a human-readable string that ascribes a moniker to a<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 otherservice operation.It may be employed in user interfaces and documentation, or for other
purposes.</P></EXPLAIN>purposes.</P></EXPLAIN>
<MODEL><STRING></STRING></MODEL><MODEL><STRING></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Operation Location</H3> <H3>Service Operation Location</H3>
<INTRO><P>The service location is a network resource.That is to say,a URI.</P></INTRO><INTRO><P>The service location is a network resource. That is to say, a URI.</P></INTRO>
<ELEMENTTYPE NAME=″service.operation.location″><ELEMENTTYPE NAME="service.operation.location">
<EXPLAIN><TITLE>Service Operation Location</TITLE><EXPLAIN><TITLE>Service Operation Location</TITLE>
<SYNOPSIS>A URI of a service operation.</SYNOPSIS><SYNOPSIS>A URI of a service operation.</SYNOPSIS>
<P>A service operation location is a datatype-constrained string that locates a service<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>operation on the Internet by means of a URL.</P></EXPLAIN>
<MODEL><STRING DATATYPE=″url″></STRING></MODEL><MODEL><STRING DATATYPE=″url″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Operation Input Document</H3> <H3>Service Operation Input Document</H3>
<INTRO><P>The input to a service operation is defined by its input document type.That<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 inputis, 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>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<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 allowsparticipant 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.Inreuse 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>addition, it encourages parallel design and implementation.</P></INTRO>
<ELEMENTTYPE NAME=″service.operation.input″><ELEMENTTYPE NAME="service.operation.input">
<EXPLAIN><TITLE>Service Operation Input</TITLE><EXPLAIN><TITLE>Service Operation Input</TITLE>
<SYNOPSIS>Identifies the type of the service operation input document.</SYNOPSIS><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<P>Service location input is a datatype-constrained string that identifies a BID on the
Internet by means of a URI.</P>Internet by means of a URI.</P>
</EXPLAIN></EXPLAIN>
<MODEL><STRING DATATYPE=″url″></STRING></MODEL><MODEL><STRING DATATYPE=″url″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Operation Output Document Type</H3> <H3>Service Operation Output Document Type</H3>
<INTRO><P>The output of a service operation is defined by its output document type(s).<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 theThat is, the service operation is expected to emit a document whose type corresponds to the
document type specified by this element.</P></INTRO>document type specified by this element.</P></INTRO>
<ELEMENTTYPE NAME=″service.operation.output″><ELEMENTTYPE NAME="service.operation.output">
<EXPLAIN><TITLE>Service Operation Output</TITLE><EXPLAIN><TITLE>Service Operation Output</TITLE>
<SYNOPSIS>Identifies the type of the service operation output document.</SYNOPSIS><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<P>Service location output is a datatype-constrained string that identifies a BID on
the Internet by means of a URI.</P>the Internet by means of a URI.</P>
</EXPLAIN></EXPLAIN>
<MODEL><STRING DATATYPE=″url″></STRING></MODEL><MODEL><STRING DATATYPE=″url″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
<H3>Service Terms</H3> <H3>Service Terms</H3>
<INTRO><P>This is a simple collection of string elements,describing the terms of an <INTRO><P>This is a simple collection of string elements, describing the terms of an
agreement.</P></INTRO>agreement.</P></INTRO>
<ELEMENTTYPE NAME=″service.terms″><ELEMENTTYPE NAME="service.terms">
<EXPLAIN><TITLE>Service Terms</TITLE><EXPLAIN><TITLE>Service Terms</TITLE>
<SYNOPSIS>Describes the terms of a given agreement.</SYNOPSIS><SYNOPSIS>Describes the terms of a given agreement.</SYNOPSIS>
</EXPLAIN></EXPLAIN>
<MODEL><STRING DATATYPE=″string″></STRING></MODEL><MODEL><STRING DATATYPE=″string″></STRING></MODEL>
</ELEMENTTYPE></ELEMENTTYPE>
</DTD></DTD>
</SCHEMA></SCHEMA>
可以如下所示,用公用商业语言资源库中的服务型元素扩充服务DTD模式。The Service DTD schema can be extended with service-type elements from the Common Business Language Repository as shown below.
<!ELEMENT service.type EMPTY><! ELEMENT service.type EMPTY>
<!ATTLIST service.type<! ATTLIST service.type
service.type.name(service.type.name(
catalog.operatorcatalog.operator
| commercial.directory.operator| commercial.directory.operator
| eft.services.provider| eft.services.provider
| escrower| escrower
| fulfillment.service| fulfillment.service
| insurer| insurer
| manufacturer| manufacturer
| market.operator| market.operator
| order.originator| order. originator
| ordering.service| ordering.service
| personal.services.provider| personal.services.provider
| retailer| retailer
| retail.aggregator| retail. aggregator
| schema.resolution.service| schema.resolution.service
| service.provider| service.provider
| shipment.acceptor| shipment.acceptor
| shipper| shipper
| van| van
| wholesale.aggregator| wholesale.aggregator
) #REQUIRED) #REQUIRED
%common.attrib;%common.attrib;
>>
上述服务型元素说明了由商业接口定义携带的解释信息,在本例中,一种内容形式允许识别一有效服务清单中的任何一个。其它解释信息包括数据类型,例如元素<H3>Internet Address</H3>,它包括内容形式“url”并用数据类型“串”表示。还有其它解释信息包括代码至清单元素的映像,例如元素<H3>State</H3>,它包括对文件“COUNTRY.US.SUBENTITY”中状态进行映像的代码。The service-type element described above specifies the interpretation information carried by the business interface definition, in this case a content form allowing the identification of any one of a list of valid services. Other explanatory information includes data types, such as the element <H3>Internet Address</H3>, which includes the content form "url" and is represented by the data type "string". Still other interpretation information includes the mapping of codes to manifest elements, such as the element <H3>State</H3> which includes codes mapping the states in the file "COUNTRY.US.SUBENTITY".
由市场参与者DTD提到的服务描述定义了当完成服务时该服务接受并产生的文档。下面将基本服务描述指定为XML文档transact.dtd。The Service Description referred to by the Market Participant DTD defines the documents that the service accepts and produces when the service is completed. The basic service description is specified below as the XML document transact.dtd.
Transact.dtd模拟诸如发票等事务处理描述,或者对值交换的描述。这种文档类型支持许多种使用,因此事务描述元素具有允许用户区分发票、性能、表示出售和请求报价等属性。交换可以在两个以上的对象之间发生,但只取出两个对象,发价人和计算方,这两个对象都用指针表示,指针指向与上述市场参与者DTD相符的文档。计算方的指针是可选择的,以便适应出售意向。交换描述在以下所列的模块tranprim.mod中描述,并且包括定价和小计。在交换描述之后,可以提供作为整体应用于事务处理的费用,并且必须提供总的费用。因此,以下给出了本例的事务描述概要文档:Transact.dtd models transaction descriptions such as invoices, or descriptions of exchange of value. This document type supports many uses, so the transaction description element has attributes that allow the user to distinguish between invoices, performance, indication of sale, and request for quotation. The exchange can take place between more than two objects, but only two objects are taken out, the Offeror and the Calculator, both of which are represented by pointers to documents that conform to the Market Participant DTD above. The calculation side pointer is optional in order to accommodate the selling intent. Exchange descriptions are described in the module tranprim.mod listed below, and include pricing and subtotals. After the exchange description, the fee applied to the transaction as a whole can be provided and the total fee must be provided. Therefore, the transaction description profile document for this example is given as follows:
<!--transact.dtd Version: 1.0--><! --transact.dtd Version: 1.0-->
<!--Copyright 1998 Veo Systems,Inc.--><! --Copyright 1998 Veo Systems, Inc.-->
......
<!ELEMENT transaction.description(meta?,issuer.pointer,<! ELEMENT transaction.description(meta?, issuer.pointer,
counterparty.pointer?,exhange.descrpt ion+,general.charges?,Counterparty. pointer? , exhange.descrpt ion+, general.charges? ,
net.total?)>net. total? )>
<!ATTLIST transaction.description<! ATTLIST transaction.description
transaction.type(invoice | pro.forma | offer.to.sell | orderTransaction.type(invoice | pro.forma | offer.to.sell | order
| request.for.quote|request.for.bid| request.for.quote|request.for.bid
| request.for.proposal | response.to.request.for.quote| request.for.proposal | response.to.request.for.quote
| response.to.request.for.bid| response.to.request.for.bid
| response.to.request.for.proposal)″invoice″| response.to.request.for.proposal)"invoice"
%common.attrib;%common.attrib;
%altrep.attrib;% altrep.attrib;
%ttl.attrib;%ttl.attrib;
>>
以下是根据上述定义建立的代表性的市场参与者和服务DTD:市场参与者DTDThe following are representative Market Participant and Service DTDs built from the above definitions: Market Participant DTD
<!ELEMENT business(party.name+,address.set)><! ELEMENT business(party.name+, address.set)>
<!ATTLIST business business.number CDATA #REQUIRED<! ATTLIST business business.number CDATA #REQUIRED
>>
<!ELEMENT party.name(#PCDATA)><! ELEMENT party.name(#PCDATA)>
<!ELEMENT city(#PCDATA)><! ELEMENT city(#PCDATA)>
<!ELEMENT internet(#PCDATA)><! ELEMENT internet(#PCDATA)>
<!ELEMENT country(#PCDATA)><! ELEMENT country(#PCDATA)>
<!ELEMENT state(#PCDATA)><! ELEMENT state(#PCDATA)>
<!ELEMENT email(#PCDATA)><! ELEMENT email(#PCDATA)>
<!ELEMENT address.physical(street,city,state,postcode?,country)><! ELEMENT address. physical(street, city, state, postcode?, country)>
<!ELEMENT telephone(#PCDATA)><! ELEMENT telephone(#PCDATA)>
<!ELEMENT person(party.name+,address.set)><! ELEMENT person(party.name+, address.set)>
<!ATTLIST person SSN CDATA #IMPLIED<! ATTLIST person SSN CDATA #IMPLIED
>>
<!ELEMENT fax(#PCDATA)><! ELEMENT fax(#PCDATA)>
<!ELEMENT street(#PCDATA)><! ELEMENT street(#PCDATA)>
<!ELEMENT address.set(address.physical,telephone*,fax*,email*,internet*)><! ELEMENT address.set(address.physical, telephone*, fax*, email*, internet*)>
<!ELEMENT postcode(#PCDATA)><! ELEMENT postcode(#PCDATA)>
<!ELEMENT market.participant(business | person)><! ELEMENT market. participant(business | person)>
服务DTDService DTD
<!ELEMENT service.location(#PCDATA)><! ELEMENT service. location(#PCDATA)>
<!ELEMENT service.terms(#PCDATA)><! ELEMENT service.terms(#PCDATA)>
<!ELEMENT service.operation.name(#PCDATA)><! ELEMENT service.operation.name(#PCDATA)>
<!ELEMENT service.operation(service.operation.name,service.operation.location,<! ELEMENT service.operation(service.operation.name, service.operation.location,
service.operation.input,service.operation.output)>service.operation.input, service.operation.output)>
<!ELEMENT service(service.name,service.location,service.operation+,<! ELEMENT service(service.name, service.location, service.operation+,
service.terms)>service.terms)>
<!ELEMENT service.operation.input(#PCDATA)><! ELEMENT service.operation.input(#PCDATA)>
<!ELEMENT service.operation.location(#PCDATA)><! ELEMENT service.operation.location(#PCDATA)>
<!ELEMENT service.name(#PCDATA)><! ELEMENT service.name(#PCDATA)>
<!ELEMENT service.set(service+)><! ELEMENT service.set(service+)>
<!ELEMENT service.operation.output(#PCDATA)><! ELEMENT service.operation.output(#PCDATA)>
以下是根据transact.dtd产生的一例文档:The following is an example document generated according to transact.dtd:
<?xml version=″1.0″?><? xml version="1.0"? >
<!-- rorder. xml Version: 1.0 --><! -- rorder.xml Version: 1.0 -->
<!-- Copyright 1998 Veo Systems,Inc. --><! -- Copyright 1998 Veo Systems, Inc. -->
<!DOCTYPE transaction. description SYSTEM ″urn:x-<! DOCTYPE transaction. description SYSTEM ″urn:x-
veosystems:dtd:cbl:transact:1.0:>veosystems:dtd:cbl:transact:1.0:>
<transaction.description transaction.type=″order″><transaction.description transaction.type="order">
<meta><meta>
<urn?urn:x-veosystems:doc:00023<urn? urn:x-veosystems:doc:00023
</urn></urn>
<thread.id party.assigned.by=″reqorg″>FRT876<thread.id party.assigned.by="reqorg">FRT876
</thread.id></thread.id>
</meta></meta>
<issuer.pointer><issuer.pointer>
<xll.locator urllink=″reqorg. xml″>Customer<xll.locator urllink="reqorg.xml">Customer
PointerPointer
</xll.locator></xll.locator>
</issuer.pointer></issuer.pointer>
<counterparty.pointer><counterparty. pointer>
<xll.locator urllink=″compu.xml″>Catalog entry owner<xll.locator urllink="compu.xml">Catalog entry owner
pointerpointer
</xll.locator></xll.locator>
</counterparty.pointer></counterparty.pointer>
<exchange.description><exchange.description>
<line.item><line. item>
<product.instance><product.instance>
<product.description.pointer><product.description.pointer>
<xll.locator urllink=″cthink.xml″>Catalogue Entry Pointer<xll.locator urllink="cthink.xml">Catalogue Entry Pointer
</xll.locator></xll.locator>
</product.description.pointer></product.description.pointer>
<product.specifics><product.specifics>
<info.description.set><info.description.set>
<info.description><info.description>
<xml.descriptor><xml.descriptor>
<doctype><doctype>
<dtd system.id=″urn:x-veosystems:dtd:cbl:gprod:1.0″/><dtd system.id=″urn:x-veosystems:dtd:cbl:gprod:1.0″/>
</doctype></doctype>
<xml.descriptor.details><xml.descriptor.details>
<xll.xptr.frag>DESCENDANT(ALL,os)STRING(″Windows 95″)<xll.xptr.frag>DESCENDANT(ALL, os)STRING(″Windows 95″)
</xll.xptr.frag></xll.xptr.frag>
<xll.xptr.frag>DECENDANT(ALL,p.speed)STRING(″200″)<xll.xptr.frag>DECENDANT(ALL,p.speed)STRING(″200″)
</xll.xptr.frag></xll.xptr.frag>
<xll.xptr.frag>DESCENDANT(ALL,hard.disk.capacity)<xll.xptr.frag>DESCENDANT(ALL, hard.disk.capacity)
STRING (″4″)STRING (″4″)
</xll.xptr.frag></xll.xptr.frag>
<xll.xptr.frag>DESCENDANT(ALL,d.size)STRING(″14.1″)<xll.xptr.frag>DESCENDANT(ALL, d.size)STRING(″14.1″)
</xll.xptr.frag></xll.xptr.frag>
</xml.descriptor.details></xml.descriptor.details>
</xml.descriptor></xml.descriptor>
</info.description></info.description>
</info.description.set></info.description.set>
</product.specifics></product.specifics>
<quantity>1<quantity>1
</quantity></quantity>
</product.instance></product.instance>
<shipment.coordinates.set><shipment. coordinates. set>
<shipment.coordinates><shipment. coordinates>
<shipment.destination><shipment.destination>
<address.set><address.set>
<address.named>SW-1<address.named>SW-1
</address.named></address.named>
<address.physical><address.physical>
<building.sublocation>208C</building.sublocation><building.sublocation>208C</building.sublocation>
<location.in.street>123<location.in.street>123
</location.in.street></location.in.street>
<street>Frontage Rd.<street>Frontage Rd.
</street></street>
<city>Beltway<city>Beltway
</city></city>
<country.subentity.us<country.subentity.us
country.subentity.us.name=″MD″/>country.subentity.us.name="MD"/>
<postcode>20000<postcode>20000
</postcode></postcode>
</address.physical></address.physical>
<telephone><telephone>
<telephone.number>617-666-2000<telephone.number>617-666-2000
</telephone.number></telephone.number>
<telephone.extension>1201<telephone.extension>1201
</telephone.extension></telephone.extension>
</telephone></telephone>
</address.set></address.set>
</shipment.destination></shipment.destination>
<shipment.special>No deliveries after 4 PM</shipment.special><shipment.special>No deliveries after 4 PM</shipment.special>
</shipment.coordinates></shipment. coordinates>
</shipment.coordinates.set></shipment.coordinates.set>
<payment.set><payment.set>
<credit.card<credit.card
issuer.name=″VISA″Issuer.name="VISA"
instrument.number=″3787-812345-67893″Instrument.number="3787-812345-67893"
expiry.date=″12/97″expiry.date="12/97"
currency.code=″USD″/>Currency.code="USD"/>
<amount.group><amount.group>
<amount.monetary currency.code=″USD″>3975<amount.monetary currency.code=″USD″>3975
</amount.monetary></amount.monetary>
</amount.group></amount.group>
</payment.set></payment.set>
</line.item></line.item>
</exhange.description></exhange.description>
</transaction.description></transaction.description>
因此,本发明提供了一项技术,利用该技术,市场参与者可以识别其本身,并且识别输入文档的类型和输出文档的类型,利用这些识别结果市场参与者将进行商业活动。由交易其余方或本地方处理这些文档中所载内容的特定方式不包括在建立商业关系和进行事务处理的过程中。Thus, the present invention provides a technique by which a market participant can identify itself and recognize the type of input document and the type of output document with which the market participant will conduct business. The specific manner in which the content contained in these documents is handled by the remaining parties to the transaction or locally is not included in the establishment of commercial relationships and transactions.
图3提供了一简化图,示出了依照本发明的网络中的参与者网点。图3所示的网点包括一网络接口300,它在端口301上与通信网相连。网络接口与文档语法分析器301相连。语法分析器301将来自输入文档的逻辑结构提供给翻译器模块302,翻译器模块将输入文档翻译成主交易系统可以使用的形式,并且反过来将主过程的输出翻译成与商业接口定义中输出文档形式相匹配的文档格式,以便传送到目的地。语法分析器301和翻译器302对参与者模块303中存储的商业接口定义作出响应。Figure 3 provides a simplified diagram showing participant sites in a network according to the invention. The network point shown in FIG. 3 includes a
将来自翻译器302的输出数据结构和语法分析器301发出的信号事件一起提供给事务处理过程前端304。一个实施例中的前端304包括JAVA虚拟机或其它类似的适于在网络不同网点之间通信的接口。事务处理前端304对语法分析器301和翻译器302表示的事件作出响应,以便将输入数据传送给企业系统和网络中与参与者相连的适当功能。因此图3示例中的事务处理过程前端304与商务功能305、数据库功能306、诸如会计和记账等其它企业功能307,并且与特殊的事件收听器和处理器308相连,其中装置308被设计成响应语法分析器所表示的事件。The output data structures from the
语法分析器301获得类似上例中的定单,或者根据商业接口定义规定的其它文档,并且产生一组事件,所述事件用本地事务处理结构(诸如JAVA虚拟机的一组JAVA事件)来识出。The
本发明的语法分析器不与根据接收文档收听事件的程序相连。满足某些规范说明的接收文档或完整文档的各标记段起收听功能指令的作用,以便开始处理。因此,收听程序完成与文档信息相关的商业逻辑。例如,与地址元素相关的程序可以是通过检查数据库而使邮政编码生效的代码。这些收听器通过用文档路由选择器进行登记来订购事件,路由选择器将相关的事件发送给对它们感兴趣的所有用户。The parser of the present invention is not linked to a program that listens to events from received documents. Markup segments of a received document or complete document that meet certain specifications serve as listener function instructions to begin processing. Therefore, the listening program completes the business logic related to the document information. For example, a program associated with an address element could be a code that validates a postal code by checking a database. These listeners subscribe to events by registering with the document router, which sends the relevant events to all users interested in them.
例如,可以用收听语法分析器产生之事件的程序来监视上述规定的定单,该程序会将文档或其内容与定单输入程序相连。接收购货定单内的产品说明将调用一程序,以检查存货。然后,接收购货定单内的地址信息将调用一程序,以检查交货服务的可用性。文档中的买方信息字段可以调用一些过程,以检查信用度的购货定单历史,或者在已知消费者身份的基础上提供提升或类似的处理。For example, the order specified above could be monitored with a program that listens to events generated by the parser, which program would link the document or its contents to the order entry program. Receiving a product description in a purchase order invokes a program to check inventory. Receiving the address information in the purchase order would then invoke a program to check the availability of the delivery service. The buyer information field in the document may invoke procedures to check purchase order history for credit, or to provide promotions or similar processing based on a known customer identity.
复杂的收听器可以对原始收听器进行配置而构成。例如,定单收听器可以包含和调用前一段给出的清单收听器,或者可以对其自身调用清单成员。注意,收听器运行的应用程序不可能是本机XML过程或本机JAVA过程。在这些情况下,可以将对象转换成接收转换应用程序所要求的格式。当应用程序完成处理时,将其输出转换回XML格式,以便传输给网络中的其它网点。Complex listeners can be configured from primitive listeners. For example, an order listener could contain and call the list listener given in the previous paragraph, or it could call a list member on itself. Note that the application run by the listener cannot be a native XML process or a native Java process. In these cases, the object can be converted into the format required by the receiving conversion application. When the application finishes processing, it converts its output back to XML format for transmission to other nodes in the network.
可以看出,上述市场参与文档型描述和事务文档型描述包括一个示意性的用于文档中逻辑单元的映像,并且包括基于自然语言的标记语言。自然语言标记和XML的其它自然语言属性便于将XML型标记语言用于对商业接口定义的说明,服务描述以及对输入和输出文档的描述。It can be seen that the above-mentioned market participation document type description and transaction document type description include a schematic image for logical units in the document, and include a markup language based on natural language. Natural language markup and other natural language attributes of XML facilitate the use of XML-type markup languages for the specification of business interface definitions, service descriptions, and descriptions of input and output documents.
参与者模块303除了存储商业接口定义,还包括一编译程序,它用来编译事务处理过程前端304将要使用的对象或其它数据结构,其中事务处理过程前端304对应于输入文档中的逻辑结构,并且还对翻译器302进行编译。因此,由于当参与者涉及的事务改变时,参与者会修改或更新商业接口定义,所以翻译器302和语法分析器301将自动保持最新。In addition to storing business interface definitions,
在一较佳实施例中,用对应于grove型SGML的编译程序产生一组JAVA事件,主要为标准元件结构信息组增加每个元件的“性能组”。国际标准ISO/IEC10179:1996(E),信息技术--处理语言--文档型语义和说明语言(DSSSL)。将XML文档变成一组全球事件,以便对照正常的分析模型,在正常分析模型中,语法分析器的输出保持为内部的数据结构。通过将XML文档的元素翻译成JAVA事件或其它适于各网点事务处理前端使用的编程结构,可以在使用被交易文档的网点处获得丰富的功能。In a preferred embodiment, a compiler corresponding to grove-type SGML is used to generate a set of JAVA events, mainly to add the "capability set" of each element to the standard element structure information set. International Standard ISO/IEC10179:1996(E), Information Technology - Processing Languages - Document Semantics and Specification Language (DSSSL). Turns an XML document into a set of global events, in contrast to the normal parsing model where the output of the parser is kept as an internal data structure. By translating the elements of the XML document into JAVA events or other programming structures suitable for the transaction processing front end of each network point, rich functions can be obtained at the network point using the transaction document.
因此,事务处理过程前端304能够公开操作,并且预订能够增加收听器程序而不用知道或影响系统中其它收听程序的结构。图3中的每个收听器305、306、307和308保持一队列,前端304按该队列引导事件。这可以使多个收听器处理按其自身步调并行处理事件。Thus, the transaction process
另外,依照本发明,收听器运行的应用程序不需要本机XML功能,或者与输入文档格式相匹配的本机功能。如果事务处理过程前端304是JAVA接口,那么这些收听器可以是JAVA功能,或者是根据唯一事务处理结构运行的功能。在这些情况下,可以将对象转换成接收应用程序所要求的格式。当收听器的应用程序结束时,将其输出转换回如模块303中商业接口定义所规定的文档格式。因此,翻译器302与网络接口300相连,直接用于提供组织好的文档,作为输出。Additionally, in accordance with the present invention, the application run by the listener does not require native XML functionality, or native functionality to match the format of the input document. If the transaction process
与事务处理前端相连的收听器可以包括用于输入文档收听器、用于输入文档中具体元素的收听器,以及用于存储在输入文档特定元素中的属性的收听器。这可以对参与者网点处的事务处理过程进行不同的且灵活的实现,以便过滤和响应输入文档。The listeners associated with the transaction processing front end may include listeners for the input document, listeners for specific elements in the input document, and listeners for attributes stored in specific elements of the input document. This allows for different and flexible implementations of transaction processing at participant sites for filtering and responding to input documents.
图4示出了对于图3的系统接收和处理输入文档的过程。因此,过程开始是在网络接口接收一文档(步骤400)。语法分析器响应于商业接口定义识别文档类型(401)。利用该商业接口定义(它存储了XML格式文档的DTD),对文档进行语法分析(步骤402)。接下来,将文档的元素和属性翻译成主格式(步骤403)。在本例中,将XML逻辑结构翻译成JAVA对象,该对象载有XML元素的数据以及与诸如获取和设置功能等数据相关的方法。接下来,将主对象传递给主事务处理前端(步骤404)。响应于语法分析器和翻译器所表示的事件,将这些对象提供给某些过程。执行用于接收文档元素的过程,并且产生一输出(步骤405)。将输出翻译成如商业接口定义所定义的输出文档格式(步骤406)。在本例中,翻译从JAVA对象的形式进行到XML文档的形式。最后,通过网络接口将输出文档传送到目的地。FIG. 4 illustrates the process of receiving and processing an input document for the system of FIG. 3 . Thus, the process begins by receiving a document at the network interface (step 400). A parser identifies a document type in response to a business interface definition (401). Using the business interface definition (which stores the DTD of the document in XML format), the document is parsed (step 402). Next, the elements and attributes of the document are translated into the master format (step 403). In this example, the XML logical structure is translated into a JAVA object that carries the data of the XML elements and methods related to the data such as getting and setting functions. Next, the master object is passed to the master transaction processing front end (step 404). These objects are provided to certain procedures in response to events represented by the parser and translator. A process is performed for receiving document elements and producing an output (step 405). The output is translated into an output document format as defined by the business interface definition (step 406). In this example, translation is performed from the form of a JAVA object to the form of an XML document. Finally, the output document is delivered to the destination via the network interface.
图5更详细地描述了图3所示系统的事件生成器/事件收听器机构。一般来说,图5所示的方法是对JAVA JDK 1.1事件模型的精练。在该模型中,考虑三种对象。第一种对象是事件对象,它包含事件发生的信息。可以有许多种事件对象,它们对应于所有可能发生的不同事件。第二种对象是事件生成器,它监视活动,并且当发生某些事情时产生事件对象。第三种是事件收听器,它收听由事件生成器产生的事件对象。事件收听器一般收听特殊的事件生成器,诸如用鼠标器在特定的窗口上点击。事件收听器在事件生成器上调用“增加事件收听器”。该模型适用于图3的环境,在图3的环境中,响应分析和走过诸如XML文档所表示的对象曲线,来产生各对象。FIG. 5 describes the event generator/event listener mechanism of the system shown in FIG. 3 in more detail. In general, the method shown in Figure 5 is a refinement of the JAVA JDK 1.1 event model. In this model, three kinds of objects are considered. The first type of object is an event object, which contains information about the occurrence of an event. There can be many kinds of event objects, which correspond to all the different events that can occur. The second type of object is an event generator, which monitors activity and generates event objects when something happens. The third is the event listener, which listens to the event object generated by the event generator. Event listeners typically listen to specific event generators, such as mouse clicks on specific windows. The event listener calls "increase event listener" on the event generator. The model applies to the environment of Figure 3, where objects are generated in response to analysis and walking of object curves such as represented by XML documents.
图5所示的系统包括一个普通XML语法分析器500。这种语法分析器可以用标准的回调模型来实现。当发生分析事件时,语法分析器调用应用对象中的特定方法,传送参数中的合适信息。因此,单个应用程序501与语法分析器在一起。如方框502所表示的,应用程序对XML事件对象中语法分析器所提供的信息进行封装,并且将其发送给许多已识别其本身的事件收听器。事件组502对语法分析器是完全独立的。可以将事件502提供给任何数目机器上的任何多收听器和任何多线程(thread)。在另一种情况下,事件基于元素结构信息组ESIS。因此,它们包括由文档结构的重要方面构成的清单,诸如元素的开始和结束,或者对属性的辨认。XML(和SGML)语法分析器一般将ESIS结构用作一组缺省信息,供语法分析器返回其应用程序。The system shown in FIG. 5 includes a
将专用ESIS收听器503与一组事件502相连。该收听器503实现ESIS收听器API,并且收听来自一个或多个生成器的所有XML事件。元素事件生成器504是一种专用ESIS收听器,它也是一个XML事件生成器。它的收听器是只对特殊类型元素的事件感兴趣的对象。例如在HTML环境中,收听器只对定单感兴趣,这只是<OL>和</OL>标签之间的文档部分。在另一例子中,收听器根据公用商业语言,从以上例举的文档中收听“party.name”元素,或者“service.name”元素;处理事件,以保证元素携带与元素的示意性映像相匹配的数据;并且根据接收网点所需的过程起作用。A
这允许系统具有较小的对象,它们收听文档的特定部分,诸如只相加价格部分。由于收听器可以从生成器中增加和删除其本身,所以可以有一个收听器只收听使用HTML文档<首标>部分。由于这一原因以及XML文档的高度递归特性,所以可以写出高度目标化的代码,并且写出进发的收听器。例如,<OL>收听器可以建立<LI>收听器,其方式完全独立于<UL>(未定购的清单)收听器建立其<LI>收听器的方式。另一种方法是,建立一个产生图形用户接口的收听器,建立另一个用同一输入搜索数字库的收听器。因此,将文档视作由收听器执行的程序,与应用程序每次检查一段的精练的数据结构相反。如果用这种方法写应用程序,那么不必将整个文档放入内存中,以执行应用程序。This allows the system to have smaller objects that listen to specific parts of the document, such as adding only the price part. Since listeners can add and remove themselves from generators, it is possible to have a listener that only listens to <header> sections of HTML documents. Because of this, and the highly recursive nature of XML documents, it is possible to write highly targeted code and write out-of-the-box listeners. For example, an <OL> listener may establish a <LI> listener in a manner completely independent of how a <UL> (Unordered List) listener establishes its <LI> listener. Another approach is to create a listener that produces a GUI, and another listener that uses the same input to search a library of numbers. Thus, treat the document as a program executed by the listener, as opposed to the compact data structure that the application examines one section at a time. If an application is written this way, the entire document does not have to be brought into memory in order to execute the application.
与事件组502相连的下一个收听器是属性过滤器505。属性过滤器505象元素过滤器504一样是根据ESIS收听器模型的属性事件生成器。用于属性过滤器的收听器规定了它感兴趣的属性,并且接收具有该规定属性的任何元素的事件。因此例如,字体管理器只接收具有字体属性的元素事件,诸如<P FONT=“Times Roman”/p>。The next listener connected to
元素事件生成器504提供这类元素对象,以便使元素收听器504A专门化。
属性事件生成器505将属性事件对象提供给属性收听器505A。同样,在用属性从一种文档类型转换成另一种的SGML/XML变换的意义上,将属性对象提供给一种“结构”。因此,505B的结构允许一特定的属性具有一个可区分的特定名称。只有具有该规定属性的元素才会变成输出文档的一部分,并且输出文档中的元素名称是输入文档中的属性值。例如,如果结构505B是HTML,那么串:
<PURCHASES HTML=″OL″><ITEM HTML=″LI″><NAME<PURCHASES HTML="OL"><ITEM HTML="LI"><NAME
HTML=″B″>STUFF</NAME><PRICEHTML="B">STUFF</NAME><PRICE
HTML=″B″>123</PRICE></ITEM></PURCHASES>HTML="B">123</PRICE></ITEM></PURCHASES>
翻译成:translate to:
<OL><LI><B>STUFF</B><B>123</B></LI></OL><OL><LI><B>STUFF</B><B>123</B></LI></OL>
这是正确的HTML。This is correct HTML.
与事件组502相连的下一个模块是树构成器。树构成器取一个XML事件流,并且产生代表基础文档的树。树构成器506的一种较佳版本根据W3C的规范说明(参见,http://www.w3.org/TR/1998/WD-DOM-19980720),产生文档对象模型DOM对象507。但是,可以用事件流中的收听器处理大多数要求,树的版本适用于支持围绕文档的问询、网点的重排序、创建新的文档,并且支持可用来多次产生同一事件流的内存中的数据结构结构,例如象多次分析文档。可以将专用构成器508与树构成器506相连,以便为文档的各个部分构成特殊的子树,适应一特定的实施情况。The next module connected to
除了响应输入文档之外,还可以提供XML事件的其它源。因此,通过走过DOM对象树并且再生对文档分析时所建立的原始事件流,来产生事件流510。这允许系统表现出文档被分析了若干次。In addition to responding to input documents, other sources of XML events may be provided. Thus, the
使对象走过树并产生事件流的想法可以推广到DOM对象树以外,推广到可以质询的任何对象树。因此,JAVA行走器512可以是走过JAVA豆构件树513的应用程序。行走器走过所有可公开访问的字段和方法。行走器跟踪它已经访问过的对象,保证不进入死循环。JAVA事件514是JAVA行走器512产生的事件类型。这通常包括可以从对象中导出的大多数类型的信息。这是ESIS的JAVA等效体,并且允许将相同的编程方法应用于一般将用于JAVA对象的XML,尽管特别对于JAVA豆。The idea of having objects walk a tree and produce a stream of events can be generalized beyond a tree of DOM objects, to any tree of objects that can be interrogated. Thus,
JAVA至XML事件生成器515构造了JAVA收听器和JAVA事件生成器。它接收来自JAVA行走器512的事件流514,并且翻译所选中的,以便将JAVA对象表示成XML文档。在一较佳实施例中,事件生成器515开发JAVA豆API。每个被观察的对象变成一个元素,元素名称与类别名称相同。在元素内,每个嵌入方法也变成这样一个元素,其内容是通过调用方法而返回的值。如果它是一个对象或者一个对象阵列,那么对它们轮流行走。The JAVA to
图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文档。在本例中,对于所有收听体系结构的元素生成器来说,文档书写器对象是一个收听器。Figure 6 depicts a specific application built on the Figure 5 framework. The application takes an
图5和图6所示处理模块的构造方式代表了图3系统中语法分析器和事务处理过程前端的一个实施例。由图可见,提供了一种非常灵活的接口,通过这一接口,响应于输入XML文档或其它构造的文档格式,执行各种事务处理过程。The construction of the processing modules shown in FIGS. 5 and 6 represents an embodiment of the syntax analyzer and transaction processing front end of the system in FIG. 3 . As can be seen from the figure, a very flexible interface is provided through which various transaction processing processes are performed in response to input XML documents or other structured document formats.
图7示出了与图3类似的网点,不同之处在于它包括商业接口定义构成器模块700。因此,图7的系统包括网络接口701、文档语法分析器702和文档翻译器703。翻译器703将其它输出提供给事务处理前端704,而事务处理前端704与诸如商务功能705、数据库706、企业功能707和其它普通收听器和处理器708等收听功能相连。如图7所示,商业接口定义构成器700包括用户接口、公用商业库CBL资源库、用于阅读补充商业接口定义的过程,以及编译程序。用户接口用来帮助企业依赖公用商业库资源库建立商业接口定义,并且阅读补充商业接口定义的能力。因此,可以将补充商业接口定义的输入文档指定为特定事务的输出文档,并且可以将补充商业接口定义的输出文档指定为这一事务处理过程的输入。用类似的方法,可以用从CBL资源库选出的构件组成事务商业接口定义。使用CBL资源库鼓励使用标准化的文档格式,诸如上述例举的模式(bidl)文档、在构成商业接口定义时的逻辑结构和解释信息,其中商业接口定义很容易被网络中的其它人采用。FIG. 7 shows a network point similar to FIG. 3 except that it includes a business interface
商业接口定义构成器模块700还包括一编译程序,它用来生成翻译器703,翻译器根据主事务处理体系结构所产生的对象,并且管理分析功能702。The business interface
图8是一启发式的图,示出了存储在商业接口定义构成器700的资源库中的逻辑结构。因此,资源库存储代表当事方商业接口定义800,包括例如消费者BID 801、目录库BID 802、仓库BID 803和拍卖库BID 804。因此,联机市场上的新的参与者可以将一种最符合其商业活动的标准化BID选作基本接口描述。另外,资源库将存储一组服务商业接口定义805。例如,可以存储购货定单进入BID 806、购货定单跟踪BID 807、购货定单履行BID 808和目录服务BID 809。当市场中的新的参与者构成一个商业接口定义时,它可以选择存储在资源库中的标准化服务的商业接口定义。FIG. 8 is a heuristic diagram showing the logical structure stored in the repository of the business
除了当事方和服务BID之外,如字段810所示将输入和输出文档BID存储在资源库中。因此,可以将购货定单BID 811、发票BID 812、请求报价BID813、产品可用量报告BID 814,以及购货定单状态BID 815存储在资源库中。In addition to the party and service BIDs, the input and output document BIDs are stored in the repository as indicated by
除了在较佳实施例中根据XML指定为文档类型定义的商业接口定义之外,如字段816所示,资源库存储语义映像形式的解释信息。因此,可以将本例中用于规定重量817、货币818、尺寸819、产品标识符820和产品特性821的语义映像存储在资源库中。另外,解释信息为文档逻辑结构内的数据结构提供类型。In addition to business interface definitions specified as document type definitions in accordance with XML in the preferred embodiment, as indicated by
另外,如方框822所示,可以将组成商业接口定义时使用的逻辑结构存储在资源库中。因此,方框825可以提供用于提供地址信号的形式823,提供报价信号824的形式以及提供契约关系各项形式。当网络扩大时,CBL资源库也将扩大和标准化,以便新参与者的增加以及对商业接口定义的修改更方便。Additionally, as indicated at
图9示出了用图7系统构成商业接口定义的过程。过程开始于向用户显示BID构成器图形接口(步骤900)。系统接受用户输入,识别由图形接口产生的参与者、服务和文档信息(步骤901)。FIG. 9 shows the process of forming a business interface definition using the system of FIG. 7 . The process begins by displaying the BID Builder graphical interface to the user (step 900). The system accepts user input identifying participant, service and document information generated by the graphical interface (step 901).
接下来,响应通过图形用户接口的用户输入,从资源库中检索任何被引用的逻辑结构、解释信息和文档定义和/或服务定义(步骤902)。在下一步骤中,由网络中通过用户输入选中的其它参与者,通过定制的搜索引擎、web浏览器或类似手段,访问任何补充的商业接口定义或商业接口定义的构件(步骤903)。用收集到的信息建立参与者的文档定义(步骤904)。用编译程序建立文档至宿主和宿主至文档的翻译器(步骤905)。用编译程序建立与定义对应的主体系结构数据结构(步骤906),并且在网络上邮寄已建立的商业接口定义,诸如张贴在环球网站点或其它地方,使其对于网络中的其它网点可访问(步骤907)。Next, any referenced logical structures, interpretation information, and document definitions and/or service definitions are retrieved from the repository in response to user input through the graphical user interface (step 902). In the next step, any supplementary business interface definitions or components of the business interface definitions are accessed by other participants in the network selected by user input through custom search engines, web browsers or similar means (step 903). A participant's profile definition is built using the collected information (step 904). The compiler is used to build document-to-host and host-to-document translators (step 905). Create the master architecture data structure corresponding to the definition with a compiler (step 906), and post the established business interface definition on the network, such as posting it on a World Wide Web site or elsewhere, to make it accessible to other sites in the network (step 907).
商业接口定义告诉潜在的贸易伙伴公司所提供的联机服务,以及用哪些文档来调用这些服务。因此,用它们接受和产生的文档将服务定义在商业接口定义中。在以下XML服务定义的片段中说明这一点。The business interface definition tells potential trading partners which online services the company provides and which documents to use to invoke those services. Therefore, services are defined in business interface definitions with the documents they accept and generate. This is illustrated in the following fragment of the XML service definition.
<service><service>
<service.name>Order Service</service.name><service.name>Order Service</service.name>
<service.location>www.veosystems.com/order</service.location><service.location>www.veosystems.com/order</service.location>
<service.op><service.op>
<service.op.name>Submit Order</service.op.name><service.op.name>Submit Order</service.op.name>
<service.op.inputdoc>www.commerce.net/po.dtd</service.op.inputdoc><service.op.inputdoc>www.commerce.net/po.dtd</service.op.inputdoc>
<service.op.outputdoc><service.op.outputdoc>
www.veosystems.com/invoice.dtd</service.op.outputdoc>www.veosystems.com/invoice.dtd</service.op.outputdoc>
</service.op></service.op>
<service.op><service.op>
<service.op.name>Track Order</service.op.name><service.op.name>Track Order</service.op.name>
<service.op.inputdoc>www.commerce.net<service.op.inputdoc>www.commerce.net
/request.track.dtd<service.op.inputdoc>/request.track.dtd<service.op.inputdoc>
<service.op.outputdoc><service.op.outputdoc>
www.veosystems.com/response.track.dtd<service.op.outputdoc>www.veosystems.com/response.track.dtd<service.op.outputdoc>
</service.op></service.op>
</service></service>
该XML片段定义了由两件事务组成的服务,一种事务是取得购货定单,另一种事务用于跟踪它们。如果将有效请求发送给规定的Weg地址,那么每个定义表示一种履行服务的联系或承诺。这里购货定单服务需要一种输入文档,该文档符合资源库中标准“po.dtd”文档类型定义,它可以是本地的,或者存储在网络上的行业范围登记中。如果一个网点可以履行该购货定单,那么它将返回一个符合定制“invoice.dtd”的文档,其定义是本地的。事实上,公司在承诺与发出购货定单的任何人做生意,其中购货定单符合它要求的XML规范说明。不需要任何在先的安排。This XML fragment defines a service consisting of two transactions, one for getting purchase orders and one for tracking them. Each definition represents a connection or promise to perform a service if a valid request is sent to the specified Weg address. Here the purchase order service requires an input document that conforms to the standard "po.dtd" document type definition in the repository, either locally or stored in an industry-wide registry on the network. If an outlet can fulfill the purchase order, it will return a document conforming to the custom "invoice.dtd", whose definition is local. In effect, the company is promising to do business with anyone who places a purchase order that conforms to its required XML specification. No prior arrangements are required.
DTD是具有给定类型的文档的形式规范说明或语法;它描述了元素、其属性和它们必须出现的次序。例如,购货定单一般包括买方和卖方的名称和地址、一组产品描述,以及诸如价格和发货日期等术语和条件。例如在电子数据交换EDI中,X12 850是一种常用的购货定单模型。A DTD is a formal specification or syntax for a document of a given type; it describes elements, their attributes, and the order in which they must appear. For example, a purchase order typically includes the names and addresses of the buyer and seller, a set of product descriptions, and terms and conditions such as price and ship date. For example, in electronic data interchange EDI, X12 850 is a commonly used purchase order model.
资源库鼓励用对于许多商业领域公用的可重新使用的语义构件来开发XML文档模型。这类文档可以从它们的公用消息元素来理解,即使它们可以表现得非常难。这是公用商业库资源库的作用。The repository encourages the development of XML document models with reusable semantic components common to many business domains. Such documents can be understood from their common message elements, even though they can appear very difficult. This is the role of the common business library repository.
公用商业库资源由一般商业概念的信息模型组成,所述概念包括:Common business library resources consist of information models of general business concepts, including:
●诸如公司、服务和产品等商业描述原语;● business description primitives such as companies, services and products;
●诸如目录、购货定单和发票等商业形式;●Commercial forms such as catalogs, purchase orders and invoices;
●标准度量、日期和时间、位置、分类码。● Standard measure, date and time, location, classification code.
将此信息表示成一组可扩充的、公开的XML构成块,公司可以定制和组装这些构成块,快速开发XML应用程序。原子CBL元素实现了行业的消息发送标准和公约,诸如用于国家、货币、地址和时间的标准ISO代码。低级的CBL语义也来自对互联网资源之推荐的元数据框架(诸如,Dublin核)的分析。Represent this information as a set of extensible, open XML building blocks that companies can customize and assemble to rapidly develop XML applications. Atomic CBL elements implement industry messaging standards and conventions, such as standard ISO codes for countries, currencies, addresses, and times. Low-level CBL semantics also come from the analysis of recommended metadata frameworks (such as Dublin cores) for Internet resources.
下一等级的元素用这些构成块实现基本的商业形式,诸如那些在X12 EDI事务处理中使用的形式以及那些在形成互联网标准(诸如公开交易协议OTP和在互联网上公开购买OBI)时使用的形式。The next level of elements use these building blocks to implement basic business forms such as those used in X12 EDI transaction processing and those used in the formation of Internet standards such as the Open Transaction Protocol OTP and the Open Purchase OBI on the Internet .
CBL的重点是对于所有商业领域公用的功能和信息(诸如公司、服务和产品等商业描述原语;诸如目录、购货定单和发票等商业形式;标准度量、时期和时间、位置、分类码)。CBL在可能的语义标准或行业公约上构成(例如,在分立的CBL模型中对下述规则编码,即规定欧洲的“日期/月份/年份”对美国的“月份/日期/年份”)。The focus of CBL is on functions and information common to all business domains (business description primitives such as companies, services and products; business forms such as catalogs, purchase orders and invoices; standard measures, periods and times, locations, category codes) . CBLs are structured on possible semantic standards or industry conventions (eg, encoding rules in a separate CBL model specifying European "date/month/year" versus US "month/day/year").
CBL是一种用于设计应用程序的语言。它被设计成连接XML“文档世界”和JAVA“编程世界”或其它事务处理体系结构之间的差距。模式体现了一种“用文档编程”的哲学思想,在该方法中,文档类型的详细形式规范说明是主源,由该主源可以生成各种相关的表格。这些表格包括用于CBL的XML DTD、JAVA对象、用于将XML的实例和对应的JAVA对象相互转换并支持文档的程序。CBL is a language for designing applications. It was designed to bridge the gap between the XML "document world" and the JAVA "programming world" or other transaction processing architectures. Schemas embody a "programming with documents" philosophy, where the detailed formal specification of a document type is the primary source from which various related tables can be generated. These tables include XML DTD for CBL, JAVA objects, programs for converting XML instances and corresponding JAVA objects to each other and supporting documents.
CBL建立单个源,编译程序通过该源可以自动生成系统的几乎所有片段。CBL通过扩充SGML/XML来工作,而SGML/XML通常用来正式定义特定文档类型的结构,以便包括与每个信息元素和属性相关的语义的规范说明。可以扩充由SGML/XML大部分字符类型组成的有限组,以定义任何种数据类型。CBL establishes a single source from which a compiler can automatically generate almost all pieces of the system. CBL works by extending SGML/XML, which is commonly used to formally define the structure of a particular document type, to include a specification of the semantics associated with each information element and attribute. The limited set of most character types in SGML/XML can be extended to define any kind of data type.
这里是来自CBL定义的关于“日期时间”模块的一个片段:Here is a snippet from the CBL definition for the "datetime" module:
<!--datetime.mod Version: 1.0--><! --datetime.mod Version: 1.0-->
<!--Copyright 1998 Veo Systems,Inc.--><! --Copyright 1998 Veo Systems, Inc.-->
......
<!ELEMENT year(#PCDATA)><! ELEMENT year(#PCDATA)>
<!ATTLIST year<! ATTLIST year
schema CDATA#FIXED″urn:x-veosystems:stds:iso:8601:3.8″schema CDATA#FIXED″urn:x-veosystems:stds:iso:8601:3.8″
>>
<!ELEMENT month(#PCDATA)><! ELEMENT month(#PCDATA)>
<! ATTLIST month<! ATTLIST month
schema CDATA #FIXED″urn:x-veosystems:stds:iso:8601:3.12″schema CDATA #FIXED″urn:x-veosystems:stds:iso:8601:3.12″
>>
......
在该片段中,将元素“年”定义为字符数据,并且相关的“模式”属性也定义为字符数据,它将“年”的模式定义为ISO 8601标准的3.8节。In this fragment, the element "year" is defined as character data, and the associated "mode" attribute is also defined as character data, which defines the mode of "year" as section 3.8 of the ISO 8601 standard.
此“日期时间”CBL模块事实上被定义为模式DTD的实例。首先,定义模块名称。然后,将“日期时间”元素“年”限制到ISO 8601的语义。This "datetime" CBL module is in fact defined as an instance of the schema DTD. First, define the module name. Then, constrain the "datetime" element "year" to the semantics of ISO 8601.
<!DOCTYPE SCHEMA SYSTEM″schema.dtd″><! DOCTYPE SCHEMA SYSTEM″schema.dtd″>
<SCHEMA><H1>Date and Time Module</H1><SCHEMA><H1>Date and Time Module</H1>
......
<ELEMNTTYPE NAME=″year″DATATYPE=″YEAR″><MODEL><ELEMNTTYPE NAME="year" DATATYPE="YEAR"><MODEL>
<STRING<STRING
DATATYPE=″YEAR″></STRING></MODEL>DATATYPE="YEAR"></STRING></MODEL>
<ATTDEF NAME=:schema:iso8601″DATATYPE=″CDATA″><ATTDEF NAME=:schema:iso8601″DATATYPE=″CDATA″>
<FIXED>3.8<FIXED>3.8
Gregorian calendar</FIXED></ATTDEF></ELEMENTTYPE>Gregorian calendar</FIXED></ATTDEF></ELEMENTTYPE>
......
上述例举的市场参与者和服务模块也存储在CBL资源库中。The market participants and service modules listed above are also stored in the CBL resource library.
在图10中,通过定制普通的购货定单DTD 1001,增加更具体的关于运送重量的信息1002,来定义航空帐单1000。普通购货定单1001最初全部用有关地址、日期和时间、货币,以及卖主和产品描述的CBL模块来组装。因此,使用CBL明显加速了XML商务应用程序的开发和实施。更重要的是,CBL使商务应用程序更容易互连。In FIG. 10, an airline bill 1000 is defined by customizing the general
在CBL中,用一种模式扩充XML。扩充为XML元素增加了强类型,致使很容易使内容有效。例如,可以将元素<CPU_clock_speed>定义为一个具有一组有效值为{100,133,166,200,233,266 Mhz}的整数。模式还增加了类-子类的层次,致使很容易由类定义例示信息。例如,可以将膝上型计算机描述成具有有关显示类型和电池寿命等特征附加标签的一个计算机。这些和其它扩充方便了数据的输入,以及在XML与传统的面向对象的和关系数据模型间的自动翻译。In CBL, XML is augmented with a schema. The extension adds strong typing to XML elements, making it easy to validate content. For example, the element <CPU_clock_speed> could be defined as an integer with a set of valid values {100, 133, 166, 200, 233, 266 Mhz}. Patterns also increase the class-subclass hierarchy, making it easy to instantiate information by class definitions. For example, a laptop computer may be described as a computer with additional labels regarding such characteristics as display type and battery life. These and other extensions facilitate data entry and automatic translation between XML and traditional object-oriented and relational data models.
因此,通过编译程序、JAVA豆和转换代码运行完整的BID,编译程序如上所述为参与者和服务的实际实例产生DTD,JAVA豆对应于DTD实例中的逻辑结构,而转换代码用于从XML至JAVA以及从JAVA至XML的转换。在另一些系统中,还生成文档,显示在用户接口上,或者由用户打印出来,以便于对象的使用。Thus, a full BID is run through the compiler, the JAVA beans that correspond to the logical structures in the DTD instance, and the transformation code used to extract the DTD from the XML Conversion to JAVA and from JAVA to XML. In other systems, documentation is also generated, displayed on the user interface, or printed by the user to facilitate the use of the object.
对于上述例举的市场参与者和服务DTD,由编译程序生成的JAVA豆叙述如下(为简明起见,使用一些新版本):For the market participant and service DTDs exemplified above, the JAVA beans generated by the compiler are described as follows (for brevity, some newer versions are used):
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class AddressPhysical extends Document {public class AddressPhysical extends Document {
public static final String DOC_TYPE = ″address. physical″;public static final String DOC_TYPE = "address.physical";
String mStreet;String mStreet;
String mCity;String mCity;
public final static int AK=0;public final static int AK=0;
public final static int AL=1;public final static int AL=1;
public final static int AR=2;public final static int AR=2;
public final static int AZ=3;public final static int AZ=3;
public final static int CA= 4;public final static int CA=4;
......
public final static int WI=48;public final static int WI=48;
public final static int WV=49;public final static int WV=49;
public final static int WY=50;public final static int WY=50;
int mState;int mState;
String mPostcode;String mPostcode;
public final static int AD=51;public final static int AD=51;
public final static int AE=52;public final static int AE=52;
public final static int AF=53;public final static int AF=53;
public final static int AG=54;public final static int AG=54;
public final static int AI=55;public final static int AI=55;
public final static int AM=56;public final static int AM=56;
......
int mCountry;int mCountry;
public AddressPhysical(){public AddressPhysical(){
super(DOC_TYPE); super(DOC_TYPE);
mStreet=new String();mStreet = new String();
mCity=new String();mCity = new String();
this.mState=-1;` this.mState=-1;
mPostcode=null;mPostcode=null;
this.mCountry=-1: this.mCountry=-1:
}}
public AddressPhysical(String doc_type){public AddressPhysical(String doc_type){
super(doc_type);super(doc_type);
mStreet=new String();mStreet = new String();
mCity=new String();mCity = new String();
this.mState=-1;`` this.mState=-1;
mPostcode=null;mPostcode=null;
this.mCountry=-1;`` this.mCountry=-1;
}}
static public AddressPhysical initAddressPhysical(String iStreet,String iCity,intstatic public AddressPhysical initAddressPhysical(String iStreet, String iCity, int
iState,String iPostcode,int iCountry){iState, String iPostcode, int iCountry){
AddressPhysical obj=new AddressPhysical();AddressPhysical obj = new AddressPhysical();
obj.initializeAll(iStreet,iCity,iState,iPostcode,iCountry); obj.initializeAll(iStreet, iCity, iState, iPostcode, iCountry);
return obj;return obj;
}}
public void initializeAll(String iStreet,String iCity,int iState,String iPostcode, public void initializeAll(String iStreet, String iCity, int iState, String iPostcode,
int iCountry){int iCountry){
mStreet=iStreet;mStreet=iStreet;
mCity=iCity;mCity=iCity;
mState=iState;mState=iState;
mPostcode=iPostcode;mPostcode=iPostcode;
mCountry=iCountry;mCountry=iCountry;
}}
public String getStreet(){ public String getStreet(){
return mStreet;return mStreet;
}}
public String getStreetToXML() {public String getStreetToXML() {
if(getStreet()==null) return null;If(getStreet()==null) return null;
char[]c=getStreet().toCharArray(); char[]c=getStreet().toCharArray();
StringBuffer sb=new StringBuffer(); StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]) { switch(c[x]) {
case’>’:case'>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″):sb.append(″<″):
break;break;
case ’&’:case '&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setStreet(String inp){public void setStreet(String inp){
this.mStreet=inp;` this.mStreet=inp;
}}
public void streetFromXML(String n){public void streetFromXML(String n){
setStreet(n);setStreet(n);
}}
public String getCity(){public String getCity(){
return mCity;return mCity;
}}
public String getCityToXML(){public String getCityToXML(){
if(getCity()==null)return null;If(getCity()==null) return null;
char[]c=getCity().toCharArray();char[]c=getCity().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\” :case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setCity(String inp){public void setCity(String inp){
this.mCity=inp;` this.mCity=inp;
}}
public void cityFromXML(String n){public void cityFromXML(String n){
setCity (n);setCity(n);
}}
public int getState(){public int getState(){
return mState;return mState;
}}
public String getStateToXML(){public String getStateToXML(){
switch(mState){ switch(mState){
case AK:return″AK″;case AK:return "AK";
case AL:return″AL″;case AL: return "AL";
case AR:return″AR″;case AR:return "AR";
case AZ:return″AZ″;case AZ:return "AZ";
......
}}
return null;return null;
}}
public void setState(int inp){public void setState(int inp){
this. mState=inp;` this.mState=inp;
}}
public void stateFromXML(String s){public void stateFromXML(String s){
if(s.equals(″AK″))mState=AK;If(s.equals("AK"))mState=AK;
else if(s.equals(″AL″))mState=AL; else if(s.equals("AL"))mState=AL;
else if(s.equals(″AR″))mState=AR;else if(s.equals("AR"))mState=AR;
else if(s.equals(″AZ″))mState=AZ; else if(s.equals("AZ"))mState=AZ;
......
}}
public String getPostcode(){public String getPostcode(){
return mPostcode;return mPostcode;
}}
public String getPostcodeToXML(){public String getPostcodeToXML(){
if(getPostcode()==null)return null;If(getPostcode()==null) return null;
char[]c=getPostcode().toCharArray();char[]c=getPostcode().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″" ;″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setPostcode(String inp){public void setPostcode(String inp){
this.mPostcode=inp;` this.mPostcode=inp;
}}
public void postcodeFromXML(String n){public void postcodeFromXML(String n){
setPostcode(n);setPostcode(n);
}}
public int getCountry(){public int getCountry(){
return mCountry;return mCountry;
}}
public String getCountryToXML(){public String getCountryToXML(){
switch(mCountry){ switch(mCountry){
case AD:return″AD″;case AD: return "AD";
case AE:return″AE″;case AE:return "AE";
case AF:return″AF″;case AF:return "AF";
......
}}
return null;return null;
}}
public void setCountry(int inp){public void setCountry(int inp){
this.mCountry=inp;` this.mCountry=inp;
}}
public void countryFromXML(String s){public void countryFromXML(String s){
if(s.equals(″AD″))mCountry=AD;If(s.equals("AD"))mCountry=AD;
else if(s.equals(″AE″))mCountry=AE; else if(s.equals("AE"))mCountry=AE;
else if(s.equals(″AF″))mCountry=AF;`` else if(s.equals("AF"))mCountry=AF;
else if(s.equals(″AG″))mCountry=AG; else if(s.equals("AG"))mCountry=AG;
else if (s.equals(″AI″))mCountry=AI;`` else if (s.equals("AI"))mCountry=AI;
....
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class AddressSet extends Document {public class AddressSet extends Document {
public static final String DOC_TYPE=″address.set″;public static final String DOC_TYPE="address.set";
AddressPhysical mAddressPhysical;AddressPhysical mAddressPhysical;
String[]mTelephone;String[]mTelephone;
String[]mFax;String[]mFax;
String[]mEmail;String[]mEmail;
String[]mInternet;String[]mInternet;
public AddressSet(){public AddressSet(){
super(DOC_TYPE); super(DOC_TYPE);
this.mAddressPhysical=new AddressPhysical(); this.mAddressPhysical = new AddressPhysical();
mTelephone=null;mTelephone=null;
mFax=null;mFax=null;
mEmail=null;mEmail=null;
mInternet=null;mInternet=null;
}}
public AddressSet(String doc_type){public AddressSet(String doc_type){
super(doc_type);super(doc_type);
this.mAddressPhysical=new AddressPhysical(); this.mAddressPhysical = new AddressPhysical();
mTelephone=null;mTelephone=null;
mFax=null;mFax=null;
mEmail=null;mEmail=null;
mInternet=null;mInternet=null;
}}
static public AddressSet initAddressSet(AddressPhysical iAddressPhysical,String[]static public AddressSet initAddressSet(AddressPhysical iAddressPhysical, String[]
iTelephone,String[]iFax,String[]iEmail,String[]iInternet){iTelephone, String[]iFax, String[]iEmail, String[]iInternet){
AddressSet obj=new AddressSet(); AddressSet obj = new AddressSet();
obj.initializeAll(iAddressPhysical,iTelephone,iFax,iEmail,iInternet); obj.initializeAll(iAddressPhysical, iTelephone, iFax, iEmail, iInternet);
return obj;return obj;
}}
public void initializeAll(AddressPhysical iAddressPhysical,String[] public void initializeAll(AddressPhysical iAddressPhysical, String[]
iTelephone,String[]iFax,String[]iEmail,String[]iInternet){iTelephone, String[]iFax, String[]iEmail, String[]iInternet){
mAddressPhysical=iAddressPhysical;mAddressPhysical=iAddressPhysical;
mTelephone=iTelephone;mTelephone=iTelephone;
mFax=iFax;mFax=iFax;
mEmail=iEmail;mEmail=iEmail;
mInternet=iInternet;mInternet=iInternet;
}}
public AddressPhysical getAddressPhysical(){ public AddressPhysical getAddressPhysical(){
return mAddressPhysical;return mAddressPhysical;
}}
public void setAddressPhysical(AddressPhysical inp){ public void setAddressPhysical(AddressPhysical inp){
this.mAddressPhysical=inp;`` this.mAddressPhysical=inp;
}}
public String[]getTelephone(){ public String[]getTelephone(){
return mTelephone;return mTelephone;
}}
public String getTelephone(int index){ public String getTelephone(int index){
if(this.mTelephone==null)If(this.mTelephone==null)
return null;return null;
if(index>=this.mTelephone.length)If(index>=this.mTelephone.length)
return null;return null;
if(index<0&&-index>this.mTelephone.length)If(index<0&&-index>this.mTelephone.length)
return null;return null;
if(index>=0)return this.mTelephone[index];If(index>=0) return this.mTelephone[index];
return this.mTelephone[this.mTelephone.length+index]; return this.mTelephone[this.mTelephone.length+index];
}}
public String[]getTelephoneToXML(){public String[]getTelephoneToXML(){
String[]valArr=getTelephone();String[]valArr=getTelephone();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for(int z=0;z<nvArr.length;z++){For(int z=0; z<nvArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch (c[x]) {`` switch (c[x]) {
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
nvArr[z]=sb.toString();nvArr[z]=sb.toString();
}}
return nvArr;return nvArr;
}}
public void setTelephone(int index,String inp){public void setTelephone(int index, String inp){
if(this.mTelephone==null){If(this.mTelephone==null){
if(index<0){ if(index<0){
this.mTelephone=new String[1]; this.mTelephone = new String[1];
this.mTelephone[0]=inp;`` this.mTelephone[0]=inp;
}else{}else{
this.mTelephone=new String[index+1]; this.mTelephone = new String[index+1];
this.mTelephone[index]=inp;`` this.mTelephone[index]=inp;
}}
}else if(index<0){}else if(index<0){
String[]newTelephone=new String[this.mTelephone.length+1]; String[]newTelephone=new String[this.mTelephone.length+1];
java.lang.System.arraycopy((Object)mTelephone,0,java.lang.System.arraycopy((Object)mTelephone, 0,
(Object)newTelephone,0,this.mTelephone.length);(Object)newTelephone, 0, this.mTelephone.length);
newTelephone[newTelephone.length-1]=inp;newTelephone[newTelephone.length-1]=inp;
mTelephone=newTelephone;mTelephone=newTelephone;
}else if(index>=this.mTelephone.length){}else if(index>=this.mTelephone.length){
String[]newTelephone=new String[index+1]; String[]newTelephone=new String[index+1];
java.lang.System.arraycopy((Object)mTelephone,0,java.lang.System.arraycopy((Object)mTelephone, 0,
(Object)newTelephone,0,this.mTelephone.length);(Object)newTelephone, 0, this.mTelephone.length);
newTelephone[index]=inp;newTelephone[index]=inp;
mTelephone=newTelephone;mTelephone=newTelephone;
}else{}else{
this.mTelephone[index]=inp;** this.mTelephone[index]=inp;
}}
}}
public void setTelephone(String[]inp){public void setTelephone(String[]inp){
this.mTelephone=inp; this.mTelephone = inp;
}}
public void telephoneFromXML(String n){public void telephoneFromXML(String n){
setTelephone(-1,n);setTelephone(-1, n);
}}
public String[]getFax(){public String[]getFax(){
return mFax;return mFax;
}}
public String getFax(int index){public String getFax(int index){
if(this.mFax==null)If(this.mFax==null)
return null;return null;
if(index>=this.mFax.length)If(index>=this.mFax.length)
return nullreturn null
if(index<0&&-index>this.mFax.length)If(index<0&&-index>this.mFax.length)
return nullreturn null
if(index>=0)return this.mFax[index];If(index>=0) return this.mFax[index];
return this.mFax[this.mFax.length+index]; return this.mFax[this.mFax.length+index];
}}
public String[]getFaxToXML(){public String[]getFaxToXML(){
String[]valArr=getFax();String[]valArr=getFax();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for(int z=0;z<nvArr.length;z++){For(int z=0; z<nvArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″< ;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
nvArr[z]=sb.toString(); nvArr[z] = sb.toString();
}}
return nvArr;return nvArr;
}}
public void setFax(int index,String inp){ public void setFax(int index, String inp){
if (this.mFax==null){If (this.mFax==null){
if(index<0){ if(index<0){
this.mFax=new String[1]; this.mFax = new String[1];
this.mFax[0]=inp;`` this.mFax[0]=inp;
}else{ } else {
this.mFax=new String[index+1]; this.mFax=new String[index+1];
this.mFax[index]=inp;`` this.mFax[index]=inp;
}}
}else if(index<0){}else if(index<0){
String[]newFax=new String[this.mFax.length+1];String[]newFax=new String[this.mFax.length+1];
java.lang.System.arraycopy((Object)mFax,0,(Object)newFax,0,java.lang.System.arraycopy((Object)mFax,0,(Object)newFax,0,
this.mFax.length);this.mFax.length);
newFax[newFax.length-1]=inp;newFax[newFax.length-1]=inp;
mFax=newFax;mFax=newFax;
}else if(index>=this.mFax.length){ }else if(index>=this.mFax.length){
String[]newFax=new String[index+1]; String[]newFax=new String[index+1];
java.lang.System.arraycopy((Object)mFax,0,(Object)newFax,0,java.lang.System.arraycopy((Object)mFax,0,(Object)newFax,0,
this.mFax.length);this.mFax.length);
newFax[index]=inp;newFax[index]=inp;
mFax=newFax;mFax=newFax;
}else{}else{
this.mFax[index]=inp;** this.mFax[index]=inp;
}}
}}
public void setFax(String[]inp){public void setFax(String[]inp){
this.mFax=inp; this.mFax = inp;
}}
public void faxFromXML(String n){public void faxFromXML(String n){
setFax(-1,n);setFax(-1, n);
}}
public String[]getEmail(){public String[]getEmail(){
return mEmail;return mEmail;
}}
public String getEmail(int index){public String getEmail(int index){
if(this.mEmail==null)If(this.mEmail==null)
return null;return null;
if(index>=this.mEmail.length)If(index>=this.mEmail.length)
return null;return null;
if(index<0&&-index>this.mEmail.length)If(index<0&&-index>this.mEmail.length)
return null;return null;
if(index>=0)return this.mEmail[index];If(index>=0) return this.mEmail[index];
return this.mEmail[this.mEmail.length+index]; return this.mEmail[this.mEmail.length+index];
}}
public String[]getEmailToXML(){public String[]getEmailToXML(){
String[]valArr=getEmail();String[]valArr=getEmail();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for(int z=0;z<nvArr.length;z++){For(int z=0; z<nvArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case'"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))If(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
nvArr[z]=sb.toString(); nvArr[z] = sb.toString();
}}
return nvArr;return nvArr;
}}
public void setEmail(int index,String inp){ public void setEmail(int index, String inp){
if(this.mEmail==null){If(this.mEmail==null){
if(index<0){ if(index<0){
this.mEmail=new String[1]; this.mEmail = new String[1];
this.mEmail[0]=inp; this.mEmail[0]=inp;
}else{}else{
this.mEmail=new String[index+1]; this.mEmail = new String[index+1];
this.mEmail[index]=inp; this.mEmail[index]=inp;
}}
}else if(index<0){}else if(index<0){
String[]newEmail=new String[this.mEmail.length+1]; String[]newEmail=new String[this.mEmail.length+1];
java.lang.System.arraycopy((Object)mEmail,0,Object)newEmail,0, java.lang.System.arraycopy((Object) mEmail, 0, Object) newEmail, 0,
this.mEmail.length);this.mEmail.length);
newEmail[newEmail.length-1]=inp;NewEmail[newEmail.length-1]=inp;
mEmail=newEmail;mEmail=newEmail;
}else if(index>=this.mEmail.length){ }else if(index>=this.mEmail.length){
String[]newEmail=new String[index+1]; String[]newEmail=new String[index+1];
java.lang.System.arraycopy((Object)mEmail,0,(Object)newEmail,0,java.lang.System.arraycopy((Object)mEmail,0,(Object)newEmail,0,
this.mEmail.length);this.mEmail.length);
newEmail[index]=inp;newEmail[index]=inp;
mEmail=newEmail;mEmail=newEmail;
}else{}else{
this.mEmail[index]=inp;`` this.mEmail[index]=inp;
}}
}}
public void setEmail(String[]inp) {public void setEmail(String[]inp) {
this.mEmail=inp;` this.mEmail=inp;
}}
public void emailFromXML(String n){public void emailFromXML(String n){
setEmail(-1,n);setEmail(-1,n);
}}
public String[]getInternet(){public String[]getInternet(){
return mInternet;return mInternet;
}}
public String getInternet(int index){public String getInternet(int index){
if(this.mInternet==null)If(this.mInternet==null)
return null;return null;
if(index>=this.mInternet.length)If(index>=this.mInternet.length)
return null;return null;
if(index<0&&-index>this.mInternet.length)If(index<0&&-index>this.mInternet.length)
return null;return null;
if(index>=0)return this.mInternet[index];If(index>=0) return this.mInternet[index];
return this.mInternet[this.mInternet.length+index]; return this.mInternet[this.mInternet.length+index];
}}
public String[]getInternetToXML(){public String[]getInternetToXML(){
String[]valArr=getInternet();String[]valArr=getInternet();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for(int z=0;z<nvArr.length;z++){For(int z=0; z<nvArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″) ;sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
nvArr[z]=sb.toString();nvArr[z]=sb.toString();
}}
return nvArr;return nvArr;
}}
public void setInternet(int index,String inp){public void setInternet(int index, String inp){
if(this.mInternet==null){if(this.mInternet==null){
if(index<0){ if (index<0) {
this.mInternet=new String[1]; this.mInternet = new String[1];
this.mInternet[0]=inp;` this.mInternet[0]=inp;
}else{}else{
this.mInternet=new String[index+1]; this.mInternet = new String[index+1];
this.mInternet[index]=inp;` this.mInternet[index]=inp;
}}
}else if(index<0){}else if(index<0){
String[]newInternet=new String[this.mInternet.length+1];String[]newInternet=new String[this.mInternet.length+1];
java.lang.System.arraycopy((Object)mInternet,0,java.lang.System.arraycopy((Object)mInternet, 0,
(Object)newInternet,0,this. mInternet.length);(Object) newInternet, 0, this. mInternet. length);
newInternet[newInternet.length-1]=inp;newInternet[newInternet.length-1]=inp;
mInternet=newInternet;mInternet=newInternet;
}else if(index>=this.mInternet.length){ }else if(index>=this.mInternet.length){
String[]newInternet=new String[index+1];String[]newInternet=new String[index+1];
java.lang.System.arraycopy((Object)mInternet,0,java.lang.System.arraycopy((Object)mInternet, 0,
(Object)newInternet,0,this.mInternet.length);(Object)newInternet, 0, this.mInternet.length);
newInternet[index]=inp;newInternet[index]=inp;
mInternet=newInternet;mInternet=newInternet;
}else{}else{
this.mInternet[index]=inp;** this.mInternet[index]=inp;
}}
}}
public void setInternet(String[]inp){ public void setInternet(String[]inp){
this.mInternet=inp; this.mInternet=inp;
}}
public void internetFromXML(String n){public void internetFromXML(String n){
setInternet(-1,n);setInternet(-1, n);
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class Business extends Party{public class Business extends Party{
public static final String DOC_TYPE=″business″;public static final String DOC_TYPE="business";
String aBusinessNumber;String aBusinessNumber;
public Business(){public Business(){
super(DOC_TYPE);`` super(DOC_TYPE);
aBusinessNumber=new String();aBusinessNumber = new String();
}}
public Business(String doc_type){public Business(String doc_type){
super(doc_type);`` super(doc_type);
aBusinessNumber=new String();aBusinessNumber = new String();
}}
static public Business initBusiness(String iBusinessNumber,String[]iPartyName,static public Business initBusiness(String iBusinessNumber, String[]iPartyName,
AddressSet iAddressSet){AddressSet iAddressSet){
Business obj=new Business();Business obj = new Business();
obj.initializeAll(iBusinessNumber,iPartyName,iAddressSet); obj.initializeAll(iBusinessNumber, iPartyName, iAddressSet);
return obj;return obj;
}}
public void initializeAll(String iBusinessNumber,String[]iPartyName,AddressSetpublic void initializeAll(String iBusinessNumber, String[]iPartyName, AddressSet
iAddressSet){iAddressSet){
aBusinessNumber=iBusinessNumber;aBusinessNumber=iBusinessNumber;
super.initializeAll(iPartyName,iAddressSet);`` super.initializeAll(iPartyName, iAddressSet);
}}
public String getBusinessNumber(){public String getBusinessNumber(){
return aBusinessNumber;return aBusinessNumber;
}}
public String getBusinessNumberToXML(){public String getBusinessNumberToXML(){
if(getBusinessNumber()==null)return null;If(getBusinessNumber()==null) return null;
char[]c=getBusinessNumber().toCharArray(); char[]c=getBusinessNumber().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){ switch(c[x]){
case’>’:case'>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case'"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case'\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))If(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setBusinessNumber(String inp){public void setBusinessNumber(String inp){
this.aBusinessNumber=inp;`` this.aBusinessNumber=inp;
}}
public void businessNumberFromXML(String n){public void businessNumberFromXML(String n){
setBusinessNumber(n);setBusinessNumber(n);
}}
}}
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class Party extends Document{public class Party extends Document{
public static final String DOC_TYPE=″party″;public static final String DOC_TYPE="party";
String[]mPartyName;String[] mPartyName;
AddressSet mAddressSet;AddressSet mAddressSet;
public Party(){public Party(){
super(DOC_TYPE); super(DOC_TYPE);
mPartyName=new String[0];mPartyName = new String[0];
this.mAddressSet=new AddressSet(); this.mAddressSet = new AddressSet();
}}
public Party(String doc_type){public Party(String doc_type){
super(doc_type);super(doc_type);
mPartyName=new String[0];mPartyName = new String[0];
this.mAddressSet=new AddressSet(); this.mAddressSet = new AddressSet();
}}
static public Party initParty(String[]iPartyName,AddressSet iAddressSet){static public Party initParty(String[]iPartyName,AddressSet iAddressSet){
Party obj=new Party();Party obj = new Party();
obj.initializeAll(iPartyName,iAddressSet);obj.initializeAll(iPartyName, iAddressSet);
return obj;return obj;
}}
public void initializeAll(String[]iPartyName,AddressSet iAddressSet){public void initializeAll(String[]iPartyName,AddressSet iAddressSet){
mPartyName=iPartyName;mPartyName = iPartyName;
mAddressSet=iAddressSet;mAddressSet = iAddressSet;
}}
public String[]getPartyName(){public String[]getPartyName(){
return mPartyName;return mPartyName;
}}
public String getPartyName(int index){public String getPartyName(int index){
if(this.mPartyName==null)If(this.mPartyName==null)
return null;return null;
if(index>=this.mPartyName.length)If(index>=this.mPartyName.length)
return null;return null;
if(index<0&&-index>this.mPartyName.length)If(index<0&&-index>this.mPartyName.length)
return null;return null;
if(index>=0)return this.mPartyName[index];If(index>=0) return this.mPartyName[index];
return this.mPartyName[this.mPartyName.length+index]; return this.mPartyName[this.mPartyName.length+index];
}}
public String[]getPartyNameToXML(){public String[]getPartyNameToXML(){
String[]valArr=getPartyName();String[]valArr=getPartyName();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for int z=0;z<nyArr.length;z++){for int z=0; z<nyArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append (″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))If(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
nvArr[z]=sb.toString();`` nvArr[z]=sb.toString();
}}
return nvArr;return nvArr;
}}
public void setPartyName(int index,String inp){public void setPartyName(int index, String inp){
if(this.mPartyName==null){If(this.mPartyName==null){
if(index<0){ if(index<0){
this.mPartyName=new String[1]; this.mPartyName = new String[1];
this.mPartyName[0]=inp;** this.mPartyName[0]=inp;
}else{}else{
this.mPartyName=new String[index+1]; this.mPartyName = new String[index+1];
this.mPartyName[index]=inp;`` this.mPartyName[index]=inp;
}}
}else if(index<0){}else if(index<0){
String[]newPartyName=new String[this.mPartyName.length+1]; String[]newPartyName=new String[this.mPartyName.length+1];
java.lang.System.arraycopy((Object)mPartyName,0,java.lang.System.arraycopy((Object) mPartyName, 0,
(Object)newPartyName,0,this.mPartyName.length);(Object) newPartyName, 0, this. mPartyName. length);
newPartyName[newPartyName.length-1]=inp;NewPartyName[newPartyName.length-1]=inp;
mPartyName=newPartyName;mPartyName=newPartyName;
}else if(index>=this.mPartyName.length){ }else if(index>=this.mPartyName.length){
String[]newPartyName=new String[index+1]; String[]newPartyName=new String[index+1];
java.lang.System.arraycopy((Object)mPartyName,0,java.lang.System.arraycopy((Object) mPartyName, 0,
(Object)newPartyName,0,this.mPartyName.length);(Object) newPartyName, 0, this. mPartyName. length);
newPartyName[index]=inp;NewPartyName[index]=inp;
mPartyName=newPartyName;mPartyName=newPartyName;
}else{}else{
this.mPartyName[index]=inp;** this.mPartyName[index]=inp;
}}
}}
public void setPartyName(String[]inp){public void setPartyName(String[]inp){
this.mPartyName=inp;`` this.mPartyName=inp;
}}
public void partyNameFromXML(String n){public void partyNameFromXML(String n){
setPartyName(-1,n);setPartyName(-1, n);
}}
public AddressSet getAddressSet(){public AddressSet getAddressSet(){
return mAddressSet;return mAddressSet;
}}
public void setAddressSet(AddressSet inp){public void setAddressSet(AddressSet inp){
this.mAddressSet=inp; this.mAddressSet = inp;
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class Person extends Party{public class Person extends Party{
public static final String DOC_TYPE=″person″;public static final String DOC_TYPE="person";
String aSSN;String aSSN;
public Person(){public Person(){
super(DOC_TYPE);`` super(DOC_TYPE);
aSSN=null;aSSN=null;
}}
public Person(String doc_type){public Person(String doc_type){
super(doc_type);`` super(doc_type);
aSSN=null;aSSN=null;
}}
static public Person initPerson(String iSSN,String[]iPartyName,AddressSetstatic public Person initPerson(String iSSN, String[]iPartyName, AddressSet
iAddressSet){iAddressSet){
Person obj=new Person();Person obj = new Person();
obj.initializeAll(iSSN,iPartyName,iAddressSet); obj.initializeAll(iSSN, iPartyName, iAddressSet);
return obj;return obj;
}}
public void initializeAll(String iSSN,String[]iPartyName,AddressSet iAddressSet){ public void initializeAll(String iSSN, String[]iPartyName, AddressSet iAddressSet){
aSSN=iSSN;aSSN=iSSN;
super.initializeAll(iPartyName,iAddressSet);`` super.initializeAll(iPartyName, iAddressSet);
}}
public String getSSN(){ public String getSSN(){
return aSSN;return aSSN;
}}
public String getSSNToXML(){ public String getSSNToXML(){
if(getSSN()==null)return null;If(getSSN()==null) return null;
char[]c=getSSN().toCharArray(); char[]c=getSSN().toCharArray();
StringBuffer sb=new StringBuffer(); StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){ switch(c[x]){
case’>’:case'>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″< ;″);sb.append(″<″);
break: break:
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case’″’:
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case'\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))If(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setSSN(String inp){public void setSSN(String inp){
this.aSSN=inp;`` this.aSSN=inp;
}}
public void sSNFromXML(String n){public void sSNFromXML(String n){
setSSN(n);setSSN(n);
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class PrototypeService extends Document{public class PrototypeService extends Document{
public static final String DOC_TYPE=″prototype.service″;public static final String DOC_TYPE="prototype.service";
String mServiceName;String mServiceName;
String[]mServiceTerms;String[]mServiceTerms;
String[]mServiceLocation;String[]mServiceLocation;
ServiceOperation[]mServiceOperation;ServiceOperation[]mServiceOperation;
public PrototypeService(){public PrototypeService(){
super(DOC_TYPE); super(DOC_TYPE);
mServiceName=new String();mServiceName = new String();
mServiceTerms=new String[0];mServiceTerms = new String[0];
mServiceLocation=new String[0];mServiceLocation = new String[0];
this.mServiceOperation=new ServiceOperation[0]; this.mServiceOperation = new ServiceOperation[0];
}}
public PrototypeService(String doc_type){public PrototypeService(String doc_type){
super(doc_type): super(doc_type):
mServiceName=new String();mServiceName = new String();
mServiceTerms=new String[0];mServiceTerms = new String[0];
mServiceLocation=new String[0];mServiceLocation = new String[0];
this.mServiceOperation=new ServiceOperation[0]; this.mServiceOperation=new ServiceOperation[0];
}}
static public PrototypeService initPrototypeService(String iServiceName,String[]static public PrototypeService initPrototypeService(String iServiceName, String[]
iServiceTerms,String[]iServiceLocation,ServiceOperation[]iServiceOperation){iServiceTerms, String[]iServiceLocation, ServiceOperation[]iServiceOperation){
PrototypeService obj=new PrototypeService(); PrototypeService obj = new PrototypeService();
obj.initializeAll(iServiceName,iServiceTerms,iServiceLocation, obj.initializeAll(iServiceName, iServiceTerms, iServiceLocation,
iServiceOperation);iServiceOperation);
return obj;return obj;
}}
public void initializeAll(String iServiceName,String[]iServiceTerms,String[] public void initializeAll(String iServiceName, String[]iServiceTerms, String[]
iServiceLocation,ServiceOperation[]iServiceOperation){iServiceLocation, ServiceOperation[]iServiceOperation){
mServiceName=iServiceName;mServiceName=iServiceName;
mServiceTerms=iServiceTerms; mServiceTerms = iServiceTerms;
mServiceLocation=iServiceLocation; mServiceLocation = iServiceLocation;
mServiceOperation=iServiceOperation; mServiceOperation = iServiceOperation;
}}
public String getServiceName(){ public String getServiceName(){
return mServiceName;return mServiceName;
}}
public String getServiceNameToXML(){ public String getServiceNameToXML(){
if(getServiceName()==null)return null;If(getServiceName()==null) return null;
char[]c=getServiceName().toCharArray(); char[]c=getServiceName().toCharArray();
StringBuffer sb=new StringBuffer(); StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){ switch(c[x]){
case’>’:case'>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break: break:
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceName(String inp){public void setServiceName(String inp){
this.mServiceName=inp; this.mServiceName=inp;
}}
public void serviceNameFromXML(String n){public void serviceNameFromXML(String n){
setServiceName(n);setServiceName(n);
}}
public String[]getServiceTerms(){public String[]getServiceTerms(){
return mServiceTerms;return mServiceTerms;
}}
public String getServiceTerms(int index){public String getServiceTerms(int index){
if(this.mServiceTerms==null)If(this.mServiceTerms==null)
return null;return null;
if(index>=this.mServiceTerms.length)If(index>=this.mServiceTerms.length)
return null;return null;
if(index<0&&-index>this.mServiceTerms.length) if(index<0&&-index>this.mServiceTerms.length)
return null;return null;
if(index>=0)return this.mServiceTerms[index];If(index>=0) return this.mServiceTerms[index];
return this.mServiceTerms[this.mServiceTerms.length+index]; return this.mServiceTerms[this.mServiceTerms.length+index];
}}
public String[]getServiceTermsToXML(){public String[]getServiceTermsToXML(){
String[]valArr=getServiceTerms();String[]valArr=getServiceTerms();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for(int z=0;z<nvArr.length;z++){For(int z=0; z<nvArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0: x<c.length;x++){for(int x=0: x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
nvArr[z]=sb.toString();nvArr[z]=sb.toString();
}}
return nvArr;return nvArr;
}}
public void setServiceTerms(int index,String inp){ public void setServiceTerms(int index, String inp){
if(this.mServiceTerms==null){ if(this.mServiceTerms==null){
if(index<0){ if(index<0){
this.mServiceTerms=new String[1]; this.mServiceTerms=new String[1];
this.mServiceTerms[0]=inp;** this.mServiceTerms[0]=inp;
}else{ } else {
this.mServiceTerms=new String[index+1]; this.mServiceTerms=new String[index+1];
this.mServiceTerms[index]=inp; this.mServiceTerms[index]=inp;
}}
}else if(index<0){}else if(index<0){
String[]newServiceTerms=new String[this.mServiceTerms.length+1]; String[]newServiceTerms=new String[this.mServiceTerms.length+1];
java.lang.System.arraycopy((Object)mServiceTerms,0,java.lang.System.arraycopy((Object)mServiceTerms, 0,
(Object)newServiceTerms,0,this.mServiceTerms.length);(Object) newServiceTerms, 0, this.mServiceTerms.length);
newServiceTerms[newServiceTerms.length-1]=inp;newServiceTerms[newServiceTerms.length-1]=inp;
mServiceTerms=newServiceTerms;mServiceTerms=newServiceTerms;
}else if(index>=this.mServiceTerms.length){ }else if(index>=this.mServiceTerms.length){
String[]newServiceTerms=new String[index+1]; String[]newServiceTerms=new String[index+1];
java.lang.System.arraycopy((Object)mServiceTerms,0,java.lang.System.arraycopy((Object)mServiceTerms, 0,
(Object)newServiceTerms,0,this.mServiceTerms.length);(Object) newServiceTerms, 0, this.mServiceTerms.length);
newServiceTerms[index]=inp;newServiceTerms[index]=inp;
mServiceTerms=newServiceTerms;mServiceTerms=newServiceTerms;
}else{}else{
this.mServiceTerms[index]=inp; this.mServiceTerms[index]=inp;
}}
}}
public void setServiceTerms(String[]inp){public void setServiceTerms(String[]inp){
this.mServiceTerms=inp; this.mServiceTerms=inp;
}}
public void serviceTermsFromXML(String n){public void serviceTermsFromXML(String n){
setServiceTerms(-1,n);setServiceTerms(-1, n);
}}
public String[]getServiceLocation(){public String[]getServiceLocation(){
return mServiceLocation;return mServiceLocation;
}}
public String getServiceLocation(int index){public String getServiceLocation(int index){
if(this.mServiceLocation==null)If(this.mServiceLocation==null)
return null;return null;
if(index>=this.mServiceLocation.length)If(index>=this.mServiceLocation.length)
return null;return null;
if(index<0&&-index>this.mServiceLocation.length) if(index<0&&-index>this.mServiceLocation.length)
return null;return null;
if(index>=0)return this.mServiceLocation[index];If(index>=0) return this.mServiceLocation[index];
return this.mServiceLocation[this.mServiceLocation.length+index]; return this.mServiceLocation[this.mServiceLocation.length+index];
}}
public String[]getServiceLocationToXML(){public String[]getServiceLocationToXML(){
String[]valArr=getServiceLocation();String[]valArr=getServiceLocation();
if(valArr==null)return null;if(valArr==null) return null;
String[]nvArr=new String[valArr.length];String[]nvArr=new String[valArr.length];
for(int z=0;z<nvArr.length;z++){For(int z=0; z<nvArr.length; z++){
char[]c=valArr[z].toCharArray();char[]c=valArr[z].toCharArray();
StringBuffer st=new StringBuffer();StringBuffer st = new StringBuffer();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case”’:case"':
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))If(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
} }
} }
nvArr[z]=sb.toString();** nvArr[z]=sb.toString();
} }
return nvArr;return nvArr;
}}
public void setServiceLocation(int index,String inp){ public void setServiceLocation(int index, String inp){
if(this.mServiceLocation==null){ if(this.mServiceLocation==null){
if(index<0){ if(index<0){
this.mServiceLocation=new String[1]; this.mServiceLocation = new String[1];
this.mServiceLocation[0]=inp;** this.mServiceLocation[0]=inp;
}else{ } else {
this.mServiceLocation=new String[index+1]; this.mServiceLocation = new String[index+1];
this.mServiceLocation[index]=inp; this.mServiceLocation[index]=inp;
} }
}else if(index<0){}else if(index<0){
String[]newServiceLocation=new String[] newServiceLocation=new
String[this.mServiceLocation.length+1];String[this.mServiceLocation.length+1];
java.lang.System.arraycopy((Object)mServiceLocation,0, java.lang.System.arraycopy((Object)mServiceLocation, 0,
(Object)newServiceLocation,0,this.mServiceLocation.length);(Object) newServiceLocation, 0, this.mServiceLocation.length);
newServiceLocation[newServiceLocation.length-1]=inp;newServiceLocation[newServiceLocation.length-1]=inp;
mServiceLocation=newServiceLocation;mServiceLocation=newServiceLocation;
}else if(index>=this.mServiceLocation.length){ }else if(index>=this.mServiceLocation.length){
String[]newServiceLocation=new String[index+1]; String[]newServiceLocation=new String[index+1];
java.lang.System.arraycopy((Object)mServiceLocation, 0,java.lang.System.arraycopy((Object)mServiceLocation, 0,
(Object)newServiceLocation,0,this.mServiceLocation.length);(Object) newServiceLocation, 0, this.mServiceLocation.length);
newServiceLocation[index]=inp;newServiceLocation[index]=inp;
mServiceLocation=newServiceLocation;mServiceLocation=newServiceLocation;
}else{}else{
this.mServiceLocation[index]=inp; this.mServiceLocation[index]=inp;
}}
}}
public void setServiceLocation(String[]inp){ public void setServiceLocation(String[]inp){
this.mServiceLocation=inp; this.mServiceLocation=inp;
}}
public void serviceLocationFromXML(String n){ public void serviceLocationFromXML(String n){
setServiceLocation(-1,n);setServiceLocation(-1, n);
}}
public ServiceOperation[]getServiceOperation(){ public ServiceOperation[]getServiceOperation(){
return mServiceOperation;return mServiceOperation;
}}
public ServiceOperation getServiceOperation(int index){ public ServiceOperation getServiceOperation(int index){
if (this.mServiceOperation==null)If (this.mServiceOperation==null)
return null;return null;
if(index>=this.mServiceOperation.length)If(index>=this.mServiceOperation.length)
return null;return null;
if(index<0&&-index>this.mServiceOperation.length)If(index<0&&-index>this.mServiceOperation.length)
return null;return null;
if(index>=0)return this.mServiceOperation[index];If (index>=0) return this.mServiceOperation[index];
return this.mServiceOperation[this.mServiceOperation.length+index]; return this.mServiceOperation[this.mServiceOperation.length+index];
}}
public void setServiceOperation(int index,ServiceOperation inp){ public void setServiceOperation(int index, ServiceOperation inp){
if(this.mServiceOperation==null){ if(this.mServiceOperation==null){
if(index<0){ if(index<0){
this.mServiceOperation=new ServiceOperation[1]; this.mServiceOperation=new ServiceOperation[1];
this.mServiceOperation[0]=inp;** this.mServiceOperation[0]=inp;
}else{ } else {
this.mServiceOperation=new ServiceOperation[index+1]; this.mServiceOperation=new ServiceOperation[index+1];
this.mServiceOperation[index]=inp; this.mServiceOperation[index]=inp;
}}
}else if(index<0){}else if(index<0){
ServiceOperation[]newServiceOperation=new ServiceOperation[]newServiceOperation=new
ServiceOperation[this.mServiceOperation.length+1];ServiceOperation[this.mServiceOperation.length+1];
java.lang.System.arraycopy((Object)mServiceOperation,0, java.lang.System.arraycopy((Object)mServiceOperation, 0,
(Object)newServiceOperation,0,this.mServiceOperation.length);(Object) newServiceOperation, 0, this.mServiceOperation.length);
newServiceOperation[newServiceOperation.length-1]=inp;newServiceOperation[newServiceOperation.length-1]=inp;
mServiceOperation=newServiceOperation; mServiceOperation = newServiceOperation;
}else if(index>=this.mServiceOperation.length){ }else if(index>=this.mServiceOperation.length){
ServiceOperation[]newServiceOperation=new ServiceOperation[index+1]: ServiceOperation[]newServiceOperation=new ServiceOperation[index+1]:
java.lang.System.arraycopy((Object)mServiceOperation,0, java.lang.System.arraycopy((Object)mServiceOperation, 0,
(Object)newServiceOperation,0,this.mServiceOperation.length);(Object) newServiceOperation, 0, this.mServiceOperation.length);
newServiceOperation[index]=inp;newServiceOperation[index]=inp;
mServiceOperation=newServiceOperation;mServiceOperation=newServiceOperation;
}else{ } else {
this.mServiceOperation[index]=inp; this.mServiceOperation[index]=inp;
}}
}}
public void setServiceOperation(ServiceOperation[]inp){ public void setServiceOperation(ServiceOperation[]inp){
this.mServiceOperation=inp; this.mServiceOperation=inp;
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class Service extends Document{public class Service extends Document{
public static final String DOC_TYPE=″service″;public static final String DOC_TYPE="service";
String mServiceName;String mServiceName;
String mServiceLocation;String mServiceLocation;
ServiceOperation[]mServiceOperation;ServiceOperation[]mServiceOperation;
String mServiceTerms;String mServiceTerms;
public Service(){public Service(){
super(DOC_TYPE);`` super(DOC_TYPE);
mServiceName=new String();mServiceName = new String();
mServiceLocation=new String();mServiceLocation = new String();
this.mServiceOperation=new ServiceOperation[0]; this.mServiceOperation=new ServiceOperation[0];
mServiceTerms=new String();mServiceTerms = new String();
}}
public Service(String doc_type){ public Service(String doc_type){
super(doc_type);`` super(doc_type);
mServiceName=new String();mServiceName = new String();
mServiceLocation=new String();mServiceLocation = new String();
this.mServiceOperation=new ServiceOperation[0]; this.mServiceOperation=new ServiceOperation[0];
mServiceTerms=new String();mServiceTerms = new String();
}}
static public Service initService(String iServiceName,Stringstatic public Service initService(String iServiceName, String
iServiceLocation,ServiceOperation[]iServiceOperation,String iServiceTerms){iServiceLocation, ServiceOperation[] iServiceOperation, String iServiceTerms){
Service obj=new Service(); Service obj = new Service();
obj.initializeAll(iServiceName,iServiceLocation,iServiceOperation, obj.initializeAll(iServiceName, iServiceLocation, iServiceOperation,
iServiceTerms);iServiceTerms);
return obj;return obj;
}}
public void initializeAll(String iServiceName,Stringpublic void initializeAll(String iServiceName, String
iServiceLocation,ServiceOperation[]iServiceOperation,String iServiceTerms){iServiceLocation, ServiceOperation[] iServiceOperation, String iServiceTerms){
mServiceName=iServiceName;mServiceName=iServiceName;
mServiceLocation=iServiceLocation; mServiceLocation = iServiceLocation;
mServiceOperation=iServiceOperation; mServiceOperation = iServiceOperation;
mServiceTerms=iServiceTerms; mServiceTerms = iServiceTerms;
}}
public String getServiceName(){ public String getServiceName(){
return mServiceName;return mServiceName;
}}
public String getServiceNameToXML(){ public String getServiceNameToXML(){
if(getServiceName()==null)return null;If(getServiceName()==null) return null;
char[]c=getServiceName().toCharArray(); char[]c=getServiceName().toCharArray();
StringBuffer sb=new StringBuffer(); StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){ switch(c[x]){
case’>’:case'>':
sb.append(″>;″):sb.append(″>″):
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceName(String inp){public void setServiceName(String inp){
this.mServiceName=inp; this.mServiceName=inp;
}}
public void serviceNameFromXML(String n){public void serviceNameFromXML(String n){
setServiceName(n);setServiceName(n);
}}
public String getServiceLocation(){public String getServiceLocation(){
return mServiceLocation:return mServiceLocation:
}}
public String getServiceLocationToXML(){public String getServiceLocationToXML(){
if(getServiceLocation()==null)return null;If(getServiceLocation()==null) return null;
char[]c=getServiceLocation().toCharArray();char[]c=getServiceLocation().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″< ;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\” :case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceLocation(String inp){public void setServiceLocation(String inp){
this.mServiceLocation=inp; this.mServiceLocation = inp;
}}
public void serviceLocationFromXML(String n){public void serviceLocationFromXML(String n){
setServiceLocation(n);setServiceLocation(n);
}}
public ServiceOperation[]getServiceOperation(){public ServiceOperation[]getServiceOperation(){
return mServiceOperation;return mServiceOperation;
}}
public ServiceOperation getServiceOperation(int index){public ServiceOperation getServiceOperation(int index){
if(this.mServiceOperation==null)If(this.mServiceOperation==null)
return null;return null;
if(index>=this.mServiceOperation.length)If(index>=this.mServiceOperation.length)
return null;return null;
if(index<0&&-index>this.mServiceOperation.length) if(index<0&&-index>this.mServiceOperation.length)
return null;return null;
if(index>=0)return this.mServiceOperation[index];If(index>=0) return this.mServiceOperation[index];
return this.mServiceOperation[this.mServiceOperation.length+index]; return this.mServiceOperation[this.mServiceOperation.length+index];
}}
public void setServiceOperation(int index,ServiceOperation inp){ public void setServiceOperation(int index, ServiceOperation inp){
if(this.mServiceOperation==null){If(this.mServiceOperation==null){
if(index<0){ if(index<0){
this.mServiceOperation=new ServiceOperation[1]; this.mServiceOperation=new ServiceOperation[1];
this.mServiceOperation[0]=inp; this.mServiceOperation[0]=inp;
}else{}else{
this.mServiceOperation=new ServiceOperation[index+1]; this.mServiceOperation=new ServiceOperation[index+1];
this.mServiceOperation[index]=inp; this.mServiceOperation[index]=inp;
}}
}else if(index<0){}else if(index<0){
ServiceOperation[]newServiceOperation=new ServiceOperation[]newServiceOperation=new
ServiceOperation[this.mServiceOperation.length+1];ServiceOperation[this.mServiceOperation.length+1];
java.lang.System.arraycopy((Object)mServiceOperation,0, java.lang.System.arraycopy((Object)mServiceOperation, 0,
(Object)newServiceOperation,0,this.mServiceOperation.length);(Object) newServiceOperation, 0, this.mServiceOperation.length);
newServiceOperation[newServiceOperation.length-1]=inp;newServiceOperation[newServiceOperation.length-1]=inp;
mServiceOperation=newServiceOperation; mServiceOperation = newServiceOperation;
}else if(index>=this.mServiceOperation.length){ }else if(index>=this.mServiceOperation.length){
ServiceOperation[]newServiceOperation=new ServiceOperation[index+1]; ServiceOperation[]newServiceOperation=new ServiceOperation[index+1];
java.lang.System.arraycopy((Object)mServiceOperation,0, java.lang.System.arraycopy((Object)mServiceOperation, 0,
(Object)newServiceOperation,0,this.mServiceOperation. length);(Object)newServiceOperation, 0, this.mServiceOperation.length);
newServiceOperation[index]=inp;newServiceOperation[index]=inp;
mServiceOperation=newServiceOperation; mServiceOperation = newServiceOperation;
}else{}else{
this.mServiceOperation[index]=inp; this.mServiceOperation[index]=inp;
}}
}}
public void setServiceOperation(ServiceOperation[]inp){ public void setServiceOperation(ServiceOperation[]inp){
this.mServiceOperation=inp; this.mServiceOperation=inp;
}}
public String getServiceTerms(){ public String getServiceTerms(){
return mServiceTerms;return mServiceTerms;
}}
public String getServiceTermsToXML(){ public String getServiceTermsToXML(){
if(getServiceTerms()==null) return null;If(getServiceTerms()==null) return null;
char[]c=getServiceTerms().toCharArray(); char[]c=getServiceTerms().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){ switch(c[x]){
case’>’:case'>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case'\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))If(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceTerms(String inp){public void setServiceTerms(String inp){
this.mServiceTerms=inp; this.mServiceTerms=inp;
}}
public void serviceTermsFromXML(String n){public void serviceTermsFromXML(String n){
setServiceTerms(n);setServiceTerms(n);
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class ServiceOperation extends Document{public class ServiceOperation extends Document{
public static final String DOC_TYPE=″service.operation″;Public static final String DOC_TYPE="service.operation";
String mServiceOperationName;String mServiceOperationName;
String mServiceOperationLocation;String mServiceOperationLocation;
String mServiceOperationlnput;String mServiceOperationlnput;
String mServiceOperationOutput;String mServiceOperationOutput;
public ServiceOperation(){public ServiceOperation(){
super(DOC_TYPE);`` super(DOC_TYPE);
mServiceOperationName=new String();mServiceOperationName = new String();
mServiceOperationLocation=new String();mServiceOperationLocation = new String();
mServiceOperationInput=new String(); mServiceOperationInput = new String();
mServiceOperationOutput=new String();mServiceOperationOutput = new String();
}}
public ServiceOperation(String doc_type){ public ServiceOperation(String doc_type){
super(doc_type);`` super(doc_type);
mServiceOperationName=new String();mServiceOperationName = new String();
mServiceOperationLocation=new String();mServiceOperationLocation = new String();
mServiceOperationInput=new String(); mServiceOperationInput = new String();
mServiceOperationOutput=new String();mServiceOperationOutput = new String();
}}
static public ServiceOperation initServiceOperation(String iServiceOperationName,static public ServiceOperation initServiceOperation(String iServiceOperationName,
String iServiceOperationLocation,String iServiceOperationInput,StringString iServiceOperationLocation, String iServiceOperationInput, String
iServiceOperationOutput){iServiceOperationOutput){
ServiceOperation obj=new ServiceOperation(); ServiceOperation obj = new ServiceOperation();
obj.initializeAll(iServiceOperationName,iServiceOperationLocation, obj.initializeAll(iServiceOperationName, iServiceOperationLocation,
iServiceOperationInput,iServiceOperationOutput);iServiceOperationInput, iServiceOperationOutput);
return obj;return obj;
}}
public void initializeAll(String iServiceOperationName,String public void initializeAll(String iServiceOperationName, String
iServiceOperationLocation,String iServiceOperationInput,StringiServiceOperationLocation, String iServiceOperationInput, String
iServiceOperationOutput){iServiceOperationOutput){
mServiceOperationName=iServiceOperationName; mServiceOperationName=iServiceOperationName;
mServiceOperationLocation=iServiceOperationLocation;mServiceOperationLocation=iServiceOperationLocation;
mServiceOperationInput=iServiceOperationInput;mServiceOperationInput = iServiceOperationInput;
mServiceOperationOutput=iServiceOperationOutput;mServiceOperationOutput=iServiceOperationOutput;
}}
public String getServiceOperationName(){public String getServiceOperationName(){
return mServiceOperationName;return mServiceOperationName;
}}
public String getServiceOperationNameToXML(){public String getServiceOperationNameToXML(){
if(getServiceOperationName()==null)return null;If(getServiceOperationName()==null) return null;
char[]c=getServiceOperationName().toCharArray(); char[]c=getServiceOperationName().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceOperationName(String inp){public void setServiceOperationName(String inp){
this.mServiceOperationName=inp; this.mServiceOperationName=inp;
}}
public void serviceOperationNameFromXML(String n){public void serviceOperationNameFromXML(String n){
setServiceOperationName(n);setServiceOperationName(n);
}}
public String getServiceOperationLocation(){public String getServiceOperationLocation(){
return mServiceOperationLocation;return mServiceOperationLocation;
}}
public String getServiceOperationLocationToXML(){public String getServiceOperationLocationToXML(){
if(getServiceOperationLocation()==null)return null;If(getServiceOperationLocation()==null) return null;
char[]c=getServiceOperationLocation().toCharArray(); char[]c=getServiceOperationLocation().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceOperationLocation(String inp){public void setServiceOperationLocation(String inp){
this.mServiceOperationLocation=inp; this.mServiceOperationLocation = inp;
}}
public void serviceOperationLocationFromXML(String n){public void serviceOperationLocationFromXML(String n){
setServiceOperationLocation(n);setServiceOperationLocation(n);
}}
public String getServiceOperationInput(){public String getServiceOperationInput(){
return mServiceOperationInput;return mServiceOperationInput;
}}
public String getServiceOperationInputToXML(){public String getServiceOperationInputToXML(){
if(getServiceOperationInput()==null)return null;If(getServiceOperationInput()==null) return null;
char[]c=getServiceOperationInput().toCharArray();char[]c=getServiceOperationInput().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceOperationInput(String inp){public void setServiceOperationInput(String inp){
this.mServiceOperationInput=inp; this.mServiceOperationInput=inp;
}}
public void serviceOperationInputFromXML(String n){public void serviceOperationInputFromXML(String n){
setServiceOperationInput(n);setServiceOperationInput(n);
}}
public String getServiceOperationOutput(){public String getServiceOperationOutput(){
return mServiceOperationOutput;return mServiceOperationOutput;
}}
public String getServiceOperationOutputToXML(){public String getServiceOperationOutputToXML(){
if(getServiceOperationOutput()==null)return null;If(getServiceOperationOutput()==null) return null;
char[]c=getServiceOperationOutput().toCharArray();char[]c=getServiceOperationOutput().toCharArray();
StringBuffer sb=new StringBuffer();StringBuffer sb = new StringBuffer();
for(int x=0;x<c.length;x++){for(int x=0; x<c.length; x++){
switch(c[x]){switch(c[x]){
case’>’:case '>':
sb.append(″>;″);sb.append(″>″);
break;break;
case’<’:case'<':
sb.append(″<;″);sb.append(″<″);
break;break;
case’&’:case'&':
sb.append(″&;″);sb.append(″&″);
break;break;
case’″’:case '"':
sb.append(″";″);sb.append(″"″);
break;break;
case’\”:case '\":
sb.append(″";″);sb.append(″"″);
break;break;
default:default:
if(Character.isDefined(c[x]))if(Character. isDefined(c[x]))
sb.append(c[x]);sb.append(c[x]);
}}
}}
return sb.toString();return sb.toString();
}}
public void setServiceOperationOutput(String inp){public void setServiceOperationOutput(String inp){
this.mServiceOperationOutput=inp; this.mServiceOperationOutput=inp;
}}
public void serviceOperationOutputFromXML(String n){public void serviceOperationOutputFromXML(String n){
setServiceOperationOutput(n);setServiceOperationOutput(n);
}}
}}
package com.veo.xdk.dev.schema.test.blib;package com.veo.xdk.dev.schema.test.blib;
import com.veo.vsp.doclet.meta.Document;import com.veo.vsp.doclet.meta.Document;
public class ServiceSet extends Document{public class ServiceSet extends Document{
public static final String DOC_TYPE=″service.set″;public static final String DOC_TYPE="service.set";
Service[]mService;Service[]mService;
public ServiceSet(){public ServiceSet(){
super(DOC_TYPE); super(DOC_TYPE);
this.mService=new Service[0]; this.mService = new Service[0];
}}
public ServiceSet(String doc_type){public ServiceSet(String doc_type){
super(doc_type);super(doc_type);
this.mService=new Service[0]; this.mService = new Service[0];
}}
static public ServiceSet initServiceSet(Service[]iService){static public ServiceSet initServiceSet(Service[]iService){
ServiceSet obj=new ServiceSet();ServiceSet obj = new ServiceSet();
obj.initializeAll(iService); obj.initializeAll(iService);
return obj;return obj;
}}
public void initializeAll(Service[]iService){public void initializeAll(Service[]iService){
mService=iService;mService=iService;
}}
public Service[]getService(){public Service[]getService(){
return mService;return mService;
}}
public Service getService(int index){public Service getService(int index){
if(this.mService==null)If(this.mService==null)
return null;return null;
if(index>=this.mService.length)If(index>=this.mService.length)
return null;return null;
if(index<0&&-index>this.mService.length) if(index<0&&-index>this.mService.length)
return null;return null;
if(index>=0)return this.mService[index]; if (index>=0) return this.mService[index];
return this.mService[this.mService.length+index]; return this.mService[this.mService.length+index];
}}
public void setService(int index,Service inp){public void setService(int index,Service inp){
if(this.mService==null){If(this.mService==null){
if(index<0){ if(index<0){
this.mService=new Service[1]; this.mService = new Service[1];
this.mService[0]=inp; this.mService[0]=inp;
}else{}else{
this.mService=new Service[index+1]; this.mService = new Service[index+1];
this.mService[index]=inp; this.mService[index]=inp;
}}
}else if(index<0){}else if(index<0){
Service[]newService=new Service[this.mService.length+1]; Service[]newService=new Service[this.mService.length+1];
java.lang.System.arraycopy((Object)mService,0,java.lang.System.arraycopy((Object)mService, 0,
(Object)newService,0,this.mService.length);(Object) newService, 0, this. mService. length);
newService[newService.length-1]=inp;newService[newService.length-1]=inp;
mService=newService; mService = newService;
}else if(index>=this.mService.length){}else if(index>=this.mService.length){
Service[]newService=new Service[index+1]; Service[]newService=new Service[index+1];
java.lang.System.arraycopy((Object)mService,0,java.lang.System.arraycopy((Object)mService, 0,
(Object)newService,0,this.mService.length);(Object) newService, 0, this. mService. length);
newService[index]=inp;newService[index]=inp;
mService=newService; mService = newService;
}else{}else{
this.mService[index]=inp; this.mService[index]=inp;
}}
}}
public void setService(Service[]inp){public void setService(Service[]inp){
this.mService=inp; this.mService = inp;
}}
}}
除了上述JAVA豆之外,还如下所述产生转换代码,用于从JAVA至XML的翻译以及从XML至JAVA的翻译:In addition to the above JAVA beans, conversion code is generated as follows for translation from JAVA to XML and translation from XML to JAVA:
Java to XMLJava to XML
<!DOCTYPE tree SYSTEM″tree.dtd″><! DOCTYPE tree SYSTEM″tree.dtd″>
<tree source=″null″pass-through=″false″><tree source="null" pass-through="false">
<before><before>
<vardef name=″attribute.def″><vardef name="attribute.def">
<element source=″ATTRIBUTE″class=″NAME″type=″5″position=″-2″><element source="ATTRIBUTE" class="NAME" type="5" position="-2">
<parse><parse>
<data class=″java.lang.String″position=″-2″/><data class="java.lang.String" position="-2"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″pcdata.def″><vardef name="pcdata.def">
<element source=″PCDATA″class=″NAME″type=″4″position=″-2″><element source="PCDATA" class="NAME" type="4" position="-2">
<parse><parse>
<data class=″999″type=″6″position=″-2″/><data class="999"type="6"position="-2"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″content.def″><vardef name="content.def">
<element source=″PCDATA″><element source="PCDATA">
<parse><parse>
<data class=″999″type=″6″position=″-2″/><data class="999"type="6"position="-2"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″ServiceSet.var″><vardef name="ServiceSet.var">
<element source=″com.veo.xdk.dev.schema.test.blib.ServiceSet″class=″service.set″<element source="com.veo.xdk.dev.schema.test.blib.ServiceSet" class="service.set"
type=″4″position=″-2″>type="4"position="-2">
<parse><parse>
<callvar name=″Service.var″/><callvar name="Service.var"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″PrototypeService.var″><vardef name="PrototypeService.var">
<element source=″com.veo.xdk.dev.schema.test.blib.PrototypeService″class=<element source = "com.veo.xdk.dev.schema.test.blib.PrototypeService" class =
″prototype.service″type=″4″position=″-2″>"prototype.service" type="4" position="-2">
<parse><parse>
<callvar name=″pcdata.def″parms=″setSource ServiceNameToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceNameToXML setGenerator
service.name″/>service.name"/>
<callvar name=″pcdata.def″parms=″setSource ServiceTermsToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceTermsToXML setGenerator
service.terms″/>service.terms"/>
<callvar name=″pcdata.def″parms=″setSource ServiceLocationToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceLocationToXML setGenerator
service.location″/>service.location"/>
<callvar name=″ServiceOperation.var″/><callvar name="ServiceOperation.var"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″Service.var″><vardef name="Service.var">
<element source=″com.veo.xdk.dev.schema.test.blib.Service″class=″service″type=<element source = "com.veo.xdk.dev.schema.test.blib.Service" class = "service" type =
″8″position=″0″>"8"position="0">
<parse><parse>
<callvar name=″pcdata.def″parms=″setSource ServiceNameToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceNameToXML setGenerator
service.name″/>service.name"/>
<callvar name=″pcdata.def″parms=″setSource ServiceLocationToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceLocationToXML setGenerator
service.location″/>service.location"/>
<callvar name=″ServiceOperation.var″/><callvar name="ServiceOperation.var"/>
<callvar name=″pcdata.def″parms=″setSource ServiceTermsToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceTermsToXML setGenerator
service.terms″/>service.terms"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″ServiceOperation.var″><vardef name="ServiceOperation.var">
<element source=″com.veo.xdk.dev.schema.test.blib.ServiceOperation″class=<element source="com.veo.xdk.dev.schema.test.blib.ServiceOperation"class=
″service.operation″type=″4″position=″-2″>"service.operation"type="4"position="-2">
<parse><parse>
<callvar name=″pcdata.def″parms=″setSource ServiceOperationNameToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceOperationNameToXML setGenerator
service.operation.name″/>service.operation.name"/>
<callvar name=″pcdata.def″parms=″setSource ServiceOperationLocationToXML<callvar name="pcdata.def" parms="setSource ServiceOperationLocationToXML
setGenerator service.operation.location″/>setGenerator service.operation.location"/>
<callvar name=″pcdata.def″parms=″setSource ServiceOperationInputToXML setGenerator<callvar name="pcdata.def" parms="setSource ServiceOperationInputToXML setGenerator
service.operation.input″/>service.operation.input"/>
<callvar name=″pcdata.def″parms=″setSource ServiceOperationOutputToXML<callvar name="pcdata.def" parms="setSource ServiceOperationOutputToXML
setGenerator service.operation.output″/>setGenerator service.operation.output"/>
</parse></parse>
</element></element>
</vardef></vardef>
</before></before>
<parse><parse>
<callvar name=″ServiceSet.var″/><callvar name="ServiceSet.var"/>
<callvar name=″PrototypeService.var″/><callvar name="PrototypeService.var"/>
<callvar name=″Service.var″/><callvar name="Service.var"/>
<callvar name=″ServiceOperation.var″/><callvar name="ServiceOperation.var"/>
</parse></parse>
</tree></tree>
XML to JavaXML to Java
<!DOCTYPE tree SYSTEM″tree.dtd″><! DOCTYPE tree SYSTEM″tree.dtd″>
<tree source=″null″pass-through=″false″><tree source="null" pass-through="false">
<before><before>
<vardef name=″business.var″><vardef name="business.var">
<element source=″business″<element source="business"
class=″com.veo.xdk.dev.schema.test.blib.Business″class="com.veo.xdk.dev.schema.test.blib.Business"
type=″7″setter=″setBusiness″>type = "7" setter = "setBusiness">
<before><before>
<onattribute name=″business.number″><onattribute name="business.number">
<actions><actions>
<callmeth name=″businessNumberFromXML″><callmeth name="businessNumberFromXML">
<parms><parms>
<getattr name=″business.number″/><getattr name="business.number"/>
</parms></parms>
</callmeth></callmeth>
</actions></actions>
</onattribute></onattribute>
</before></before>
<parse><parse>
<callvar name=″party.name.var″parms=″setPosition-1″/><callvar name="party.name.var"parms="setPosition-1"/>
<callvar name=″address.set.var″/><callvar name="address.set.var"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″party.name.var″><vardef name="party.name.var">
<element source=″party.name″setter=″partyNameFromXML″position=″-1″class=<element source = "party.name" setter = "partyNameFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″city.var″><vardef name="city.var">
<element source=″city″setter=″cityFromXML″position=″-1″class=<element source = "city" setter = "cityFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″internet.var″><vardef name="internet.var">
<element source=″internet″setter=″internetFromXML″position=″-1″class=<element source = "internet" setter = "internetFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″country.var″><vardef name="country.var">
<element source=″country″setter=″countryFromXML″position=″-1″class=<element source = "country" setter = "countryFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″state.var″><vardef name="state.var">
<element source=″state″setter=″stateFromXML″position=″-1″class=<element source = "state" setter = "stateFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″email.var″><vardef name="email.var">
<element source=″email″setter=″emailFromXML″position=″-1″class=<element source = "email" setter = "emailFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″address.physical.var″><vardef name="address.physical.var">
<element source=″address.physical″<element source="address.physical"
class=″com.veo.xdk.dev.schema.test.blib.AddressPhysical″class="com.veo.xdk.dev.schema.test.blib.AddressPhysical"
type=″7″setter=″setAddressPhysical″>type = "7" setter = "setAddressPhysical">
<before><before>
</before></before>
<parse><parse>
<callvar name=″street.var″parms=″setPosition -1″/><callvar name="street.var" parms="setPosition -1"/>
<callvar name=″city.var″parms =″setPosition -1″/><callvar name = "city.var" parms = "setPosition -1"/>
<callvar name=″state.var″parms=″setPosition -1″/><callvar name="state.var" parms="setPosition -1"/>
<callvar name=″postcode.var″parms=″setPosition -1″/><callvar name="postcode.var" parms="setPosition -1"/>
<callvar name=″country.var″parms=″setPosition -1″/><callvar name="country.var" parms="setPosition -1"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″telephone.var″><vardef name="telephone.var">
<element source=″telephone″setter=″telephoneFromXML″position=″-1″class=<element source = "telephone" setter = "telephoneFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″person.var″><vardef name="person.var">
<element source=″person″<element source="person"
class=″com.veo.xdk.dev.schema.test.blib.Person″class="com.veo.xdk.dev.schema.test.blib.Person"
type=″7″setter=″setPerson″>type = "7" setter = "setPerson">
<before><before>
<onattribute name=″SSN″><onattribute name="SSN">
<actions><actions>
<callmeth name=″sSNFromXML″><callmeth name="sSNFromXML">
<parms><parms>
<getattr name=″SSN″/><getattr name="SSN"/>
</parms></parms>
</callmeth></callmeth>
</actions></actions>
</onattribute></onattribute>
</before></before>
<parse><parse>
<callvar name=″party.name.var″parms=″setPosition -1″/><callvar name="party.name.var"parms="setPosition -1"/>
<callvar name=″address.set.var″/><callvar name="address.set.var"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″fax.var″><vardef name="fax.var">
<element source=″fax″setter=″faxFromXML″position=″-1″class=″java.lang.String″><element source = "fax" setter = "faxFromXML" position = "-1" class = "java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″street.var″><vardef name="street.var">
<element source=″street″setter=″streetFromXML″position=″-1″class=<element source = "street" setter = "streetFromXML" position = "-1" class =
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″address.set.var″><vardef name="address.set.var">
<element source=″address.set″<element source="address.set"
class=″com.veo.xdk.dev.schema.test.blib.AddressSet″class="com.veo.xdk.dev.schema.test.blib.AddressSet"
type=″7″setter=″setAddressSet″>type = "7" setter = "setAddressSet">
<before><before>
</before></before>
<parse><parse>
<callvar name=″address.physical.var″/><callvar name="address.physical.var"/>
<callvar name=″telephone.var″ parms=″setPosition -1″/><callvar name="telephone.var" parms="setPosition -1"/>
<callvar name=″fax.var″parms=″setPosition -1″/><callvar name="fax.var"parms="setPosition -1"/>
<callvar name=″email.var″parms=″setPosition -1″/><callvar name="email.var" parms="setPosition -1"/>
<callvar name=″internet.var″parms=″setPosition -1″/><callvar name="internet.var" parms="setPosition -1"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name= ″postcode.var″><vardef name="postcode.var">
<element source=″postcode″setter=″postcodeFromXML″position=″-1″class<element source = "postcode" setter = "postcodeFromXML" position = "-1" class
″java.lang.String″>"java.lang.String">
<parse><parse>
<data class=″java.lang.String″position=″0″/><data class="java.lang.String" position="0"/>
</parse></parse>
</element></element>
</vardef></vardef>
<vardef name=″market.participant.var″><vardef name="market.participant.var">
<element source=″market.participant″<element source="market.participant"
class=″com.veo.xdk.dev.schema.test.blib.MarketParticipant″class="com.veo.xdk.dev.schema.test.blib.MarketParticipant"
type=″7″position=″0″>type="7"position="0">
<before><before>
</before></before>
<parse><parse>
<callvar name=″business.var″/><callvar name="business.var"/>
<callvar name=″person.var″/><callvar name="person.var"/>
</parse></parse>
</element></element>
</vardef></vardef>
</before></before>
<parse><parse>
<callvar name=″business.var″/><callvar name="business.var"/>
<callvar name=″party.name.var″/><callvar name="party.name.var"/>
<callvar name=″city.var″/><callvar name="city.var"/>
<callvar name=″internet.var″/><callvar name="internet.var"/>
<callvar name=″country.var″/><callvar name="country.var"/>
<callvar name=″state.var″/><callvar name="state.var"/>
<callvar name=″email.var″/><callvar name="email.var"/>
<callvar name=″address.physical.var″/><callvar name="address.physical.var"/>
<callvar name=″telephone.var″/><callvar name="telephone.var"/>
<callvar name=″person.var″/><callvar name="person.var"/>
<callvar name=″fax.var″/><callvar name="fax.var"/>
<callvar name=″street.var″/><callvar name="street.var"/>
<callvar name=″address.set.var″/><callvar name="address.set.var"/>
<callvar name=″postcode.var″/><callvar name="postcode.var"/>
<callvar name=″market.participant.var″/><callvar name="market.participant.var"/>
</parse></parse>
</tree></tree>
Makefiles:Makefiles:
##
# this makefile was generated by bic version 0.0. 05/02/1998# this makefile was generated by bic version 0.0. 05/02/1998
##
##
##
##
# get the package name from the package argument passed to SchemaGen# get the package name from the package argument passed to SchemaGen
PACKAGE_NAME=com/veo/xdk/dev/schema/test/blibPACKAGE_NAME=com/veo/xdk/dev/schema/test/blib
JAVA_SOURCES += \JAVA_SOURCES += \
MarketParticipant.java\MarketParticipant.java\
Business.java\Business.java\
Person.java\Person.java\
Party.java\Party.java\
AddressPhysical.java\AddressPhysical.java\
AddressSet.java\AddressSet.java\
MAKEFILE_MASTER_DIR=xxxMAKEFILE_MASTER_DIR=xxx
include $(MAKEFILE_MASTER_DIR)/Makefile.masterinclude $(MAKEFILE_MASTER_DIR)/Makefile.master
all::$(JAVA_CLASSES)all::$(JAVA_CLASSES)
##
# this makefile was generated by bic version 0.0. 05/02/1998# this makefile was generated by bic version 0.0. 05/02/1998
##
##
##
##
# get the package name from the package argument passed to SchemaGen# get the package name from the package argument passed to SchemaGen
PACKAGE_NAME=com/veo/xdk/dev/schema/test/blibPACKAGE_NAME=com/veo/xdk/dev/schema/test/blib
JAVA_SOURCES += \JAVA_SOURCES += \
ServiceSet.java\ServiceSet.java\
PrototypeService.java\PrototypeService.java\
Service.java\Service.java\
ServiceOperation.java\ServiceOperation.java\
MAKEFILE_MASTER_DIR=xxxMAKEFILE_MASTER_DIR=xxx
include $(MAKEFILE_MASTER_DIR)/Makefile.masterinclude $(MAKEFILE_MASTER_DIR)/Makefile.master
all::$(JAVA_CLASSES)all::$(JAVA_CLASSES)
最后,下面是作为一个例子,根据上述模型在运行时间生成的XML文档实例:Finally, here is an instance of an XML document generated at runtime according to the above model as an example:
<!DOCTYPE market.participant SYSTEM″market.participant.dtd″><! DOCTYPE market.participant SYSTEM″market.participant.dtd″>
<market.participant><market. participant>
<business business.number=″1234567890″><business business.number="1234567890">
<party.name>IBM</party.name><party.name>IBM</party.name>
<address.set><address.set>
<address.physical><address.physical>
<street>1 IBM Way</street><street>1 IBM Way</street>
<city>Palo Alto</city><city>Palo Alto</city>
<state>CA</state><state>CA</state>
<postcode>94304</postcode><postcode>94304</postcode>
<country>USA</country><country>USA</country>
</address.physical></address.physical>
........
<telephone>123 456-7890</telephone><telephone>123 456-7890</telephone>
<fax>123 456 0987</fax><fax>123 456 0987</fax>
<email>ibmec@ibm.com</email><email>ibmec@ibm.com</email>
</address.set></address.set>
</business></business>
</market.participant></market.participant>
<!DOCTYPE service SYSTEM ″service.dtd″><! DOCTYPE service SYSTEM ″service.dtd″>
<service.set><service.set>
<service><service>
<service.name>Order Service</service.name><service.name>Order Service</service.name>
<service.location>www.ibm.com/order</service.location><service.location>www.ibm.com/order</service.location>
<service.operation><service. operation>
<service.operation.name>Submit Order</service.operation.name><service.operation.name>Submit Order</service.operation.name>
<service.operation.location>www.ibm.com/order/submit</service.location><service.operation.location>www.ibm.com/order/submit</service.location>
<service.operation.input>urn:x-<service.operation.input>urn:x-
ibm:services:order:operations:po.dtd</service.operation.input>ibm:services:order:operations:po.dtd</service.operation.input>
<service.operation.output>urn:x-<service.operation.output>urn:x-
ibm:services:order:operations:poack.dtd</service.operation.output>ibm:services:order:operations:poack.dtd</service.operation.output>
</service.operation></service.operation>
<service.operation><service. operation>
<service.operation.name>Track Order</service.operation.name><service.operation.name>Track Order</service.operation.name>
<service.operation.location>www.ibm.com/order/track</service.location><service.operation.location>www.ibm.com/order/track</service.location>
<service.operation.input>urn:x-<service.operation.input>urn:x-
ibm:services:order:operations:track.irequest.dtd</service.operation.input>ibm:services:order:operations:track.irequest.dtd</service.operation.input>
<service.operation.output>urn:x-<service.operation.output>urn:x-
ibm:services:order:operations:track.iresponse.dtd</service.operation.output>ibm:services:order:operations:track.iresponse.dtd</service.operation.output>
</service.operation></service.operation>
</service></service>
</service.set></service.set>
利用各种工具以及BID组合应用程序(提供拖曳,丢弃和形成编辑用户接口),开发器能够建立商业接口定义,并且以XML文档形式产生很好形成的、有效的商业接口定义。因此,例举性的运行时间实例是由Ingram Micro使用的、用于IBM定购服务以及从IBM定购膝上型计算机的其它定购服务的商业接口定义。(申请人与IBM或Ingram Micro之间没有关系)。利用这些过程,用户能够建立一种系统允许用根据本发明定义的文档对商业接口编程。Using various tools as well as the BID Composite application (providing a drag, drop and form editing user interface), the developer can create business interface definitions and produce well-formed, valid business interface definitions in the form of XML documents. Thus, the exemplary runtime instance is defined by the business interface used by Ingram Micro for the IBM order service and other order services for ordering laptop computers from IBM. (Applicant has no relationship with IBM or Ingram Micro). Using these procedures, a user can build a system that allows business interfaces to be programmed with documents defined according to the invention.
通过以下对购货定单处理的说明,可以进一步理解本发明CBL和BID处理器在XML/JAVA环境下的作用。Through the following description of purchase order processing, the functions of the CBL and BID processors of the present invention in the XML/JAVA environment can be further understood.
公司A用一个可见的编程环境定义其购货定单文档类型,其中所述编程环境包含一个由CBL DTD和模块组成的库,而CBL DTD和模块都是用公用商业语言元素定义的,因此它们包括数据类型和其它解释信息。公司A的PO可以就提供CBL库的更一般的“事务文档”范围仅仅包含最小的客户化,或者它可以完全由地址、时期和时间、货币等CBL模块来构造。Company A defines its purchase order document type with a visible programming environment that includes a library of CBL DTDs and modules defined in common business language elements, so they include Data types and other explanatory information. Company A's PO may contain only minimal customization in terms of providing the more general "transaction document" scope of the CBL library, or it may be constructed entirely from address, period and time, currency, etc. CBL modules.
用于一般“事务文档”规范说明的文档(诸如上述transact.dtd)代表了由模块建立的并且与其它CBL DTD互链的CBL规范说明的方式。Documents for general "transaction document" specifications (such as transact.dtd above) represent the way CBL specifications are built by modules and interlinked with other CBL DTDs.
编译程序取得购货定单定义,并且生成几个不同的目标形式。所有这些目标形式可以通过原始规范说明的“树到树”转换来导出。该例子最重要的地方是:The compiler takes the purchase order definition and generates several different object forms. All of these target forms can be derived by a "tree-to-tree" transformation of the original specification. The most important parts of this example are:
(a)用于购货定单的XML DTD(a) XML DTD for purchase order
(b)JAVA豆,它封装购货定单的数据结构(建立JAVA类、形参、数据类型、方法和例外的结构,对应于购货定单模式定义中的信息)。(b) JAVA bean, which encapsulates the data structure of the purchase order (establishes the structure of JAVA classes, formal parameters, data types, methods and exceptions, corresponding to the information in the purchase order schema definition).
(c)“引渡”程序,它将符合购货定单DTD的购货定单转换成购货定单JAVA豆,或者将它们加载入数据库,或者建立HTML(或者XSL格式页),用于将购货定单显示在浏览器中。(c) "Extradition" program, which converts Purchase Orders conforming to the Purchase Order DTD into Purchase Order JAVA beans, or loads them into a database, or creates HTML (or XSL formatted pages) for converting Purchase Orders displayed in the browser.
(d)“非引渡”程序,它从购货定单JAVA豆中抽取数据值,并且将它们转换成与购货定单DTD符合的XML文档。(d) A "non-extradition" program that extracts data values from the Purchase Order JAVA bean and converts them into an XML document that conforms to the Purchase Order DTD.
现在返回脚本。购买应用程序产生一购货定单,该购货定单符合为接受购货定单的供应商指定为服务接口的DTD。Now back to the script. The purchasing application generates a purchase order conforming to the DTD specified as the service interface for the supplier accepting the purchase order.
语法分析器用购货定单DTD将购货定单实例分解成有关其所含元素和属性值的信息流。然后,通过用JAVA代码包裹这些“特性组”,将它们转换成对应的JAVA事件对象。事实上,这一转换将标记XML文档的片段视作定制编程语言中的指令,其语法由DTD定义。现在可以用编译程序生成的引渡应用程序处理这些JAVA事件,以便“加载”JAVA豆数据结构。The purchase order DTD is used by the parser to decompose the purchase order instance into a stream of information about the elements and attribute values it contains. Then, by wrapping these "property groups" with JAVA code, they are converted into corresponding JAVA event objects. In effect, this transformation treats fragments of markup XML documents as instructions in a custom programming language whose syntax is defined by a DTD. These JAVA events can now be handled with the extradition application generated by the compiler to "load" the JAVA bean data structure.
将XML文档转换成一组JAVA应用程序的事件以便处理,这不象将语法分析器输出作为内部数据结构保持的正常分析模型,并且处理直到分析结束后才开始。响应BID定义的、基于事件的处理是使处理器具有更多功能的关键,因为它允许一发出第一事件就开始处理进发的文档应用程序。Converting an XML document into a set of JAVA application events for processing is unlike the normal parsing model where parser output is maintained as an internal data structure and processing does not start until after parsing is complete. Responding to the event-based processing defined by the BID is the key to making the processor more functional, as it allows an incoming document application to begin processing as soon as the first event is emitted.
用于“收听”各种类型事件的JAVA程序由那些事件的模式定义生成。这些收听器是用来完成与CBL中XML定义相关的商业逻辑的程序,例如与“地址”元素相关的可以是通过检查数据库而使邮政编码有效的代码。这些收听器通过向文档路由器登记来 “订购”事件,其中文档路由器将相关的事件引导给所有对它们感兴趣的用户。JAVA programs for "listening" to various types of events are generated from the schema definitions for those events. These listeners are programs used to implement business logic associated with the XML definitions in the CBL, for example associated with an "address" element could be a code to validate a postal code by checking a database. These listeners "subscribe" to events by registering with the document router, which directs relevant events to all users interested in them.
这种公布和预订体系结构表示可以增加新的收听器程序,而不用知道或不影响现有的收听器程序。每个收听器都有一个队列,路由器将其事件引入该队列,并且该队列可使多个收听器以其自身的步调并行处理事件。This publish and subscribe architecture means that new listener programs can be added without knowing or affecting existing listener programs. Each listener has a queue into which the router feeds its events, and this queue enables multiple listeners to process events in parallel at their own pace.
对于这里例举的购货定单,可以存在具有以下用途的收听器:For the purchase order example exemplified here, there could be listeners with the following purposes:
●购货定单,它可以与定单输入程序相连,A purchase order, which can be linked to an order entry program,
●产品描述,它可以检查存货情况,● product description, it is possible to check stock availability,
●地址信息,它可以检查Fed Ex或者其它邮递服务,● Address information, which can be checked for Fed Ex or other postal services,
●买方信息,它可以检查定购历史(关于信用度,或者提升,或者根据已知客户是谁来进行类似的处理)。• Buyer information, which can check order history (for credit, or promotion, or similar based on who the customer is known to be).
可以通过对原始收听器的配置创建复杂的收听器(例如,购货定单收听器可以包含和调用这里的这些收听器,或者它们可以被自身调用)。Complex listeners can be created through configuration of primitive listeners (for example, a purchase order listener can contain and call these listeners here, or they can be called by themselves).
图11示出了图1网络中的市场制造者网点。市场制造者网点包括图3系统的基本结构,包括网络接口1101,文档语法分析器1102、文档至宿主和宿主至文档的翻译器1103,以及前端1104,在本例中称之为路由器。本例中的市场制造者模块1105包括一组商业接口定义、或者其它足以为市场中的参与者支持市场制造者功能的标识符、CBL资源库,以及编译程序,所有这些都为市场参与者服务。路由器1104包括参与者登记和文档过滤器,它们对应于翻译器输出处生成的事件并由语法分析器根据参与者登记和收听器之间的元素和属性过滤器来路由选择输入文档,将它们提供给XML事件生成器。因此,市场中的某些参与者可以登记接收满足预定参数的文档。例如,可以用下述输入文档在路由器1104处过滤文档,所述输入文档根据特定DTD,并且包括诸如产品预购数目大于阈值,或者预购文档请求的最高价格等属性。然后,只将那些在路由器1104处与参与者登记中所登记的信息相一致的文档传送给登记过的参与者。FIG. 11 shows market maker sites in the network of FIG. 1 . The market maker site includes the basic structure of the system in Figure 3, including a
路由器1104还可以提供本地主服务1105和1106,因此起市场中参与者以及市场制造者的作用。一般来说,遍历路由器1104接收到的文档,以便确定这些文档应送达的目的地,这里如果必须可以再次通过翻译器1103传回,并且传出网络接口1101,到达各自的目的地。
市场制造者是一个服务器,它将一组内部的和外部的商业服务捆绑在一起,以产生一个虚似的企业或交易团体。服务器通过将产品数据请求切换至目录服务器,或者将购货定单发送给ERP系统,来对输入文档进行语法分析,并且调用适当的服务。服务器还处理翻译任务,将来自公司XML文档的信息映像到交易当事方所用的文档格式以及其传统系统所要求的数据格式。A market maker is a server that bundles together a set of internal and external business services to create a virtual enterprise or trading community. The server parses the input document and invokes the appropriate service by switching product data requests to a catalog server, or sending a purchase order to an ERP system. The server also handles translation tasks, mapping information from the company's XML documents to the document formats used by the parties to the transaction as well as the data formats required by their legacy systems.
对于上述服务定义,当公司发出一购货定单时,服务器中的XML语法分析器用购货定单DTD将购货定单实例转换成信息事件流。然后,将这些事件传送给这样的应用程序,这些应用程序被编制成处理具有某个类型的事件;在一些情况下,通过互联网将信息完整地发送给不同的企业。在购货定单的例子中,若干应用程序可以对来自语法分析器的信息起作用:For the above service definition, when the company issues a purchase order, the XML parser in the server converts the purchase order instance into a stream of information events using the purchase order DTD. These events are then passed to applications programmed to handle events of a certain type; in some cases, the information is sent in its entirety to various businesses over the Internet. In the purchase order example, several applications can act on the information from the parser:
●定单输入程序将购货定单处理成一个完整的消息;●The order entry program processes the purchase order into a complete message;
●ERP系统检查购货定单中所述产品的存货;● The ERP system checks the stock of the product stated in the purchase order;
●客户数据库验证或更新客户的地址;●Customer database to verify or update the customer's address;
●运输公司使用地址信息安排递送的日程;●The shipping company uses the address information to schedule the delivery;
●银行用信用卡信息给交易授权。●The bank authorizes the transaction with the credit card information.
交易当事方只需要就他们交换的商业文档的结构、内容和序列达成一致,不需要对API的细节达成一致。如何处理文档以及产生什么动作是严格由提供服务的企业来决定的。这提高了从系统级到企业级的集成。这使得企业表现出与其它生意伙伴的清楚且稳定的接口,尽管其内部技术实施、组织或处理中存在变化。Parties to a transaction only need to agree on the structure, content and sequence of the business documents they exchange, not on the details of the API. How documents are processed and what actions are taken is strictly up to the business providing the service. This improves integration from the system level to the enterprise level. This enables the enterprise to present a clear and stable interface with other business partners despite changes in its internal technical implementation, organization or processing.
图12、13和14示出了在图11系统中,在市场制造者网点处执行的过程。在图12中,在网络接口处,接收来自原发参与者网点的输入文档(步骤1200)。对文档进行语法分析(步骤1201)。将文档翻译成宿主的格式,例如从XML至JAVA(步骤1202)。然后将宿主格式化的事件和对象传送给路由器服务(步骤1203)。识别被登记用来根据文档类型和文档内容来接收文档的服务(步骤1204)。将文档或文档的一部分传送给被识别的服务(步骤1205)。响应于文档内容进行服务(步骤1206)。产生服务的输出数据(步骤1207)。将输出转换成文档格式,例如从JAVA格式转换成XML格式(步骤1208)。最后,将输出文档发送给参与者网点(步骤1209)。Figures 12, 13 and 14 illustrate the processes performed at the market maker site in the system of Figure 11 . In FIG. 12, at a network interface, an input document is received from an originating participant site (step 1200). Perform syntax analysis on the document (step 1201). The document is translated into the host's format, eg, from XML to JAVA (step 1202). Host-formatted events and objects are then passed to the router service (step 1203). Services registered to receive documents based on document type and document content are identified (step 1204). The document or a portion of the document is transmitted to the identified service (step 1205). Serving is performed in response to document content (step 1206). Generate output data of the service (step 1207). The output is converted into a document format, such as from JAVA format to XML format (step 1208). Finally, the output document is sent to the participant node (step 1209).
登记服务是一种由路由器管理的功能。因此,如图13所示,在网络接口处接受市场参与者文档(步骤1300)。将市场参与者文档存储在市场制造者网点的商业接口定义资源库(步骤1301)中。另外,对文档进行语法分析(步骤1302)。将分析过的文档翻译成宿主的格式(步骤1303)。接下来,将文档传送给路由器服务(步骤1304)。路由器服务包括一个收听器,它根据文档类型和内容,将登记服务识别为文档的目的地(步骤1305)。将文档或文档的元素传送给登记服务(1306)。在登记服务中,根据商业接口定义检索所需的服务规范说明(步骤1307)。如果在步骤1308集合服务规范说明,那么根据商业接口定义和服务规范说明设定路由器服务过滤器(步骤1309)。产生登记确认数据(步骤1310)。登记确认数据转换成文档格式(步骤1311)。最后,将确认文档发送给参与者网点,向参与者表示已向市场制造者作了成功的登记(步骤1312)。Registry service is a function managed by the router. Accordingly, as shown in FIG. 13, a market participant document is accepted at the web interface (step 1300). Store the market participant documents in the business interface definition resource library of the market maker network (step 1301). In addition, the document is parsed (step 1302). The parsed document is translated into the host's format (step 1303). Next, the document is transmitted to the router service (step 1304). The router service includes a listener that identifies the registry service as the destination of the document based on the document type and content (step 1305). The document or elements of the document are transmitted to the registration service (1306). In the registration service, the required service specification is retrieved according to the business interface definition (step 1307). If the service specification is assembled in
图14例示了步骤1307中集合所需服务规范说明的过程。该过程的开始是,对市场参与者所支持的服务商业接口定义进行定位(步骤1400)。例如,通过电子邮件交易或者对资源库网点进行网络访问,来检索服务定义(步骤1401)。将服务规范说明存储在BID资源库中(步骤1402)。对服务商业接口定义文档进行语法分析(步骤1403)。将分析过的文档翻译成主格式(步骤1404)。将主对象传送给路由器服务(步骤1405)。根据文档类型和内容识别登记服务(步骤1406)。最后,根据图13的过程,将服务商业接口定义文档中的信息传送给登记服务(步骤1407),供使用。FIG. 14 illustrates the process of assembling required service specifications in
图15示出了处理器、构件以及根据本发明在市场制造者网点处处理输入数据的序列。市场制造者网点包括在网络接口处的通信代理1500。通信代理与XML语法分析器1501相连,而XML语法分析器将事件提供给XML处理器1502。XML处理器将事件提供给文档路由器。文档路由器提供一文档服务1504,而文档服务1504又提供一个接口,用于将接收到的文档提供给主系统中的企业解答软件1505。通信代理1500是互联网接口,它包括支持诸如HTTP、SMTP、FTP或其它协议的适当协议堆栈。因此,输入数据可以按XML语法、ASCII数据语法或其它适合特定通信信道的语法而到来。将所有以非XML语法接收到的文档翻译成XML,并且传送给XML语法分析器。用翻译表1506支持从非XML形式至XML形式的翻译。Figure 15 shows a sequence of processors, components and processing of input data at a market maker site according to the invention. The market maker site includes a
将转换后的文档提供给语法分析器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对登记服务进行管理,并且保持文档一致性。The converted document is provided to the
文档服务用任何专用API或者用诸如CORBA/COM接口或其它体系结构等更普通的形式,与后端系统通信。The document service communicates with the backend system using any proprietary API or in a more general form such as a CORBA/COM interface or other architecture.
图16提供了本发明市场制造者和市场参与者结构的启发图。因此,如图16所示,可以有逻辑地组织本发明的电子商务市场。在组织的顶部,建立市场制造者网点1600。市场制造者网点包括用于建立市场1601的资源。这类资源包括市场登记服务等。企业1602通过公布商业接口定义在市场1601中登记。商业接口定义定义了企业将参与的商务交易的服务1603。事务1604和服务1603用文档1605定义输入和输出,并且划定了交易中参与者之间的贸易关系。文档包括内容1606,而内容1606载有每宗交易的参与者。市场参与者和市场制造者处理内容所用的方式完全独立于依照本发明建立的基于文档的电子商务网。总的来说,提供了一种稳健的、规模可变的、直观的结构,它能够提供通信网上的电子商务。Figure 16 provides a heuristic diagram of the market maker and market participant structure of the present invention. Therefore, as shown in FIG. 16, the electronic commerce market of the present invention can be logically organized. On top of the organization,
因此,本发明在一例举的系统中提供了一种基于XML处理器的平台,并且将XML文档用作松散连接的商业系统之间的接口。文档在企业之间传递,并且在进入公司商业系统之前由参与者网点处理。因此,平台能够使电子商务应用程序在企业之间工作,每个商业系统通过指定一组公用的商业文档和形式,用不同的内部商务平台、过程和语义进行工作。Accordingly, the present invention provides an XML processor-based platform in an exemplary system and uses XML documents as an interface between loosely coupled business systems. Documents are passed between businesses and processed by participant outlets before entering the company's business systems. Thus, the platform enables e-business applications to work across enterprises, with each business system working with different internal business platforms, processes, and semantics by specifying a common set of business documents and forms.
依照本发明,通过互连商业系统和服务建立了虚拟的企业,并且主要用企业接受并产生的文档(XML编码的)对虚拟企业定义:According to the present invention, a virtual enterprise is established by interconnecting business systems and services, and the virtual enterprise is mainly defined by documents (XML encoded) received and generated by the enterprise:
●“如果你发给我一个目录请求,我将发给你一个目录”● "If you send me a catalog request, I will send you a catalog"
●“如果你发给我一份购货定单,并且我可以接受,那么我将发给你发票”。● "If you send me a purchase order, and I can accept it, then I will send you an invoice."
为了说明和描述的目的,提供了上述对本发明较佳实施例的描述。并不试图将本发明穷尽或限制到所揭示的精确形式。显然,对于本领域的技术人员来说,可以进行许多变化和改变。本发明的范围由以下权利要求书及其等效权利来限制。The foregoing description of the preferred embodiment of the invention has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise forms disclosed. Obviously, many variations and modifications will occur to those skilled in the art. The scope of the invention is defined by the following claims and their equivalents.
Claims (118)
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/173,847 | 1998-10-16 | ||
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,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,858 | 1998-10-16 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100927144A Division CN101266666B (en) | 1998-10-16 | 1999-10-08 | Document for commerce in trading partner network and interface definition based on same document |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1291311A CN1291311A (en) | 2001-04-11 |
CN100388292C true CN100388292C (en) | 2008-05-14 |
Family
ID=27390345
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB998029823A Expired - Lifetime CN100388292C (en) | 1998-10-16 | 1999-10-08 | Business document in trading partner network and interface definition based on the document |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1038251A2 (en) |
JP (2) | JP4712191B2 (en) |
CN (1) | CN100388292C (en) |
AU (1) | AU6420999A (en) |
WO (1) | WO2000023925A2 (en) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6647373B1 (en) | 1998-12-24 | 2003-11-11 | John Carlton-Foss | Method and system for processing and transmitting electronic reverse auction information |
US7124356B1 (en) * | 1999-12-03 | 2006-10-17 | Koninklijke Philips Electronics N.V. | Methods for initiating activity in intelligent devices connected to an in home digital network using extensible markup language (XML) for information exchange and systems therefor |
US7146422B1 (en) * | 2000-05-01 | 2006-12-05 | Intel Corporation | Method and apparatus for validating documents based on a validation template |
GB0011426D0 (en) * | 2000-05-11 | 2000-06-28 | Charteris Limited | A method for transforming documents written in different XML-based languages |
US7000230B1 (en) * | 2000-06-21 | 2006-02-14 | Microsoft Corporation | Network-based software extensions |
JP4965015B2 (en) * | 2000-06-27 | 2012-07-04 | エヌ・ティ・ティ・コミュニケーションズ株式会社 | Data exchange system |
US7099958B2 (en) | 2000-08-15 | 2006-08-29 | Fujitsu Limited | System for designing and performing web application |
KR20020033380A (en) * | 2000-10-31 | 2002-05-06 | 조미원 | Apparatus for handling XML/EDI of B2B Operation and Method thereof |
KR100747556B1 (en) * | 2000-11-22 | 2007-08-08 | 엘지전자 주식회사 | Information communication infrastructure system and its master operation method |
US6993506B2 (en) | 2000-12-05 | 2006-01-31 | Jgr Acquisition, Inc. | Method and device utilizing polymorphic data in e-commerce |
KR20020063434A (en) * | 2001-01-29 | 2002-08-03 | 이상훈 | Method for interfacing web user using xml |
US7047488B2 (en) * | 2002-07-19 | 2006-05-16 | Open Invention Network | Registry driven interoperability and exchange of documents |
US20080313282A1 (en) | 2002-09-10 | 2008-12-18 | Warila Bruce W | User interface, operating system and architecture |
CA2433957C (en) | 2003-06-27 | 2011-05-10 | Ibm Canada Limited - Ibm Canada Limitee | Referential interface to enable commercial interaction between entities |
US7673054B2 (en) * | 2003-07-28 | 2010-03-02 | Sap Ag. | Grid manageable application process management scheme |
US7574707B2 (en) | 2003-07-28 | 2009-08-11 | Sap Ag | Install-run-remove mechanism |
US7631069B2 (en) | 2003-07-28 | 2009-12-08 | Sap Ag | Maintainable grid managers |
US7703029B2 (en) | 2003-07-28 | 2010-04-20 | Sap Ag | Grid browser component |
US7594015B2 (en) | 2003-07-28 | 2009-09-22 | Sap Ag | Grid organization |
US7810090B2 (en) | 2003-12-17 | 2010-10-05 | Sap Ag | Grid compute node software application deployment |
US7793290B2 (en) | 2004-12-20 | 2010-09-07 | Sap Ag | Grip application acceleration by executing grid application based on application usage history prior to user request for application execution |
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 |
US8996165B2 (en) | 2008-10-21 | 2015-03-31 | Intouch Technologies, Inc. | Telepresence robot with a camera boom |
US9138891B2 (en) | 2008-11-25 | 2015-09-22 | Intouch Technologies, Inc. | Server connectivity control for tele-presence robot |
US8463435B2 (en) | 2008-11-25 | 2013-06-11 | Intouch Technologies, Inc. | Server connectivity control for tele-presence robot |
US11399153B2 (en) | 2009-08-26 | 2022-07-26 | Teladoc Health, Inc. | Portable telepresence apparatus |
US9323736B2 (en) * | 2012-10-05 | 2016-04-26 | Successfactors, Inc. | Natural language metric condition alerts generation |
HK1253384A1 (en) | 2015-12-03 | 2019-06-14 | 株式会社明治 | Nutritional composition |
JP6691072B2 (en) | 2017-04-05 | 2020-04-28 | 矢崎総業株式会社 | connector |
CN111694561B (en) * | 2020-06-10 | 2024-10-25 | 中国建设银行股份有限公司 | Interface management method, device, equipment and storage medium |
JP7315253B2 (en) * | 2021-09-29 | 2023-07-26 | 株式会社スカイディスク | System, server and method |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998034179A1 (en) * | 1997-01-31 | 1998-08-06 | Time Base Pty. Limited | A system for electronic publishing |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ID23434A (en) * | 1997-01-24 | 2000-04-20 | Extricity Software Inc | SYSTEM AND METHOD FOR CREATING AND MAINTAINING BUSINESS CROSS PROCESSES |
US6810429B1 (en) * | 2000-02-03 | 2004-10-26 | Mitsubishi Electric Research Laboratories, Inc. | Enterprise integration system |
-
1999
- 1999-10-08 AU AU64209/99A patent/AU6420999A/en not_active Abandoned
- 1999-10-08 JP JP2000577598A patent/JP4712191B2/en not_active Expired - Fee Related
- 1999-10-08 WO PCT/US1999/023426 patent/WO2000023925A2/en active Application Filing
- 1999-10-08 CN CNB998029823A patent/CN100388292C/en not_active Expired - Lifetime
- 1999-10-08 EP EP99951857A patent/EP1038251A2/en not_active Ceased
-
2007
- 2007-10-03 JP JP2007260401A patent/JP4500842B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998034179A1 (en) * | 1997-01-31 | 1998-08-06 | Time Base Pty. Limited | A system for electronic publishing |
Also Published As
Publication number | Publication date |
---|---|
CN1291311A (en) | 2001-04-11 |
WO2000023925A2 (en) | 2000-04-27 |
EP1038251A2 (en) | 2000-09-27 |
WO2000023925A3 (en) | 2000-07-20 |
JP2008084328A (en) | 2008-04-10 |
JP2002528797A (en) | 2002-09-03 |
JP4712191B2 (en) | 2011-06-29 |
AU6420999A (en) | 2000-05-08 |
JP4500842B2 (en) | 2010-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101266666B (en) | Document for commerce in trading partner network and interface definition based on same document | |
CN100388292C (en) | Business document in trading partner network and interface definition based on the document | |
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 | |
JP2008084328A5 (en) | ||
Glushko et al. | An XML Framework for Agent-based E-commerce | |
US7634726B2 (en) | Technique for automated e-business services | |
Van der Aalst et al. | Xml–based schema definition for support of interorganizational workflow | |
Hausmann et al. | Model-based discovery of Web Services | |
US20040111464A1 (en) | Type Descriptor Language (TDLanguage) metamodel | |
US8180796B1 (en) | Supplier integration with services business language | |
CA2389323A1 (en) | Commerce community schema for the global trading web | |
AU4219700A (en) | An intellectual asset protocol for defining data exchange rules and formats for universal intellectual asset documents, and systems, methods, and computer program products related to same | |
Zhao et al. | XML-based frameworks for Internet commerce | |
Rebstock et al. | Supporting interactive multi-attribute electronic negotiations with ebXML | |
Gessa | An ontology-based approach to define and manage B2B interoperability | |
Ilgner et al. | An implementation to transform business collaboration models to executable process specifications | |
Iyer | Evolution and adaptation of web services | |
Meadows et al. | Universal Business Language 1.0 Beta–Committee Draft | |
Kong et al. | Web Services and aecXML‐Based e‐Business System for Construction Products Procurement | |
Council | Draft Federal XML Developer’s Guide | |
Huang | Application of E-commerce System Based on ebXML | |
Agt-Rickauer | Metamodels and Transformations for Software and Data Integration | |
Palacios et al. | FP6–027324 | |
Kong et al. | Implementation of web services to enable interoperability of web-based construction products catalogue |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: JGR ACQUISITION, INC. Free format text: FORMER OWNER: COMMERCE ONE, INC. Effective date: 20050708 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20050708 Address after: Delaware Applicant after: JGR explore Limited by Share Ltd Address before: American California Applicant before: Commerce Onc. Inc. |
|
ASS | Succession or assignment of patent right |
Owner name: OPEN INVENTION NETWORK, LLC Free format text: FORMER OWNER: JGR ACQUISITION, INC. Effective date: 20071228 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20071228 Address after: Delaware Applicant after: Open Inv Network LLC Address before: Delaware Applicant before: JGR explore Limited by Share Ltd |
|
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: 20080514 |