7.3 表示结构化文档

在这一节我们所设计的数据结构,灵感来自 HTML 格式,这是我们熟悉的,成功创建文档的语言。就像 HTML 一样,我们表示的内容有几种类型,并且有些部分可能以适当的方法嵌套。图 7.3 显示了带注释的示例文档,它能给你格式包括哪些内容的概念。

有两种不同的部分。简单的部分,如 TextPart 和 ImagePart,包含内容,但不包含嵌套的部分;在另一侧,TitledPart 包含了嵌套部分,还有标题,而 SplitPart 包含一个或多个嵌套的部分和方向的规范。你可能已经猜到,我们将使用差别联合来表示不同的部分;有两个部分可以包含嵌套的部分,因此,类型将是递归的。清单 7.9 显示了类型声明,给我们更具体的内容,需要详细讨论。

图 7.3 文档格式有四种不同部分:TitledPart 标题加其他部分;使用 SplitPart,可以创建列和行;TextPart 和 ImagePart 指定实际内容。

清单 7.9 分层次的文档表示 (F#)

type Orientation =   [1]

|Vertical

|Horizontal

type DocumentPart =   [2]

|SplitPart of Orientation * list<DocumentPart>  <-- 行或列中包含其他部分

|TitledPart of TextContent * DocumentPart  <-- 表示有标题的部分

|TextPart of TextContent   | 保存基本内容

|ImagePart of string      |

把前面一段中非正式的规范翻译成 F# 代码非常简单,这绝对是一个最标准的 F# 类型声明。我们首先声明一个简单的差别联合,有两个选项,表示拆分部分的方向[1],然后,再声明DocumentPart 类型[2],有四个可选的选项。

两个选项递归地包含了其他文档部分。SplitPart 包含了列表中的几个其他部分,和确定区域应如何划分的方向信息;TitledPart 包含了一个其他部分,和装饰用的标题。保存文本,使用上一节的 TextContent 类型,它是记录类型,包含了字符串和使用的字体。

DocumentPart 类型表示整个文档。因为,类型是递归的,我们可以在一个文档部分中,嵌套任意数量的内容部分。这不同于以前的做法,那时,我们为元素创建类型,然后,用元素列表表示文档;在那种表示形式中,列表成为数据结构的“根”,元素没有进一步地嵌套;使用新的数据类型,我们可以像这样来写 7.2 节的文档:

let doc =

TitledPart({Text = "Functional Programming for the Real World";

Font = fntHead },

SplitPart(Vertical,

[ImagePart("cover.jpg");

TextPart({Text = "..."; Font = fntText }) ]

)

)

我们省略了位于图像下面的TextPart 的内容,但仍可以看到,表示方法很简洁,因为不需要自己计算矩形的边框。然而,我们没有实现绘制数据类型。我们不打算写,或者说,什么时候,我们已经为早先的表示方法,有了很好的绘制函数,为什么还要写呢?我们所要做的就是提供转换,从“构造设计”的形式到“绘制设计”。

时间: 2024-11-09 10:24:01

7.3 表示结构化文档的相关文章

生成表结构数据库文档sql语句

CREATE PROCEDURE [dbo].[生成表结构数据库文档]ASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT 表名 = Case When A.colorder=1 Then D.name Else ''

JavaScript之DOM文档对象模型

1.DOM是文档对象模型(Document Object Model)的简称. 当网页加载时,可以将结构化文档在内存中转换成对象树. 简单的说,DOM并不是一种技术,而是一种访问结构化文档的思想.借助DOM模型,我们可以对DOM树进行修改.删除.新增等操作,让结构化文档动态化. 2.DOM模型中的节点--文档可以说是由节点构成的集合.在DOM模型中有以下3种节点: (1)元素节点:各种标签就是这些元素节点的名称,如<ul>.<p>等: (2)文本节点:文本节点总是被包含在元素节点的

005_01文档对象模型DOM

DOM:document object model  文档对象模型.是W3C织制订的一套用于访问XML和HTML文档的标准.允许脚本动态地访问和更新文档的内容.结构和样式. W3C DOM 标准被分为 3 个不同的部分: 核心 DOM - 针对任何结构化文档的标准模型 XML DOM - 针对 XML 文档的标准模型 HTML DOM - 针对 HTML 文档的标准模型 左边为HTML文档树,右边为结构树示意图 XML DOM 定义了访问和处理 XML 文档的标准方法. HTML文档格式 符合X

7.2 平面文档的表示

在这一章,我们将要开发一个用于显示文档的应用程序.首先设计文档的表示形式,适合于绘制在屏幕上.使用这种表示方式,文档就是元素的列表,其中包含一定内容(可以是文本,也可以是图像),和指定的边框,在边框中绘制具体内容.图7.1是一个文档的示例,有三个突出显示的元素. 我们看一下用 F# 表示文档的数据结构.清单 7.4 引入了新的表示两种类型元素的差别联合,和新的表示文本元素的记录类型,还使用了我们先前定义的 Rect 类型. 图 7.1 示例文档包含三个元素,两个显示不同字体的文本和一个显示图像.

SharePoint:如何批量签入(Check in)文档?

自从中国国家标准委员会就知识管理模型定位之后,很多企业早些年启用了"传统的知识管理"的模式管理企业结构化和非结构化文档,但在现阶段,很多企业应其本身的快速发展以及应用趋势的需要,逐渐寻求和关注显性知识的"传统的知识管理"平台步入关注"知识共享"和"社交学习并重"转变的解决方案. 通过企业内部的各项评估和调研,多数企业都选择SharePoint 平台作为企业内外部社交.协同办公.知识文档管理系统平台. 但部分企业IT管理员部署完

源生API解析XML文档与dom4j解析XML文档

一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可以存储数据. 1.XML语言书写的注意事项 1.XML标签命名自定义[推荐英文],标签名中不能包含空格 2.XML空格和换行都表示数据,严格区分大小写 3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样 4.CDATA区中的数据不会被识别为语法 <![CDATA[王天霸<>&l

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

XML文档结构【转载】

一,XML文档结构  XML文档是由一组使用唯一名称标识的实体组成.也是由数据和描述数据的标记组成. 文档的组成部分包括:声明,元素,注释,字符引用和处理命令. 二,创建XML文档 XML声明始终是任何XML文档的第一行.  1,陈述XML声明:为XML文档匹配合适的解析器.    XML声明语法:  <? xml version = "XML版本号"  standalone = “no或yes” encoding = “UTF-8或UTF-16或GB2321或GBK”?>

四种生成和解析XML文档的方法详解

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 一.介绍及优缺点分析 1. DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点]      ①允许应用