CALS表格模型是美国国防部提出的基于XML/SGML的语义化表格规范,强调逻辑结构而非外观,核心元素包括table、tgroup、colspec、thead、tbody、row和entry,支持跨行跨列标记与强校验。

CALS表格模型是一种标准化的、基于XML(或SGML)的表格描述方式,最初由美国国防部提出,全称是“Computer-Aided Acquisition and Logistic Support”表格模型。它不是视觉排版工具,而是语义化、结构清晰、可交换、可校验的表格数据表示规范,广泛用于技术文档、航空手册、军工标准等对数据一致性要求高的领域。
它强调表格的逻辑结构(如标题行、数据行、列定义),而不是外观样式,因此非常适合在XML中持久化和跨系统传输。
CALS表格在XML中的基本结构
一个典型的CALS表格用XML元素逐层组织,核心元素包括:
-
<table>:整个表格的根容器,常带id、frame等属性 -
<title>:表格标题(可选但推荐) -
<tgroup>:表格主体组,必须包含cols属性声明列数 -
<colspec>:定义每一列的属性,如colname(列标识符)、colwidth(宽度) -
<thead>:表头区域,包含一行或多行<row> -
<tbody>:表格主体数据区 -
<row>:表示一行,可含valign、align等属性 -
<entry>:单元格内容,支持morerows、morecols实现跨行/跨列(但注意:纯CALS不直接支持“合并单元格”的渲染语义,而是用morerows/morecols标记逻辑跨度)
示例(简化版):
<table id="t1">
<title>客户信息表</title>
<tgroup cols="3">
<colspec colname="c1" colwidth="1*"/>
<colspec colname="c2" colwidth="2*"/>
<colspec colname="c3" colwidth="1*"/>
<thead>
<row>
<entry>编号</entry>
<entry>姓名</entry>
<entry>城市</entry>
</row>
</thead>
<tbody>
<row>
<entry>001</entry>
<entry>张三</entry>
<entry>北京</entry>
</row>
<row>
<entry>002</entry>
<entry>李四</entry>
<entry>上海</entry>
</row>
</tbody>
</tgroup>
</table>关键特点说明
-
列数必须严格一致:
<tgroup cols="3">中的数字要和实际<colspec>数量、每行<entry>数量匹配,否则Oxygen等编辑器会报错(比如“列数不一致”)。 - 不依赖CSS或样式控制显示:CALS本身不定义颜色、边框、字体,这些由XSLT或CSS后处理添加。
-
支持嵌套与复杂结构:可通过
<entry>内嵌<para>、<list>甚至子<table>,适合技术文档中的多层表格。 -
可验证性强:有配套DTD或XML Schema(如
calstbl.xsd),能用工具做结构校验。
和普通HTML表格的区别
| 维度 | HTML表格 | CALS表格 |
|---|---|---|
| 目的 | 页面展示 | 数据结构化与长期归档 |
| 合并单元格 |
rowspan/colspan 属性 |
morerows="1" / morecols="2"(语义化标记,非渲染指令) |
| 列定义 | 无显式列声明 | 必须有<colspec>明确列名和宽度比例 |
| 标准性 | W3C标准,通用浏览器支持 | OASIS/ISO标准,需专用解析器或XSLT转换 |
基本上就这些。用CALS写表格,重点是把“谁是标题”“一共几列”“每列代表什么”说清楚,而不是怎么好看——结构稳了,样式和转换才好跟上。


















