基本 VML 类型
本主题介绍 VML,从 Windows Internet Explorer 9 开始该功能已弃用。 依赖于 VML 的网页和应用程序应迁移到 SVG 或其他广受支持的标准。
注意
从 2011 年 12 月开始,本主题已存档。 因此,它不再积极维护。 有关详细信息,请参阅存档内容。 有关当前版本 Windows Internet Explorer 的信息、建议和指南,请参阅 Internet Explorer 开发人员中心。
Contents
介绍
此建议使用下表中列出的少量基本类型。
类型 | 元素 | 基本表示形式 | 说明 |
---|---|---|---|
boolean | 1 位 | 一个布尔值:true 或 false。 | |
分数 | 数字 2 6 | 一个数值,按 2 6 (65536) 进行量化,并存储为有符号整数。 | |
纵坐标 | 30 位带符号整数 | 坐标的一部分(例如在路径中),由 coord 定义的值。 | |
length | EMU | 物理长度,例如线条宽度或字体大小。 | |
Measure(度量值) | EMU 或数字 2 6 | 物理长度(包括许多设备像素)或某些其他数量的一小部分。 | |
angle | 度数 2 6 | 一个角度;若为正,则表示顺时针。 | |
color | c | complex | 一个元素,允许派生颜色。 |
font | font | complex | 字体的描述。 |
位图 | 位图 | href | 对外部图片文件的引用。 |
vector | v | complex | 矢量路径的描述 |
“基本表示形式”是最高精度的表示形式,其中建议需要维护一致性实现;如果实现无法以所需的精度表示数据,则数据将丢失。 颜色、字体和矢量类型对应于自身具有结构的元素 -- 从某种意义上说,它们不是基本类型;然而在此建议中,将它们视为此类型便于操作。
每个非复杂基本类型都有一个具有相同名称的关联元素。 这些元素名称是保留的,并且不能用于扩展中的任何其他目的,即使是在 onview="skip" 扩展元素内使用也是如此。 因此,只要值包含在“类型”元素中,遇到未知 XML 的实现就有可能为未知 XML 提供有效内部存储。
<new:tag>1.578</new:tag>
<new:tag><v:fraction>1.578</v:fraction></new:tag>
在上面的第一个示例中,字符串“1.578”必须存储为字符序列(实现不知道它是字符串还是数字);在第二个示例中,分数元素指示内容是一个数字,因此它可以转换为高精度分数表示形式。
复杂类型(包括位图)具有用于分隔值的关联元素名称。 这通过确保更复杂的分析任务与唯一元素标记相关联来简化分析。
boolean
boolean
<!entity % boolean "#pcdata" -- or nmtoken in an attribute -- >
布尔值表示为指示标志状态的关键字。 定义了以下关键字。
true 的值 | false 的值 |
---|---|
true | false |
是 | 否 |
on | 关闭 |
t | f |
1 | 0 |
实现可以写入任何值,并且必须识别所有值。 实现可以随意地将值从一种表示形式更改为另一种表示形式。
fraction
fraction
<!entity % fraction "#pcdata" -- or nmtoken in an attribute -- >
此建议中的所有数值(即无维数量的值)都可按 2 6 (65536) 进行量化来存储为整数。 可以采用此形式提供数字,包含后缀 f 或作为没有后缀的十进制数。 因此,以下假设元素表示相同的值。
<fillwidth>0.25</fillwidth>
<fillwidth>16384f</fillwidth>
带有 f 后缀的数量必须是整数;不允许使用分数。 生成的整数必须可表示为 32 位 2 补数有符号数;因此,表示形式的有效范围为 32768(事实上,小于 32768 且大于或等于 -32768。)
需要一致性实现来保留以 f 值表示的值。 以十进制数表示的值可以转换为 f 值,并以这种方式存储。 应用程序可以用任何适当的单位记录内部生成的值;但是,从现有文档读取的值必须保持完整的原始精度,或者必须转换为 f 值。
如果实现无法做到这一点,它必须提醒用户,让其知道数据可能会丢失。 (在首次遇到外部生成数据时发出此类警告是可以接受的。)
将十进制值转换为 f 格式时,实现可以使用任何算术舍入模式;但是,必须完全将整数转换为 f 格式。 建议实现通过舍入到负无穷来转换,并且转换始终精确。
纵坐标
ordinate
<!entity % ordinate "#pcdata" -- or nmtoken in an attribute -- >
由 coord 建立的坐标系的单位是某种名义类型,称为纵坐标。 这是长度的度量值,但它仅与 coord 建立的矩形有关。 纵坐标类型的任何值都将按 coord 的 w 和 h 值以及生成的比率进行量化,其中该比率用于在输出设备上建立实际度量值。
一致性实现必须能够处理最多 30 位(带符号)的纵坐标值,即 31 位有符号整数,而不是 32 位有符号整数。 但是,建议实现尝试为路径和类似元素生成具有大约 16 位精度坐标。 这将最大程度地减少在非一致性实现中下溢或溢出的可能性。
纵坐标值始终是整数。 小数点不能出现在纵坐标类型的值中。 不能将单位说明符追加到纵坐标类型的值。
length
length
<!entity % length "#pcdata" -- or nmtoken in an attribute -- >
长度是实际度量值,有时是用设备像素表示的度量值。 建议实现不要使用设备像素 (px)。
允许对长度使用所有标准的 CSS1 单位限定符。 此外,可以使用限定符 emu。 此限定符指的是一个单位 - EMU(英国公制单位),这是计算机图形中广泛使用的度量数量的公分母。 EMU 为英寸/914400,即每英寸有 914400 EMU。 下表列出了少数常见单位中的 EMU 数。
EMU 数目 | 每英寸数目 | 每毫米数目 | 说明 |
---|---|---|---|
360 | 0.01 | Win32 HIMETRIC | |
12700 | 72 | "point" | |
635 | 1440 | Win32 TWIP | |
762 | 1200 | 高分辨率打印机 |
EMU 不可使用分数。 任何度量值都必须可表示为 ETU 的 32 位有符号整数 - 这会将度量值大小限制为 2348 英寸(约 59 米或 65 码)。 由于度量值始终指在名义上屏幕或页面大小的输出设备上呈现的大小,因此它们始终在此范围内。
但请注意,这种表示形式不适合实际度量值,并且在记录这些度量值的情况下(例如,要记录路径的实际大小),必须使用其他表示形式。
需要一致性实现来保留表示 EMU 确切数目的值。 用任何其他方式表示的值可以转换为 EMU 值,并以此方式存储。 应用程序可以用任何适当的单位记录内部生成的值;但是,从现有文档读取的值必须保持完整的原始精度,或者必须转换为 EMU 值。
如果实现无法做到这一点,它必须提醒用户,让其知道数据可能会丢失。 (在首次遇到外部生成数据时发出此类警告是可以接受的。)
实际上,物理长度用于此建议中相对较少的度量值。 通常最重要的数据是路径数据,该数据由 coord 基于每个形状在定义的坐标系中进行编码。
备用表示形式
HTML 的标准长度表示形式由 CSS1 定义。 相对单位(像素除外)在此建议中使用长度的上下文中没有意义,不得使用。 如果文档记录预期(目标)像素大小,这会定义像素到 EMU 的转换;否则,应使用 CSS1 定义的默认值 90 dpi。
除 emu 外,任何值都可以十进制分数形式表示。 将十进制值转换为 EMU 时,实现可以使用任何算术舍入模式。 (创作应用程序保证特定结果的唯一方法是在 emu 中指定该结果。)
如果未在长度值中指定单位说明符,实现必须假定 emu。
Measure(度量值)
measure
<!entity % measure "#pcdata" -- or nmtoken in an attribute -- >
度量值是一个可以为长度或分数的数量。 这与 HTML 和 CSS 长度度量值非常相似,在许多情况下,可以是物理度量值或其他数量的百分比。 如果未指定单位说明符,必须假定值为十进制分数(因此,此行为继承自分数,而不是长度。)
与长度不同,像素值具有上下文定义的含义,因此通常不适合转换为 emu。 实现必须维护三种可能的基本表示形式(即,一种表示形式无法在不丢失信息的情况下转换为另一种表示形式)。
- 应以分数格式(“f”值)维护分数值。
- 应以 EMU 的形式维护物理长度。
- 像素值应作为整数像素进行维护。
像素不可使用分数。
备用表示形式
angle
angle
<!entity % angle "#pcdata" -- or nmtoken in an attribute -- >
角度的基本表示形式是度数乘以 2 6 (65536),并存储为整数。 由于坐标空间反转(正 y 轴向下),顺时针角度为正。 需要一致性实现才能保留此类值的完整精度。
实现可对角度使用任何范围,并可将角度规范化(例如 -180 到 +180 或 0 到 360)。 实现不需要保持一致;但是,角度的整数表示形式不能超过 32 位有符号整数的范围。
后缀 fd 用于标识角度的这种表示形式(分数度)。 请注意,这与无维分数的 f 后缀区分开来,尽管可以使用相同的算术来支持它。 角度值的默认值是简单的度数,即未量化的值。 这也可以用后缀“ ”(度数符号)来表示;但是,具有合适的文档编码才能使用它 - 因此,后缀 deg 也被定义为表示度数。 下面显示了完整的一组可能的后缀。
后缀 | 换算系数 | 注释 |
---|---|---|
fd | 1 | 高精度内部表示形式 |
none、deg | 65536 | Degrees |
rad | 65536pi/180 | Radians |
备用表示形式
量化转换在奇数倍 45 处不连续。 因此,对于任何不确切的数量,明确定义转换都非常重要。 鉴于此,转换的算术定义为向负无穷舍入。
由于在某些实现中可能很难或无法保证这一点,因此将对以下项的使用定义为级别 3 特征:
- 任何分数度值。
- 任何弧度值
因此,限定 fd 的值和未限定的整数值,或者限定 deg 的整数值必须完全由一致性级别 0 实现来处理;其他值则不需要。 强烈建议任何实现都处理从分数度值到量化 (fd) 度数值的精确转换。 无需浮点支持即可完成此操作。
更确切的转换要求将 fd 与 f 区分开来。
color
c
<!element c %color;>
颜色是现代计算机图形学的重要组成部分。 该建议使用既定的方法来指定固定颜色。 但是,图表中的颜色很少是简单的静态颜色;它们通常派生自图表中的其他元素。 这些信息的大部分都是非常特定于应用程序的,因此该建议提供两种非常基本的机制来指定这类行为:
- 颜色可能派生自同一形状中的另一种颜色。
- 为了派生或修改颜色,定义了少量算术运算。
原型形状机制通过允许定义可从中继承颜色的原型,对这一点进行了补充。
color
<!entity % color "( %color-unit; | pure | %color.adjustment; )*">
颜色值是 CSS1 颜色定义的超集。 通过扩展,可以根据形状中的其他颜色或使用 CSS1 定义的整体配色方案确定 RGB 颜色值。
如果元素的值定义为颜色,则元素的内容通过算术运算在相应的 RGB 颜色上根据需要进行修改的单个颜色标记来定义颜色值。
颜色单位
完整的颜色标记集来自各种来源:HTML、CSS1 和此建议。 它们使用 CSS1 中的表示法或为 XML 链接定义的 XPointer 表示法定义如下。
在 XPointer 定义中,位置源是包含颜色值的元素,表达式是指形状的整个元素集,就像任何基本原型元素都已与形状合并一样。 当相应的元素不存在时,将使用该元素的默认值来替代它。
Color | 定义 | Level | 说明 |
---|---|---|---|
name | 请参阅以下内容 | 0 | HTML 颜色名称,如下表所示。 |
#rr'gg'bb' | #rr'gg'bb' | 0 | 标准 CSS1/sRGB 颜色表示形式,使用 0..255 范围内的值,每个值使用 2 个十六进制数字表示。 |
#rgb | #rrggbb | 1 | 缩短的 CSS1 形式,仅包含 3 个十六进制数字。 |
rgb(r,g,b) | #(r)(g)(b) | 1 | CSS1 rgb 形式;rgb 值的元素按照 CSS1 中的定义进行转换。 |
fill | ancestor(1,shape) child(1, fill) child(1, color) |
1 | 形状的前景填充颜色。 |
fillBack | ancestor(1,shape) child(1, fill) child(1, back) child(1, color) |
1 | 形状填充的背景色。 |
line | ancestor(1,shape) child(1, line) child(1, color) |
1 | 形状的前景线条颜色。 |
lineBack | ancestor(1,shape) child(1, line) child(1,back) child(1, color) |
1 | 形状的背景线条颜色。 |
lineOrFill | line, fill | 1 | 如果未设为默认值,则为线条值,否则为填充值。 这实际上返回形状边缘的颜色。 |
fillThenLine | fill, line | 1 | 如果未设为默认值,则为填充值,否则为线条值。 这实际上返回主形状颜色(如果未填充形状,则将得到线条颜色)。 |
shadow | ancestor(1,shape) child(1, shadow) child(1, color) |
2 | 阴影的颜色(这是级别 2 特征)。 |
scheme | 请参阅以下内容 | 1 | 来自为文档定义的方案的方案颜色;请参阅下文。 |
scheme(index) | 请参阅以下内容 | 1 | 方案颜色索引,从 0 开始;如下所示。 |
this | 隐式 | 2 | 以其他某种形式(例如定义为位图)定义操作(填充或绘制路径),并且颜色指定了要“修改”颜色,因此是隐式的。 |
palette(index) | 隐式 | 3 | 行为方式与此相同,只不过只在位图颜色表中识别一个条目。 只有在显式声明的情况下才允许。 |
无 | - | 2 | 指示缺少颜色;可用于取消使用颜色的绘图操作。 |
系统 | 请参阅以下内容 | 3 | 系统用户界面定义的颜色。 |
通过此颜色,颜色值可指定修改用其他某种方式派生的颜色;具体来说,可以为位图中的所有颜色指定单个操作。 palette(index) 颜色标识调色板映射位图中的特定条目。 只有在记录应在此类位图中被视为透明的颜色表条目时才使用它。
颜色值的定义不得直接或间接地引用其自身。 如果遇到此类定义,建议(但不要求)实现将未定义的值视为黑色。
HTML 颜色
HTML 定义了下面 16 个颜色名称:
颜色名称和 sRGB 值
黑色 =“#000000”
绿色 =“#008000”
银色 =“#C0C0C0”
柠檬色 =“#00FF00”
灰色 =“#808080”
橄榄色 =“#808000”
白色 =“#FFFFFF”
黄色 =“#FFFF00”
褐紫红色 =“#800000”
海军蓝 =“#000080”
红色 =“#FF0000”
蓝色 =“#0000FF”
紫色 =“#800080”
青色 =“#008080”
紫红色 =“#FF00FF”
水绿色 =“#00FFFF”
方案颜色
方案引用的方案颜色使用名称属性为“主题颜色方案”的元标记在文档级别定义。
<meta name="Theme Color Scheme"
content="rrggbb, rrggbb, rrggbb, rrggbb, rrggbb, rrggbb, rrggbb, rrggbb">
此标记最多允许定义 8 种方案颜色。 未定义的颜色应默认为黑色。 借助方案颜色,只需要更改“主题颜色方案”内容就能更改用于完整文档的颜色方案。 为了确保从不同的创作应用程序导入的图形能够一致地使用方案颜色,请定义以下解释。 “用法”是用途的简短说明,“描述”列提供了其他详细信息。
索引 | 名称 | 使用情况 | 说明 |
---|---|---|---|
0 | scheme.background | 背景 | 用于图形背景的颜色(经常用于整个页面)。 |
1 | scheme.text | 文本和线条 | 附加到形状的文本的颜色和标准线条颜色。 |
2 | scheme.shadow | 阴影 | 标准阴影颜色 - 通常用于形状阴影的颜色。 |
3 | scheme.title | 标题文本 | 用于标题或标题文本的颜色。 |
4 | scheme.fill | 填充 | 标准填充颜色 - 通常用于填充形状的颜色。 |
5 | scheme.accent | 突出 | 用于强调图形重要元素的普通“高亮”颜色。 |
6 | scheme.hyperlink | 主题和超链接 | 用于超链接的高亮颜色。 可用于其他目的,其中颜色表示指向其他信息的链接。 |
7 | scheme.followed | 主题和关注的超链接 | 用于关注的超链接的高亮颜色;也适用于“向后”链接。 |
可按名称或索引引用方案颜色,因此 scheme.fill 和 scheme(4) 表示相同的颜色。
如果未指定颜色,则方案颜色不参与默认方案。 无论方案颜色 4 的颜色如何,都必须始终将未指定的填充颜色解释为白色。 “主题”颜色应与背景色 (0) 和填充颜色 (4) 形成对比,文本和标题文本颜色应具有相同的属性。 一种标准技术是使主题着色,使标准文本不着色(通常是黑色或白色)。
系统颜色
应用程序有时会根据图形中的操作系统设置记录颜色。 这些通常是暂时性的,不需要写出;系统颜色定义仅用于支持此情况。 通过在新命名空间中定义适当的标记并在元素内容中插入适当的信息来引入系统颜色。
此建议定义了这样一个标记来编码 winuser.h 标头文件中定义的 Windows 用户界面颜色。
win.color
<!element win.color #pcdata>
元素的内容是一个整数,其中包含 winuser.h 中相关 COLOR_ 定义的值。 对于任何系统或应用程序特定的颜色规范,都可以采用类似的技术。 强烈建议仅为了向后兼容性而使用此特征。
纯色
pure
<!elementpure empty>
如果 <pure/> 元素出现在颜色值中,则提示不应使用抖动模式来取近似颜色。 这是级别 1 特征,一致性实现不需要采用它。 对于在中等分辨率设备(例如视频显示器)上显示的图形,这种指定很重要,其中小特征(例如线条)可能会导致出现抖动色的糟糕失真。 在打印机等设备上,除少数完全饱和颜色外,通常所有颜色都会抖动,因此,抖动通常足够精细,可以避免此问题。
颜色调整
可以通过对 RGB 值进行算术运算来调整基色。 这些操作是使用颜色值中的其他元素定义的。 仅当应用于派生自其他元素的颜色时,此类调整才有用。 对固定颜色值指定此类调整是有效的;但是,允许实现将此值减少到相应的 RGB 值,并存储该值而不是原始值。
本部分中所述的所有颜色调整特征都是级别 1 特征。
color.adjustment
<!entity % color.adjustment -- change to make to a color --
"( %color.op; )?, ( %color.adj; )*"
>
color.op
<!entity % color.op -- arithmetic operation --
"( darken | lighten | add | subtract | reverseSubtract |
blackWhite )"
>
<!element darken %color.parameter;>
<!element lighten %color.parameter;>
<!element add %color.parameter;>
<!element subtract %color.parameter;>
<!element reversesubtract %color.parameter;>
<!element blackwhite %color.parameter;>
color.parameter
<!entity % color.parameter "#pcdata" >
color.adj
<!entity % color.adj -- additional adjustment to color --
"invert | invert128 | gray"
>
<!element invert empty>
<!element INVERT128 empty>
<!element gray empty>
前 6 个运算的参数是 0 到 255 范围内的单个整数值。 调整针对 3x8 位 RGB 值执行,如下所示:
如果指定了 <gray/>,RGB 值将替换为 yyy,其中 y 是根据 ITU-r BT.709 从 RGB 值计算的亮度 (y') 值。 此计算如下所示:
y = 0 2125xr + 0 7154xg + 0 0721xb
如果提供了 color.op 修改,则根据下表单独调整每个组件。 c 是组件值,p 是 color.parameter 值。
操作 Formula darken c := cxp/255 lighten c := 255 - (255-c)xp/255 add c := c + p subtract c := c - p reversesubtract c := p - c blackwhite 如果 c < p,则 c := 0elsec := 255 在每个情况下,如果计算得到的组件值 c 超过 255,则使用 255;如果小于 0,则使用 0。
如果给定 <INVERT128/>,则根据组件是否小于 128,在每个组件的基础上减去或加上值 128。
if c < 128 then c := c + 128 else c := c - 128
如果给出 <invert/>,则每个组件替换为 255 减去组件的值。
c := 255-c
font
font
<!element font any>
<!attlist font
style cdata #implied>
使用 CSS1 第 5.2 节(字体属性)中定义的样式属性标识字体。 font 元素的正文目前未定义,但将来可能会用于对标准字体信息进行编码。 此建议的初始实现应保留但不解释信息。
可以想象,将来会添加对外部字体信息(可下载字体或共享字体资源)的支持。 这将由 font 元素内容中的 XML 链接元素来完成,确保与初始实现的向后兼容性。
位图
bitmap
<!element bitmap empty>
<!attlist bitmap
XML-link cdata #fixed "simple"
href cdata #REQUIRED
title cdata #implied
behavior cdata #implied
show (embed|replace|new) #fixed "embed"
inline (true|false) #fixed "true"
actuate (auto|user) #fixed "auto"
>
通过 bitmap 元素,可以在图形中包含对外部图片资源(通常为位图)的引用。
位图是级别 1 特征。
behavior 属性可用于指示编辑应用程序应如何处理位图。 该值可以是下列标记中的一个或全部两个。
令牌 | 说明 |
---|---|
separate | 将位图标记为单独的实体,不应将其视为文档的组成部分。 位图不应与文档一起保留。 如果复制文档,不应复制位图;如果移动文档,位图不应随文档一起移动。 |
原配 | title 属性将位图的原始位置标识为 URL;否则,未指定标题的含义。 |
这些值都是关于预期行为的提示。 separate 选项是指 href 引用的数据的行为。 如果同时指定 separate 和 original,则应用程序应忽略 href URI,并根据原始数据重新生成位图。 如果仅指定 original,应用程序应使用 href URI 查找位图,但可能允许用户重新生成它。
使 href URI 和 title 属性具有相同的(词法)值是有效的 - 如果引用的位图未与文档一起“存储”,则这是合适的。 有意为之的行为(但并非必需行为)是,href 用于文档自己的位图副本(如果删除引用形状,可能会删除位图),并且该标题用于指示共享副本。 因此,如果这两者包含相同的值,则没有特定于文档的副本。
如果提示不适合 XML 数据的实际存储模型,应用程序可能会忽略该提示。
图片文件格式
在此建议的上下文中,外部数据始终是用于生成位图的位图或文件。 在呈现级别 0 中,不需要支持任何外部位图格式 - 路径只能用纯色填充。 若要呈现完整的呈现级别 1 填充集,需要支持位图。 呈现级别 1 包括(仅包括)以下格式:
- JFIF,即 ISO/IEC 10918 格式的数据,嵌入在带有 JFIF 标头(可被视为 SOI 标记之后的特定 APP0 标记)的文件中,并且包含 IJG v6 代码支持的 JPEG 格式范围。
- PNG,由 PNG 版本 1.0 规范定义。
呈现级别 2 还包括对以下格式的支持:
- GIF,由 CompuServ 在 1987 年发布的 GIF 规范(通常称为“GIF87a”)定义。 还必须在此级别支持 GIF89a,但有一个限制,即除了图形控件扩展,数据还不得包含任何需要解释才能显示位图的扩展块,而无需用户输入或没有延迟时间。 这允许包含注释,但不允许包含纯文本扩展。 应用程序可以插入应用程序 (0x21, 0xFF) 扩展,但是,使用此建议的术语,这些必须只包含编辑(而不是呈现)数据。
图形中使用的任何其他数据格式都强制该图形至少为编辑级别 3,并且可能为呈现级别 3(如果需要数据来呈现图形)。 建议应用程序发布它支持的格式。 例如,Microsoft Office 本机支持以下附加格式,因此可能用这种形式写入编辑数据:
- WMF - Windows 元文件(Win 3.1 格式)
- EMF - Windows“增强”元文件(Win32 格式)
- PICT - Mac OS QuickDraw PICT 文件(所有版本,但没有 QuickTime 记录或其他扩展)
- BMP - Windows 位图文件格式、“os/2”(BITMAPCORE)、BITMAPINFO、BITMAPV4 和 BITMAPV5 格式
向量
v
<!element v "( #pcdata | p )*">
矢量图形路径编码为 pcdata。 v 元素的内容是混合的,其中包含矢量路径说明,该说明可选择性地使用 p 元素参数化。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈