基本 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 或數位 2 6 | 實體長度,包括一些裝置圖元,或某些其他數量的分數。 | |
角度 | 度 2 6 | 角度;正為順時針。 | |
color | c | complex | 允許衍生色彩的專案。 |
字體 | 字體 | 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」 必須儲存為字元序列(實作不知道它是字串或數位):在第二個範例中,fraction 元素表示內容是數位,因此可能會轉換成高精確度分數表示法。
複雜類型(包括位圖)具有用來分隔值的相關項目名稱。 這可藉由確保更複雜的剖析工作與唯一元素標記相關聯,藉此簡化剖析。
boolean
boolean
<!entity % boolean "#pcdata" -- or nmtoken in an attribute -- >
布爾值會以關鍵詞表示,指出旗標的狀態。 已定義下列關鍵詞。
true 的值 | false 的值 |
---|---|
true | false |
是 | 否 |
on | 關閉 |
t | f |
1 | 0 |
實作可能會寫入任何值,而且必須辨識所有值。 實作可以自由地將值從一個表示法變更為另一個表示法。
分數
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 -- >
協調所建立座標系統的單位屬於某種名義型別,稱為序號。 這是長度的量值,但只適用於共同建立的矩形。 任何類型的 ordinate 值都會依 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。 下表列出少數常見單位中的 ETU 數目。
EMU 數目 | 每英吋數目 | 每公厘數目 | 描述 |
---|---|---|---|
360 | 0.01 | Win32 HIMETRIC | |
12700 | 72 | “point” | |
635 | 1440 | Win32 TWIP | |
762 | 1200 | 高解析度印表機 |
不允許使用 EMU 的小數。 任何測量都必須以 32 位帶正負號的 EMU 整數來表示,這會將測量的大小限制為 2348 英吋,大約 59 公尺或 65 碼。 由於度量一律會參考名義上螢幕或頁面大小輸出裝置上的轉譯大小,因此它們一律會在此範圍內。
不過,請注意,表示法不適用於真實世界度量,以及記錄這些度量的位置(例如,若要記錄路徑的實際大小),則必須使用一些其他表示法。
必須有一個符合規範的實作,才能保留實際數目的 EMU 值。 以任何其他方式表示的值可以轉換成 EMU 值,並以這種方式儲存。 允許應用程式在任何適當的單位中記錄內部產生的值;不過,從現有檔讀取的值必須維持為完整的原始有效位數,或必須轉換成 EMU 值。
如果實作無法執行這項操作,它必須警告用戶數據可能會遺失。 (第一次遇到外部產生的數據時,可以接受發出這類警告。
在實務上,實體長度用於此提案中相對較少的度量。 通常最重要的數據是路徑數據,而此數據會透過共同排序,在根據每個圖形定義的座標系統中進行編碼。
替代表示法
HTML 的標準長度表示是由 CSS1 所定義。 除了圖元之外,相對單位在此提案中使用長度且不得使用的內容中沒有意義。 如果文件記錄預定的(目標)圖元大小,這會定義圖元轉譯為EMU;否則,應該使用 CSS1 所定義的預設值 90 dpi。
除了 emu 之外,任何值都可以指定為小數點。 當十進位值轉換成EMU時,實作可能會使用任何算術四捨五入模式。 (撰寫應用程式保證特定結果的唯一方法是在emu中指定它。
如果長度值中未指定任何單位規範,則實作必須假設 emu。
量值
measure
<!entity % measure "#pcdata" -- or nmtoken in an attribute -- >
量值是長度或分數的數量。 這與 HTML 和 CSS 長度度量非常類似,在許多情況下,可以是實體測量或某些其他數量百分比。 如果未指定任何單位規範,則必須假設此值為小數點(因此,此行為繼承自fraction,而非長度。
與長度不同,圖元值具有內容定義的意義,因此轉換成emu通常不合適。 實作必須維護的三個可能基本表示法(也就是,一個表示法無法轉換成另一個表示法,而不會遺失資訊)。
- 小數值應該以 分數 格式維持(“f” 值)。
- 實體長度應在 EMU 中維護。
- 圖元值應該維持為整數圖元。
不允許圖元的小數。
替代表示法
角度
angle
<!entity % angle "#pcdata" -- or nmtoken in an attribute -- >
角度的基本標記法是以 2 6 (65536) 乘以 2 6 (65536) 的倍數,並儲存為整數。 因為座標空間是反轉的(正 y 軸是向下),順時針角度是正的。 需要符合實作才能保留這類值的完整精確度。
實作允許使用任何角度範圍,並允許將角度正規化(例如 -180 到 +180 或 0 到 360 )。 實作不需要一致;不過,角度的整數表示不得超過 32 位帶正負號整數的範圍。
尾碼 fd 用來識別角度的這個標記法(小數度)。 請注意,這與無維度分數的 f 尾碼不同,但可以使用相同的算術來支援它。 angular 值的預設值為簡單度,也就是未調整的值。 這也可能會以後置詞 「」 (度符號) 發出信號:不過,使用方式取決於有適當的檔編碼,因此,尾碼 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 色彩定義的 超集合 。 延伸模組可讓 RGB 色彩值從圖形內的其他色彩或使用 CSS1 定義的整體色彩配置來決定。
如果元素的值定義為色彩, 元素的內容 會透過對應 RGB 色彩上的算數運算選擇性修改的單一色彩標記來定義色彩值。
色彩單位
完整的色彩標記集來自各種來源:HTML、CSS1 和此提案。 它們的定義如下,使用 CSS1 的標記法 或針對 XML 連結定義的 XPointer 標記法。
在 XPointer 定義中,位置來源是包含色彩值的元素,而運算式會參照圖形的整個元素集,就好像任何基底原型元素都已與圖形合併一樣。 當對應的專案不存在時,該專案的預設值會用於其位置。
Color | 定義 | 等級 | 描述 |
---|---|---|---|
NAME | 請參閱下文 | 0 | HTML 色彩名稱,如下表所列。 |
#rr'gg'bb' | #rr'gg'bb' | 0 | 標準 CSS1/sRGB 色彩標記法,使用以 2 個十六進位數位表示的範圍 0..255 中的值。 |
#rgb | #rrggbb | 1 | 只有三個十六進位數位的縮短 CSS1 表單。 |
rgb(r,g,b) | #(r)(g)(b) | 1 | CSS1 rgb 表單;rgb 值的元素會依 CSS1 中所 定義來轉換。 |
fill | 祖(1,形狀) child(1, fill) child(1, color) |
1 | 圖形的前景填滿色彩。 |
fillBack | 祖(1,形狀) child(1, fill) child(1, back) child(1, color) |
1 | 圖案填滿的背景色彩。 |
line | 祖(1,形狀) child(1, line) child(1, color) |
1 | 圖形的前景線條色彩。 |
lineBack | 祖(1,形狀) child(1, line) child(1,back) child(1, color) |
1 | 圖形的背景線條色彩。 |
lineOrFill | 線條,填滿 | 1 | 如果未預設,則為行值,否則為填滿值。 這實際上會傳回圖形邊緣的色彩。 |
fillThenLine | fill, line | 1 | 如果未預設,則為填滿值,否則為行值。 這會有效地傳回主圖形色彩(如果圖形未填滿,則結果會是線條色彩)。 |
shadow | 祖(1,形狀) child(1, shadow) child(1, color) |
2 | 陰影的色彩(這是第 2 層特徵)。 |
scheme | 請參閱下文 | 1 | 針對檔所定義之配置的配置色彩;請參閱下方。 |
scheme( index ) | 請參閱下文 | 1 | 配置色彩 索引 ,從 0 開始;請參閱下方。 |
this | 暗示 | 2 | 作業(填滿路徑或繪製路徑)是以其他方式定義(例如,做為點陣圖),且色彩會指定色彩的「修改」,因此隱含。 |
調色盤( 索引 ) | 暗示 | 3 | 行為方式與這個相同,不同之處在于已識別點陣圖色彩資料表中的一個專案。 只允許明確陳述的位置。 |
none | - | 2 | 表示沒有色彩;可用來取消使用色彩的繪圖作業。 |
系統 | 請參閱下文 | 3 | 系統使用者介面所定義的色彩。 |
此色彩可讓色彩值指定修改以其他方式衍生的色彩;特別是,可以針對點陣圖中的所有色彩指定單一作業。 palette( index ) 色彩會識別調色盤對應點陣圖中的特定專案。 只有在這類點陣圖中,才會定義使用此選項來錄製應視為透明色彩資料表專案。
色彩值的定義不得直接或間接參考本身。 如果遇到這類定義,則建議實作將未定義的值視為黑色,但並非必要。
HTML 色彩
HTML 定義下列十六個色彩名稱:
色彩名稱和 sRGB 值
Black = 「#000000」
綠色 = 「#008000」
Silver = 「#C0C0C0」
Lime = 「#00FF00」
Gray = 「#808080」
Olive = 「#808000」
White = 「#FFFFFF」
黃色 = 「#FFFF00」
Maroon = 「#800000」
Navy = 「#000080」
紅色 = 「#FF0000」
藍色 = 「#0000FF」
紫色 = 「#800080」
Teal = 「#008080」
Fuchsia = 「#FF00FF」
Aqua = 「#00FFFF」
配置色彩
配置所參考的配置色彩是在檔層級使用具有 「Theme Color Scheme」 名稱屬性的中繼標籤來定義。
<meta name="Theme Color Scheme"
content="rrggbb, rrggbb, rrggbb, rrggbb, rrggbb, rrggbb, rrggbb, rrggbb">
此標籤允許定義最多八個配置色彩。 未定義的色彩應預設為黑色。 配置色彩允許變更主題色彩配置內容,變更完整檔所使用的色彩配置。 為了確保從不同的撰寫應用程式匯入的圖形會使用配置色彩一致,則會定義下列解譯。 「使用方式」是用途的簡短描述,而「描述」資料行則提供其他詳細資料。
索引 | 名稱 | 使用量 | 描述 |
---|---|---|---|
0 | scheme.background | 背景 | 用於圖形背景的色彩(且經常用於整個頁面)。 |
1 | scheme.text | 文字和線條 | 附加至圖形和標準線條色彩之文字的色彩。 |
2 | scheme.shadow | Shadows | 標準陰影色彩 -- 通常用於圖形陰影的色彩。 |
3 | scheme.title | 標題文字 | 用於標題或標題文字的色彩。 |
4 | scheme.fill | 充滿 | 標準填滿色彩 -- 通常用來填滿圖形的色彩。 |
5 | scheme.accent | 口音 | 用來強調圖形重要元素的一般「醒目提示」色彩。 |
6 | scheme.hyperlink | 輔色和超連結 | 醒目提示用於超連結的色彩。 可用於其他用途,其中色彩代表其他信息的連結。 |
7 | scheme.followed | 輔色和追蹤超連結 | 反白顯示已追蹤超連結的色彩;也適用於「回溯」連結。 |
配置色彩可以依名稱或索引參照,因此 scheme.fill 和 scheme(4) 是相同的色彩。
如果未指定色彩,配置色彩就不會參與預設配置。 不論配置色彩 4 的色彩為何,未指定的填滿色彩都必須一律解譯為白色。 「輔色」色彩應該與背景 (0) 和填滿色彩 (4) 色彩形成對比,而文字和標題文字色彩應具有相同的屬性。 其中一種標準技術是讓輔色和標準文字未著色(通常是黑色或白色)。
系統色彩
應用程式有時會根據圖形內的操作系統設定來記錄色彩。 通常這些是暫時性的,不需要寫出;systemcolor 定義只存在來支持這個。 系統會在新的命名空間中定義適當的標籤,並在項目內容中插入適當的資訊,來引進系統色彩。
此提案會定義這類標記,以編碼 winuser.h 頭檔中定義的 Windows 使用者介面色彩。
win.color
<!element win.color #pcdata>
元素的內容是單一整數,其中包含從 winuser.h 定義的相關COLOR_值。 任何系統或應用程式特定色彩規格都可以採用類似的技術。 強烈建議此功能僅用於回溯相容性。
純色
pure
<!elementpure empty>
如果元素 <純/> 出現在色彩值中,則表示該色彩不應以任一模式近似。 這是層級 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>
前六個運算的參數是範圍0到255中的單一整數數值。 調整會在 3x8 位 RGB 值上執行,如下所示:
如果 <指定灰色/> ,RGB 值會取代為 yyy,其中 y 是從 SRGB 值計算的亮度(y')值,其會遵循ITU-r BT.709。 此計算為:
y = 0 2125xr + 0 7154xg + 0 0721xb
如果指定 color.op 修改,則會根據下表個別調整每個元件。 c 是元件值,p 是 color.parameter 值。
作業 公式 變 暗 c := cxp/255 減輕 c := 255 - (255-c)xp/255 add c := c + p 減去 c := c - p reversesubtract c := p - c blackwhite 如果 c < p thenc := 0elsec := 255 在每個案例中,如果計算的元件值 c 超過 255,則會使用 255,如果小於 0,則會使用 0。
如果 <指定INVERT128/> ,則會根據元件是否小於 128,將值減去或加入至每個元件。
if c < 128 then c := c + 128 else c := c - 128
如果 <指定反轉/> ,則會以 255 取代每個元件減去元件的值。
c := 255-c
font
font
<!element font any>
<!attlist font
style cdata #implied>
使用 CSS1 第 5.2 節 (字型屬性) 中所定義的樣式屬性來識別字型。 字型專案的本文目前未定義,但未來可用於編碼標準字型資訊。 此提案的初始實作應保留,但不應解譯資訊。
可以想像,未來將新增支持離線字型資訊(可下載的字型或共用字型資源)。 這會由字型項目內容中的 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"
>
點陣圖元素允許圖形中包含折線外圖片資源的參考(通常是位圖)。
點陣圖是層級 1 功能。
行為屬性可用來指出編輯應用程式應該如何處理位圖。 此值可以是下列其中一個或兩個令牌。
Token | 描述 |
---|---|
單獨 | 將點陣圖示示為個別實體,不應視為檔的整數部分。 位圖不應與檔一起保留。 如果複製檔,則不應複製位圖;如果文件已移動,則點陣圖不應與其一起移動。 |
原始 | title 屬性會將點陣圖的原始位置識別為URL;否則,不會指定標題的意義。 |
這些值都是預期行為的提示。 個別選項是指 href 所參考之數據的行為。 如果同時指定了個別和原始,應用程式應該會忽略 href URI,並從原始數據重新產生位圖。 如果只提供原始值,應用程式應該會使用 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 “enhanced” 元檔 (Win32 格式)
- PICT -- Mac OS QuickDraw PICT 檔案(但不含 QuickTime 記錄或其他延伸模組的所有版本)
- BMP -- Windows 點陣圖檔案格式、「os/2」 (BITMAPCORE)、BITMAPINFO、BITMAPV4和BITMAPV5格式
vector
v
<!element v "( #pcdata | p )*">
向量圖形路徑會編碼為 pcdata。 v 元素的內容是混合的,其中包含使用 p 元素選擇性參數化的向量路徑描述。