Lotus教程、Java教程、Java虚拟机、Java软件综合开发社区

Lotus、Domino、Java、C#、Web、数据库综合开发教程、资料社区

介绍Domino XML



Published by admin on 08月 30, 2010

介绍 Domino XML(DXL)

Lotus Domino 提供了许多功能,以便将 Domino 数据作为特殊类型的 XML 导出和导入并设计元素。Lotus Domino 将这种特殊类型的 XML 称为 DXL —— Domino XML 语言的缩写。不要为这个名称迷惑。DXL 就是符合 Domino DTD 的 XML,在 Notesxmlschemas 目录中可以找到 Domino DTD。

在撰写本文时,Lotus Domino 6.5.1 提供了 8 个模式文档 —— 每个 Lotus Domino 6.x 迭代一个。

在继续后面的操作之前,要设置一下运行例子的环境。该例假设使用的是运行 Lotus Notes 6.5 的 Microsoft Windows 操作系统:

  1. 在 Windows Explorer 中,在根目录或 C:盘中创建名为 article 的目录。
  2. 下载本文的示例文件,然后将文件解压缩到新创建的 C:article 目录中。
  3. 确定下列文件夹是存在的:
    • Article
    • Com
    • Dxl
    • Xml
    • Xsl
  4. 将包含的 articleSample.nsf 数据库复制到 Notesdata 目录。这个数据库将存储可以从二手车代理商那里获得的简单汽车信息。
  5. 在 Domino Designer 中打开 articleSample.nsf 数据库。注意:在 ACL 中,至少需要具有 Designer 级别访问权,并且必须启用 Create Lotuscript/Java agents 选项。
  6. 在左边面板中,从 articleSample.nsf 数据库中选择 Shared Code - Agents。您应该看到两个 Java Agent。
  7. 数据库是空的,但是可以通过运行 GenerateCars 代理来填充数据库,这个代理将根据随机选择的值生成 1,000 辆汽车。右击 GenerateCars 代理并选择 Run,以便在数据库中创建 Car 文档。打开 Notes 客户机并检查数据库内容。
    图 1. Lotus Notes 中的示例 Car 文档
    Lotus Notes 中的示例 Car 文档
  8. 接着,从新生成的 Car 文档生成 DXL 和 XML。右击 GetandTransformDXL 代理并选择 Run。这个代理将完成两项工作:首先,从 Car 文档生成 DXL 文档,并将 DXL 文档放入 C:articledxl 目录;然后,将新生成的 DXL 文档转换为 XML 文件,并将其放入 C:articlexml 目录。
    图 2. 转换的 XML 文档列表
    转换的 XML 文档列表

现在,我们仔细研究一下刚才所做的各个部分的工作。

DxlExporter

Lotus Domino 6.5 提供名为 DxlExporter 的 Java 实用程序类。DxlExporter 向开发人员提供了从 Domino 元素中生成 DXL 的编程方法。在 Lotus Domino 6.5 之前,DxlExporter 是在称为 Lotus XML Toolkit 的单独下载产品中使用的。使用版本较老的 Lotus Domino 的那些人可能要使用这个版本的 DxlExporter。

在我们的例子中,使用 Domino Java 代理内的 DxlExporter。Java 代理是一种 Java 程序,它扩展了 Lotus 提供的称为 AgentBase 的基础类,并且可以在 Domino 框架内运行。有关 Java 代理的详细信息,请参阅 Domino Designer help

DxlExporter 允许使用 exportDxl 方法将 4 种不同类型的 Domino 元素导出到 DXL。这些元素是数据库、文档、documentcollection 和 notecollection:

public String exportDxl(Database database)
将 Domino 数据库中的所有东西导出为 DXL 格式。其中包括设计元素和数据文档。

public String exportDxl(Document document)
将 Domino 文档导出到单个 DXL 文档。

public String exportDxl(DocumentCollection documentcollection)
将 Domino 文档的集合导出到单个 DXL 文档中。

public String exportDxl(NoteCollection notecollection)
导出 Domino 元素集合。这些元素可以包括设计元素和数据文档。

对于我们的例子,是在 GetandTransformDXL 中使用该方法的第二个版本,通过 For 循环每次导出一个文档。我们还可以轻松使用该方法的第三个版本,即导出 documentcollection,但是要为所有文档生成一个 XML 文件,而不是为每个文档生成一个文件。

DxlExporter exporter = session.createDxlExporter();exporter.setForceNoteFormat(false);

exporter.setOutputDOCTYPE(false);

Stream stream = session.createStream();

if (stream.open(DXL_FILE_PATH+ this.getFilename()+ FILETYPE_SUBFIX)) {

 stream.writeText(exporter.exportDxl(doc));

}

Lotus 为 DxlExporter 提供了许多方法来定制 DXL 输出。我们将讨论例子中使用的两种方法:ForceNoteFormat 和 OutputDOCTYPE。

exporter.setForceNoteFormat(false);
exporter.setOutputDOCTYPE(false);

ForceNoteFormat — DxlExporter.setForceNoteFormat(boolean)

将参数设为 true,告诉导出程序将每个 Domino 元素作为 note 元素导出。将参数设为 false,告诉导出程序将每个 Domino 元素以其自己的类型导出。为了对此进行说明,请参见下例。将 ForceNoteFormat 属性设置为 true,如下所示:

exporter.setForceNoteFormat(true);

这将生成一个包含名为 note 的顶级对象的 XML,这个对象有这样一个属性值 class = ‘document’。从汽车例子中生成的 DXL 文档如下所示:

<note class='document' xmlns='http://www.Lotus.com/dxl' version='6.5' maintenanceversion='1.0' replicaid='88256F0C0071CEAD'>

…

<note>

另一方面,在将 ForceNoteFormat 设为 false 时,DxlExporter 将顶级元素作为 Domino 元素类型导出。将 ForceNoteFormat 属性设置为 false:

exporter.setForceNoteFormat(false);

生成如下所示的 DXL 文档:

<document xmlns='http://www.Lotus.com/dxl' version='6.5' maintenanceversion='1.0' replicaid='88256F0C0071CEAD' form='car'>

...

</document>

注意:将 ForceNoteFormat 属性设为 true 或 false 都不会更改所包含元素的输出。

OutputDOCTYPE —— DxlExporter.setOutputDOCTYPE(boolean)

这方法将附加 DOCTYPE 标签以及 SYSTEM 和 DTD 信息。将生成的 DXL 传递到其他程序或个人来验证 DXL 的完整性时,此方法很有用。SYSTEM 可以通过 DxlExporter.setDoctypeSYSTEM( ) 来设置。注意 DOCTYPE 标签中对 Domino DTD 的引用。

<!DOCTYPE document SYSTEM ‘xmlschemas/Domino_6_5_1.dtd’>

DxlExporter 有一个 LotusScript 版本,称为 NotesDxlExporter。它提供的功能几乎与它的 Java 版本的对应功能一样。它最初是随 Lotus Domino 6 发行的。

研究 DXL

现在浏览至 C:articledxl,并在最喜欢用的文本编辑器或浏览器中打开新创建的 DXL 文件(扩展名仍为 XML)。我们研究一下它的结构和内容。
图 3. 在浏览器中打开生成的 DXL
在浏览器中打开生成的 DXL

DXL 的设计目标是用类似树状的分层结构来表现 Domino 元素。它受 Domino DTD 限制,该 DTD 根据 Domino 构造描述每个元素。因此,对于数据,DXL 文档在语义上通常没有任何意义。可以通过汽车例子来思考这个问题:假设有一个名为 VIN 的文本字段,它存储 Domino 文档中的字母数字值。此字段的导出 DXL 表示为:

<item name=’VIN’><text>9135D30E168BEC6688256F0D00626201</text></item>

虽然这是有效的 XML,然而它并没有表示车辆识别号(即汽车的惟一 ID)的真实意义。实际上,VIN 的表示形式与文档中的其他任何文本字段没什么区别。是否将 DXL 文档转换为可以表示语义的 XML 文件由开发人员决定。为了获得最大的可移植性,我们建议将 DXL 文档转换为可以更有效地描述数据的 XML 文件。

转换 DXL

转换 XML 的功能是非常强大的。这项功能由 XSLT(Extensible Stylesheet Language Transformation)处理。如果不熟悉 XSLT 和其他相关技术,请参阅 http://www.w3.org/Style/XSL/

使用 DXL 的情况下,在使得数据在 Lotus Domino 之外的地方同样有意义方面,转换起着重要作用。在下面各小节中,我们将介绍转换 DXL 的细节和一些技巧。

覆盖名称空间 dxl

DXL 文档包含 XML 名称空间 dxl。虽然这个名称空间值对于描述 DXL 文档很有意义,但对于描述 XML 格式,这个值没有任何用处。默认情况下,XSLT 引擎在生成的 XML 中附加源 XML 的名称空间。要覆盖 dxl,需要在 <xsl:stylesheet> 标签中添加属性 exclude-result-prefixes=”dxl”:

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” xmlns:dxl=”http://www.Lotus.com/dxl” version=”1.0″ xmlns:xalan=”http://xml.apache.org/xslt” exclude-result-prefixes=”dxl”>

处理文本字段和其他简单数据类型

Domino 6.5.1 DTD 中定义了 7 种简单数据类型。这些类型是:

  • Text:简单字符串数据,存储为 #PCDATA、break 或非 XML 字符。
  • Number:简单数字,存储为 #PCDATA。
  • Datetime:映射到连续字符串的日期时间项,如 yyyymmddThhmmss。
  • Textlist:文本元素集合。
  • Numberlist:数字元素集合。
  • Datetimelist:日期时间元素集合。
  • Itemdata:用于表示 DTD 尚未处理的字段。例如,Domino 文档中存储的文件附件就表示为 itemdata。该值将以 raw Base64 格式出现。

Pages: 1 2 3

上一篇文章:« lotus notes 开发经验


【版权说明】:本网页上有部分内容来源于网上收集,但不能保证资料的完整性和准确性,仅提供参考和学习。如有侵权请立即通知我们,我们将立即删除,谢谢合作!

Add A Comment