通过 Web 服务利用 RIXML

交换研究内容和元数据

研究信息交换标记语言(Research Information Exchange Markup Language,RIXML)为交互内容和元数据定义了一个标准的 XML 模式。这些元数据标记内容中的相关信息,比如位置、名称和关键信息类型,企业可以利用这些信息执行高效的查找、排序和搜索操作。通过本教程了解 RIXML 和 Web 服务如何为交换关键信息提供强大的机制。

Saikumar V. Dubagunta, 首席技术官, Appera Software Inc.

Saikumar Dubagunta 的照片Saikumar Dubagunta 获得 Texas A&M University 的计算机科学硕士学位,并且在软件行业的经验超过 16 年。他为电信、数据存储和金融业设计、开发和交付领先的软件工具。作为团队主管和架构师,他负责开发所有阶段,包括需求、设计、编写代码、测试、文档、发布和客户支持。Saikumar 有丰富的技术经验,这些技术包括 Java、Microsoft .NET、C++、XML、关系和面向对象数据库、通信协议和 UNIX™。



2009 年 4 月 07 日

开始之前

了解如何从本教程获得最大收益。

关于本教程

本教程描述使用研究信息交换标记语言(RIXML)和 Web 服务在企业间实现关键业务流程。它提供演示如何应用 RIXML 的 XML 示例,并提供用于在应用程序间交换 RIXML 的 WSDL 定义。

目标

本教程描述如何应用 RIXML 在企业间分配研究,为软件开发人员和产品经理提供便利。它还指导如何使用 Web 服务实现基于 RIXML 的应用程序。

先决条件

阅读本教程的读者应该基本熟悉 Web 服务和 XML,包括某种语言的编程技巧,比如 Java™、C++ 或 Microsoft® .NET。

系统需求

为了实践本文提供的代码,您必须有一个 XML 阅读器,以查看 下载 小节中提供的可下载的 XML 和 WSDL 文件。另外,如果您对使用 WSDL 和 XML 实现样例应用程序感兴趣,则必须有一个 IDE,比如 Eclipse


RIXML 入门

常用缩写词

  • API:应用编程接口
  • DOM:文档对象模型
  • IDE:集成开发环境
  • WSDL:Web 服务描述语言
  • XML:可扩展标记语言

通过以下场景之一在企业之间交换研究文档:

  • 一家公司购买另一家公司的研究成果。
  • 一家公司将研究工作外包给另一家公司。
  • 一家公司将研究信息发布给所有贸易合作伙伴。

RIXML 定义一个标准的 XML 模式,以在企业间捕捉和传输研究文档和相关的元数据。

嵌入在 RIXML 中的元数据有两个用途。首先,它允许发送方和接收方定义传输的研究文档的类型和内容的结构。此外,它还允许传输程序根据收集、排序和搜索的需要提供关于内容的额外信息。

内容可以采用任何类型 —Microsoft Office Word 文档、电子表格或数据库文件。要传输的文档的类型由发送和接收方共同决定。这个标准的模式还方便了专有应用程序和商业应用程序之间的连接。传输的文档类型根据不同的研究类型而有所变化。比如,要传输某个公司过去的绩效可以采用电子表格,但要传输该公司的概况时,可以采用 Word 文档。

您可以编写软件应用程序来解析来自传输程序的 RIXML 输入,并将其插入到一个关系数据库或一个内容管理系统(CMS)中。尽管 RIXML 的最初目的是传输金融研究内容,但您可以将它应用到任何需要传输研究数据的部门。您可以以 RIXML 信息为标准向公司的数据库提交信息,或从中获取信息。

对于这种应用程序的开发,本教程主要关注两个方面:使用元数据为智能存储捕捉信息,开发通过 Web 服务交换 RIXML 负载的应用程序。


通过 Web 服务交换 RIXML 数据

了解如何通过 Web 服务在企业间交换 RIXML 数据。

RIXML 数据交换流程

企业可以通过 Web 服务交换 RIXML 数据。以下是最简单的 RIXML 交换流程:

  1. RIXML 传输程序使用 Java 应用程序编程接口(API),比如 SAX/DOM 或 Microsoft .NET API,创建一个 XML 字符串形式的 RIXML 负载。
  2. 与正在传输的文档相关联的元数据嵌入在 RIXML 字符串内部。

    本教程随后的几个小节主要介绍实现 RIXML 字符串的细节。

  3. 传输程序查找用来向接收方发送字符串的 Web 服务。

    Web 服务可以很简单,就像 下载 中的 WSDL 文件描述的服务一样。这个文件描述一个名为 Rixml 的简单 Web 服务,它有两个函数:PostDataPostDataResponsePostData 函数接收一条名为 PostDataSoapIn 的消息中的信息。PostDataResponse 函数通过名为 PostDataSoapOut 的消息发送信息。

  4. 传输程序在 Web 服务上调用 PostData 方法。
  5. 接收方接收 RIXML 数据,然后为事务生成一个惟一的字符串形式的标识符,并将其返回给传输程序。

    这个惟一的标识符为传输程序提供传输证明,以供稍后使用。

  6. 接收方解压缩 RIXML 字符串,将元数据存储到数据库,并将研究文档存储到本地文件系统。在多数情况下,解压缩元数据和文档,并将它们签入到一个文档管理系统(DMS)。

RIXML 负载

探索 RIXML 负载以及使用时涉及的元素。

负载的根:Research

常用的元素

本教程介绍的技术可用于所有产品主题。本文档主要讲解最重要、最常用的 RIXML 元素。可以在应用程序中使用您认为合适的其他元素。

RIXML 负载的根是 <Research> 元素。它构成在各方之间交换的研究文档的 “信封”。RIXML 为研究产品定义以下主要主题:

  • SectorIndustry
  • Discipline
  • Issuer
  • Region
  • Country
  • AssetClass
  • AssetType
  • SecurityType
  • Index

本教程使用 Issuer 主题作为示例。

注意:为简单起见,从现在开始我将 RIXML 负载称为 RIXML 字符串

<Research> 元素

清单 1 是带有 <Research> 元素的 RIXML 字符串的开始部分:

清单 1. 一个简单的 XML 块,它带有 Research 元素和一个 Product 元素
<?xml version="1.0" encoding="utf-8"?>
<Research xmlns="http://www.rixml.org/2005/3/RIXML" 
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://www.rixml.org/2005/3/RIXML-2_2.xsd" 
                    researchID="IBM_SW_111" 
                    createDateTime="2008-10-23T12:00:00" language="eng">
  <Product productID="IBM_SW_111_333" sequence="1">
    <StatusInfo statusType="Released" statusDateTime="2008-10-23T12:00:00" 
    currentStatusIndicator="Yes">
      <Version>1.0</Version>
</StatusInfo>
<Source>…</Source>
<Content>…</Content>
<Context>…</Context>
    <Legal>…</Legal>
  </Product>
</Research>

<Research> 元素有以下关键属性:

  • xmlns这个属性设置为 http://www.rixml.org/2005/3/RIXML
  • xmlns:xsi这个属性设置为 http://www.w3.org/2001/XMLSchema-instance
  • xsi:schemaLocation这个属性设置为 RixmlServiceStub.java
  • researchID这个属性是特定的交换研究文档的惟一标识符。它可以是企业中绝对不会产生冲突的增量值。有时候,这个属性可以是特定研究上下文中的惟一数字。经常可以用一个自动生成的全局标识符(GUID)来代替 researchID
  • createDateTime这个属性表示研究包形成的日期和时间。RIXML 要求这个属性采用 Zulu 时间(例如 2005-11-23T12:00:00)。

Product 元素

一个 <Research> 元素可以由一个以上产品组成,每个产品表示一个独立的研究文档。清单 1 给出了这个必备元素的示例。

设置惟一的标识符

<Product> 元素是一个序列:<Product> 元素的每个实例必须带有在文档内部设置为惟一值的 sequence 属性。序列号通常从 1 开始。productID 是作为 RIXML 字符串的一部分发送的研究文档的惟一标识符。productID 通过由根级别的 researchID 加上序列号构成。

<StatusInfo> 元素

<Product> 元素内部的 <StatusInfo> 元素表示研究的状态。将 statusDateTime 设置为准备传输研究包的时间。(这个属性的值应该与 createDateTime 的值相同)。currentStatusIndicator 表明状态是否是文档的当前状态:应该设置为 Yes。在这个示例中,statusType 属性设置为 Released。企业可以在 RIXML 字符串中使用多个 <StatusInfo> 实例。元素的每个实例可以表示研究生命周期的特定阶段,比如 PendingRevisedRecalledDeletedPublishedRebroadcastReleased。如果使用 <StatusInfo> 的多个实例(可能为了提供修改和发布的历史,或未来发布的日程表),应该设置 currentStatusIndicator="Yes" 表明哪个实例表示研究的当前状态;在其他 <StatusInfo> 实例中,要设置为 currentStatusIndicator="No"。不过,RIXML 通常用于将每个传输文档划分为单个的负载,使接收和传输端的处理更简单。换句话说,如果文档传输时带有值为 Published<StatusInfo>,然后修改该文档,新的 RIXML 字符串此时仅包含带有值为 Revised<StatusInfo>,并且内容包含最近修改的文档。我们推荐在接收方和传输器各自的 DMS 中管理文档的不同版本。

必需的 <Product> 元素

每个 <Product> 元素包含以下 4 个元素:

  • <Source>这个元素表示研究文档的创建者,包括组织名、生成信息的分析师,以及分析师的详细情况,比如电话号码和邮箱地址。
  • <Content>这个元素包含研究文档的实际输出,包括输出类型(例如,Word 文档和电子表格等)和文档本身。
  • <Context>这个元素包含与研究领域相关的信息,包括以上提到的产品要素和执行研究的公司的信息。
  • <Legal>这个元素包含与研究和传输相关的法律免责声明。

为简单起见,我们在每个产品中只使用这些元素的一个实例。


<Source> 元素

<Source> 元素捕捉 RIXML 交换参与方的联系信息。在不同的 RIXML 交换场景中,每个场景的 RIXML 通道两边都各有一个所有者。产品内部的 <Source> 元素捕捉关于所有者的信息。清单 2 给出了 <Source> 元素的 XML 块示例。

清单 2. <Source> 元素
    <Source>
      <Organization sequence="1" primaryIndicator="Yes" type="PublisherDefined">
        <PublisherDefinedValue>IBM</PublisherDefinedValue>
        <OrganizationID idType="IBM">IBM</OrganizationID>
        <OrganizationName nameType="Display">
            International Business Machines</OrganizationName>
        <PersonGroup personGroupID="IBM_BANKING" primaryIndicator="Yes" sequence="1"
                                                             role="Sponsor">
          <Name>IBM Banking Group</Name>
          <PersonGroupMember sequence="1" primaryIndicator="Yes" role="Author">
            <Person personID="111">
              <JobRole>Analyst</JobRole>
              <FamilyName>Smith</FamilyName>
              <GivenName>James</GivenName>
              <DisplayName>James Smith</DisplayName>
              <JobTitle>Analyst</JobTitle>
              <Division>Banking</Division>
              <ContactInfo nature="Business">
                <Email>James.smith@ibm.com</Email>
                <Phone type="Voice" location="Office">
                  <CountryCode>001</CountryCode>
                  <Number>201.555.1020</Number>
                </Phone>
                <Address>
                  <AddressLine1> 1 New Orchard Road</AddressLine1>
                  <AddressLine2>Suite 100</AddressLine2>
                  <City>Armonk</City>
                  <StateProvince>NY</StateProvince>
                  <PostalCode>10504</PostalCode>
                  <Country>USA</Country>
                </Address>
              </ContactInfo>
            </Person>
          </PersonGroupMember>
        </PersonGroup>
      </Organization>
      <Organization sequence="2" primaryIndicator="Yes" type="PublisherDefined">
        <PublisherDefinedValue>APPERA</PublisherDefinedValue>
        <OrganizationID idType="VENDOR">APPERA</OrganizationID>
        <OrganizationName nameType="Display">
                            Appera Software Private Ltd.</OrganizationName>
        <PersonGroup personGroupID="APP_BANKING" primaryIndicator="Yes" sequence="1" 
                                             role="Author">
          <Name>Appera Banking Group</Name>
          <PersonGroupMember sequence="1" primaryIndicator="Yes" role="Author">
            <Person personID="N/A">
              <JobRole>Analyst</JobRole>
              <FamilyName>Dubagunta</FamilyName>
              <GivenName>Saikumar</GivenName>
              <MiddleName>V</MiddleName>
              <DisplayName>Saikumar V Dubagunta</DisplayName>
              <JobTitle>Analyst</JobTitle>
              <Division>Banking</Division>
              <ContactInfo nature="Business">
                <Email>sai@appera.com</Email>
                <Phone type="Voice" location="Office">
                  <CountryCode>001</CountryCode>
                  <Number>972-555-1000</Number>
                </Phone>
                <Address>
                  <AddressLine1>8232</AddressLine1>
                  <AddressLine2>Fountain Ridge Dr.</AddressLine2>

                  <City>Plano</City>
                  <StateProvince>Texas</StateProvince>
                  <PostalCode>75025</PostalCode>
                  <Country>USA</Country>
                </Address>
              </ContactInfo>
            </Person>
          </PersonGroupMember>
        </PersonGroup>
      </Organization>
    </Source>

<Organization> 元素

<Source> 内部的关键元素是 <Organization> 元素。这个元素通常拥有两个实例 — 一个用于接收组织,一个用于发送组织。第一个 <Organization> 元素必须包含接收组织的详细信息。sequence 属性的值通常设为 1,表明它是接收组织。2 表示发送组织。primaryIndicator 表示这个条目是不是接收组织信息的主条目,并且值为 Yes。值 Yes 也用于序号为 2 的条目,表明它是发送组织的主条目。在这个示例中,type 设置为 PublisherDefined,因为发布者已经商量并定义好格式。将值设置为 PublisherDefined 适用于大多数组织,因为这些值是由接收和发送组织商议决定的。

按照以下步骤在接收组织中设置不同的元素:

  • 通常不使用 <LogoURL> 元素。不过 logo 有一个可用的公共 URL;如果双方同意使用,可以在此设置 URL 的值。
  • <PublisherDefinedValue> 元素必须设置为双方达成一致的值。这通常是一个短字符串,比如 “MXFT” 和 “XYZ”,或类似于身份识别中的标识符。这个值可以是一个接收者给每个发送实体的标识符,用于帮助路由文档。这个元素充当一种简单的身份验证机制。
  • <OrganizationID> 必须包含接收组织的惟一 ID。<idType> 由组织协商决定。在这个示例中,值 IBM 是接收组织的 idType,值 VENDOR 是发送组织的 idType
  • <OrganizationName> 通常包含在 Web 站点中显示的组织的名称。同样,将 nameType 属性设置为 Display。不过,nameType 还可以设置为以下其他值:
    • Legal组织的法定名称
    • Local在某个城市或国家中使用的当地名称
    • Parent组织的总公司名称

<PersonGroup> 元素

<PersonGroup> 元素表示接收 RIXML 传输的人员。sequence 属性设置为 1,表明它是第一个元素。primaryIndicator 属性设置为 Yes,表示这是主要的组。role 属性设置为 Sponsor,表示该组包含研究发起者。将 role 的值设置为发送组织的 Author

RIXML 支持 role 属性采用以下值:

  • Author
  • Publisher
  • Host
  • Sponsor
  • Coordinator
  • Attendee
  • Participant
  • Speaker
  • SalesContact
  • IRContact
  • PublisherDefined

如果适合的话,还可以采用其他值。如果要将文档传输给不同组中的多个接收者,则可以包含多个 <PersonGroup> 实例。大多数情况下只使用一个 <PersonGroup>

与名称相关的元素

<PersonGroup> 内部中的 <Name> 元素包含接收者所在的组的名称。它可以采用非常简单的值,比如 Derivatives GroupBanking Group。在 <PersonGroup> 的内部为每个接收者创建一个 <Person> 元素。

<Person> 元素的 personId 属性设置为惟一的人员标识符,比如公司内部某位职员的 ID。在某些情况下,公司策略不允许跨组织共享职员标识符。对于这些情况,可以将职员的电话号码用作 personId。一些组织还为接收特定合作伙伴的传输文档的人员生成特殊的标识符。然后,接收应用程序将这些特殊的标识符映射到内部职员标识符。一些组织忽略这个属性的值。

<Person> 元素内部的 <JobRole> 元素包含一个自由字符串。它可以是任意字符串,比如 AnalystStrategistEconomistOthers。最常用的值是 Analyst

<FamilyName> 元素的值设置为接收传输文档的人员的姓。例如,Smith<GivenName> 元素的值设置为接收传输文档的人员的名。例如,Paul<MiddleName> 元素设置为接收传输文档的人员的中间名首字母(如果有的话)。例如,J。如果没有中间名,则可以忽略该元素。<DisplayName> 元素的值必须设置为 <FirstName> <MiddleName> <LastName>

与工作相关的元素

<JobTitle> 设置为接收传输文档的人员的工作头衔。<Division> 元素设置为接收传输文档的人员所在的部门。例如,BankingRetail

与联系信息相关的元素

必须在 <ContactInfo> 元素中提供接收传输文档的人员的联系信息。<ContactInfo> 元素的 nature 属性必须设置为 Business

如果接收人员拥有即时消息 ID,那么在 <ContactInfo><InstantMessenger> 元素中提供该信息。例如,xyz@yahoo.com。如果没有即时消息 ID,可以忽略该元素。

<ContactInfo><Email> 元素中提供接收人员的电子邮件地址。<Phone> 元素包含接收者的电话信息。将 type 属性设置为 Voice。如果有传真号码,则可以将电话类型设置为 Fax;如果有传呼机号码,则可以设置为 Pager。将 location 属性设置为 Office;根据不同类型的电话,可以将电话设置为 HomeMobile。将 <CountryCode> 元素的值设置为接收者的国家代码。例如美国为 001。将 <Number> 元素设置为接收者的电话号码。如果接收者使用的是分机,则在 extensionPIN 中提供号码。

<ContactInfo> 元素中的 <Address> 元素必须包含接收者的邮政地址。<AddressLine1> 元素是必须存在的。如果有必要,可以使用 <AddressLine2><AddressLine5><City> 元素必须包含邮政地址所在的城市。例如 New York<StateProvince> 必须包含邮政地址所在的州或省份。例如,NY<PostalCode> 元素必须包含邮政编码。例如,20000<Country> 必须包含邮政地址所在的国家。例如,USA

注意:<Organization> 元素必须具有第二个实例,用于表示发送研究文档的组织和负责创建研究文档的分析师的详细信息。其中许多元素的值和意义与接收组织中的元素是一样的。常见的差异是:

  • 对于发送组织,sequence 的值是 2,primaryIndicator 设置为 Yes,并且 idType 也设置为一个商议值。在这个示例中,还使用了值 VENDOR
  • PersonGroup role 属性设置为 Author
  • Person JobRole 属性设置为 AuthorAnalyst,发送组织可以自行选择。

<Content> 元素

<Content> 是 RIXML 字符串中的关键元素,它包含要发送的研究文档。发送实体从本地或网络文件系统中读取研究文档,然后根据协商结果进行编码并将文档放到这个元素中。在对从该元素中捕捉到的内容进行解码之后,接收实体将内容保存到本地或网络文件系统。

如果将多种类型的研究文档发送给同一个接收者,就会用到这个元素的多个实例。应该让 RIXML 事务保持简单:一次发送一个文档简化了收发两端的数据处理。清单 3 给出一个包含 <Content> 元素的代码块。

清单 3. 包含 <Content> 元素的代码
    <Content>
    <Description>Sample document prepared for this tutorial.</Description>
      <Title>Test Document</Title>
      <Resource resourceID="1" sequence="1" primaryIndicator="Yes" language="eng"
              sizeInBytes="197">
        <Protocol>DOC</Protocol>
        <Length lengthUnit="Pages">5</Length>
        <MIMEType>application/octet-stream</MIMEType>
        <Name>TestDelivery.DOC</Name>
        <Comments>Word Document is Base64 Encoded before placing it in the Data element. 
        Note that the data below is not actual.</Comments>
        <Data>PCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVE
QgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIj4NCjxodG1sPg0KICA8aG
VhZD4NCiAgPHRpdGxlPjwvdGl0bGU+DQogIDwvaGVhZD4NCiAgPGJvZHk
+DQogIDwvYm9keT4NCjwvaHRtbD4=</Data>
      </Resource>
  </Content>

<Description> 元素

<Content> 元素中的 <Description> 元素包含研究文档的简短描述。它还可以包含关于电子邮件消息或电话通话的摘要,以帮助发送者或接收者记起交换文档的上下文。

<Title> 元素

<Title> 元素通常包含文档的分类。可以使用的值包括 Banking ResearchCredit Default Swaps。您需要将文档的实际标题放到 <Resource> 元素中。

可选元素:<Subtitle>、<Abstract> 和 <Synopsis>

通常不需要使用 <Content> 中的 <Subtitle><Abstract><Synopsis> 元素。如果接收实体直接使用 RIXML 字符串将文档提交到 CMS,那么实现可以使用这些值。一些 CMS 实现需要文档大纲和摘要,以帮助读者找到所需的文档。

<Resource> 元素

<Resource> 元素包含实际的文档。大多数情况下,传输只包含这个元素的一个实例。然而在特殊情况下,如果文档以多种格式发送,则需要使用这个元素的多个实例。例如,研究文档可以以 Microsoft Office Excel® 格式或文本格式发送,然后再转发到两个不同的内部系统。

resourceID 和相关的属性

<Resource> 元素的 resourceID 属性设置为 1。如果使用了一个以上的资源,就给 resourceID 属性设置更大的数字。

<Resource> 元素的 language 属性设置为文档内容使用的语言。例如,如果是英语,则设置为 engsizeInBytes 属性设置为文档在文件系统中的大小。

primaryIndicator 值设置为 Yes,表明这是传输中的主要文档。在某些情况下,发送方以不同的格式将相同的内容作为不同的资源发送(例如,Word 文档和文本文件)。在这种情况下,包含主文档(例如,Word 文档)的资源的 primaryIndicator 值设置为 Yes,其他资源的 primaryIndicator 值设置为 No

sequence 设置为与 resourceID 相同的值。

<Protocol> 元素

<Resource> 元素中的 <Protocol> 元素必须设置为各方预先商量好的值 — 例如,Word 文档的值可以是 Microsoft Word,Excel 文档的值可以是 Microsoft Excel。如果应用程序试图处理这些值以进行决策,则将这个元素的值设置为 WORDXCEL

特定于文档的元素

lengthUnit 通常设置为 Pages,并且该元素在文档中包含页码数。如果被传输的文档是音频或视频文件,则可以使用值 TimeUnit。当 Pages 用作 lengthUnit 时,<Length> 元素在文档中包含页码数;当 TimeUnit 用作 lengthUnit 时,<Length> 元素包含音频或视频的分钟数。

<MIMEType> 元素的值必须设置为 application/octet-stream

<Name> 和 <Data> 元素

RIXML 字符串中最重要的两个元素是 <Resource><Name><Data><Name> 元素必须包含文件系统上的文档的原名。在将文档存储到文件系统或嵌入到 CMS 时,这个元素指导接收实体命名文件。发送实体在电话通话或其他组交流活动期间使用这个文件名。它还保留嵌入到文档名中的任何版本信息。

<Data> 元素包含要发送的文档的文本或二进制内容(例如,图像文件)。最常用的文档传输方法是从文件系统和 Base64-编码文件流中读取文档。Base64 也称为 MIME 内容传输编码。简单而言,这种编码将文件中的所有内容转换成文本,从而允许任何文件(简单的文本文件、XML 文件、二进制文件、图像或媒体文件)作为 RIXML 字符串的一部分传输。在接收端,可以从 RIXML 字符串提取文本字符串并将其转换回原来的文件格式。


<Context> 元素

<Context> 元素包含关于传输的研究文档的上下文的数据。它有两个属性:externalpriorityexternal 属性必须设置为 Nopriority 属性设置为 Medium。如果需要优先处理特定类型的研究文档,可以将这个值设置为 High。但是必须获得交换文档双方的同意。

清单 4 给出了 <Context> 元素的 XML 块示例。

清单 4. <Context> 元素的代码
    <Context external="No" priority="Medium">
      <IssuerDetails>
        <Issuer sequence="1" primaryIndicator="Yes" issuerType="Corporate">
          <IssuerID idType="PublisherDefined" idValue="333" publisherDefinedValue="333"/>
          <IssuerName nameType="Display">
            <NameValue>XYZ Corp.</NameValue>
          </IssuerName>
        </Issuer>
      </IssuerDetails>
      <ProductDetails periodicalIndicator="No" publicationDateTime="2008-10-10T12:00:00">
        <ProductCategory productCategory="PublisherDefined" publisherDefinedValue="TP"/>
        <ProductFocus focus="Issuer" primaryIndicator="Yes"/>
        <ProductName>Test Product</ProductName>
      </ProductDetails>
    </Context>

提供与研究相关的细节

<IssuerDetails> 元素表示从事研究的发起者的信息。(注意,这里的术语发起者 并不是指前面已经讨论的 <Issuer> 的主题值。它代表作为研究对象的公司)。

<IssuerDetails> 中的 <ProductDetails> 元素捕捉要发送的研究产品的元数据。

<IssuerDetails> 元素

<Issuer> 元素是 <IssuerDetails> 的子元素,它包含研究发起者的关键信息:

  • 按照以下说明设置 <Issuer> 元素的属性:
    • sequence 设置为 1
    • primaryIndicator 设置为 Yes,表明这是主要发起者。
    • issuerType 设置为合适的值(例如,Corporate)。
  • <IssuerId> 是非常重要的元素:它识别研究发起者。许多公司给合作发起者分配一个标识符。将该元素的 idType 属性设置为 PublisherDefined,将 idValue 设置为分配给发起者的值。PublisherDefinedValue 必须设置为与 idValue 相同的值。也可以将上市公司的股票代号作为 idValue 的值。但是如果使用混合类型来识别发起者,则要确保采用适当的逻辑,以理解以后的研究。
  • <IssuerName> 元素通常包含在 Web 站点中显示的发起者的名称。将 nameType 属性设置为 Display,并且必须将发起者的显示值提供为 <NameValue> 的值。如前所述,可以使用其他名称类型,比如 LegalLocalParent

如果研究由一个或多个发起者共同生成,则将所需的 <Issuer> 元素的数目添加到 <IssuerDetails>。增加列表中每个发起者的序列号。在这种情况下,对于主要发起者,将 primaryIndicator 设置为 Yes,对于其他发起者,则设置为 No

<ProductDetails> 元素

<ProductDetails> 元素是 <Context> 元素的子元素,它包含提交的产品的信息。<ProductDetails> 元素的属性包括:

  • 如果当前的内容不是定期发送的,将 periodicalIndicator 的值设置为 No。如果当前的内容是定期发送的,将值设置为 Yes
  • Research 元素中将 publicationDateTime 属性设置为 creationDateTime

按照以下步骤设置作为产品细节的一部分的关键元素:

  • <ProductCategory> 元素的 productCategory 属性设置为 PublisherDefined。将 publisherDefinedValue 设置为交换数据双方协商同意的值。
  • <ProductFocus> 元素包含关于文档的焦点的数据。将 primaryIndicator 属性设置为 Yes,表明这是产品的焦点。在这个示例中,将 focus 属性设置为 Issuer(其他产品的焦点可以按前面 RIXML 负载小节 描述的方式使用)。一般情况下,一个产品只有一个焦点。
  • <ProductName> 元素设置为产品的名称 — 通常是交换的文档的标题。

<Context> 元素中的 <EventDetails><ProductClassifications> 元素提供研究的其他细节。在需要对研究进行复杂跟踪的场景中可以使用这些元素。本教程不讲解这些元素。


<Legal> 元素

XML 代码中的 <Legal> 部分让开发人员能够在 RIXML 中嵌入法律信息。清单 5 给出了 <Legal> 元素的代码块示例。

清单 5. 包含 <Legal> 元素的代码
<Legal>
      <Copyright>©Copyright 2008 Appera Software Inc.</Copyright>
      
      <Disclaimer>Every effort is made to keep our network free from viruses. 
      You should, however, review this message, as well as any attachment thereto, for
       viruses. We take no responsibility and have no liability for any computer virus 
       which maybe transferred via this message.
       </Disclaimer>
</Legal>

必需的元素

<Legal> 部分是 <Product> 元素的子元素,它包含以下元素:

  • <Copyright>用于放置共享信息的知识产权注意事项。通常在这里放置标准的知识产权文本,比如 “©Copyright 2008 Appera Software Inc”。
  • <Disclaimer>这个元素用于放置关于共享内容和 RIXML 信封的免责声明信息。这里对文本的类型没有限制。

结束语

RIXML 是用于在不同类型组织之间交换研究文档的强大机制。通过与 Web 服务结合,它能够快速转换与大量元数据相关联的内容。所有需要交换的复杂信息都可以在 RIXML 中处理,因此不再需要复杂的 Web 服务方法。对转换文档而言,使用最简单的 Web 服务 API 已经足够,这种 API 不仅容易实现,同时也能保证交互性。使用可用的 XML 和 Web 服务 API 实现应用程序。您可以选择任意一种语言开发应用程序,包括 Java、C++ 和 Microsoft .NET 等。


下载

描述名字大小
Web 服务定义的样例1postdata.wsdl.zip2KB
RIXML 数据样例2sampledata.xml.zip3KB

注意:

  1. 这个文件包含一个 WSDL 定义样例。可以将这个文件上传到您喜欢的 IDE,比如 Eclipse(Java 技术)或 Microsoft Visual Studio®(Microsoft .NET),从而生成用于传输数据的代理和存根。
  2. 这个文件包含一个 RIXML 数据元素样例。可以将这个文件读入到代码中,然后使用以上生成的 Web 服务类发送数据。还可以将该文件用作开发模板。为此,仅需使用 XPath 在这个实例中查找不同的元素,然后使用以上的 Web 服务定义修改它们的值、将生成的实例转换为 XML 并传输数据。

参考资料

学习

获得产品和技术

  • Eclipse 技术下载:下载最新的 Eclipse IDE。
  • IBM 产品评估试用软件:使用可直接从 developerWorks 下载的 IBM 试用软件构建您的下一个项目,包括来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML, SOA and web services
ArticleID=380461
ArticleTitle=通过 Web 服务利用 RIXML
publish-date=04072009