目錄 / Table of Contents

ODF 1.0~1.4 條款合規追蹤矩陣

建立日期:2026-10-14。這是可重現的條款級基線與缺口盤點,不是完整合規認證。 全部版本的已出版編號條款均登錄,但不將每段規範文字拆成獨立義務逐句裁決。 驗證方法與測試對應另見 條款對測試追蹤。 未連結證據的條款保留為 evidence-gap,不能算成已通過,也不能直接推論功能沒有實作。

索引與來源

ODF 版本 編號條款數 逐條矩陣
1.0 993 odf-1.0.csv
1.1 1,000 odf-1.1.csv
1.2 3,379 odf-1.2.csv
1.3 3,428 odf-1.3.csv
1.4 3,456 odf-1.4.csv
合計 12,256 來源與 schema 鎖定

來源為 OASIS 定案出版物,共 14 份:1.0/1.1 官方 PDF、1.2 主文件及三個 part、 1.3/1.4 各四個 part。不是草案或 latest URL。每份保留 URL、SHA-256、條款數與擷取方式, 另外鎖定 repo 內全部 13 份官方 document/manifest/dsig RNG 的 SHA-256。 schema hash 僅將 CRLF 正規化為 LF,以容許 Git checkout 行尾轉換;BOM、其他空白與內容 仍參與 hash。出版物原始下載的 SHA-256 維持逐位元組計算。 下載的原始出版物保留在 ignored artifacts/odf-conformance-sources,不提交第三方全文。

1.0/1.1 使用 PDF 的出版目錄;1.2~1.4 使用 HTML 編號標題與本檔目錄,包含 HTML 中 以一般段落排版的 appendix。PDF 的 #page= 是出版頁碼。條款編號以版本和 part 分隔, 不假設不同版本的同一編號代表相同要求。

CSV 每列包括穩定 id、版本、part、編號、標題、官方連結、scope、status、schema 名稱 及人工 audit 關聯。HTML 編號標題的直屬文字另保留 normalized prose hash 與 modal-word 計數;這是變更偵測/導航資訊,不是完整 normative obligation 數量。PDF/非標題 appendix 沒有這項資料時保留空值,不製造相等的證據。

證據狀態

狀態 條款列數 可以佐證的結論
structure-only 7,320 標題中的 QName 可對應官方 RNG;有結構驗證入口,尚無整條語意合規證據。
partial-formula-profile 1,669 已有 Safe Large 計算引擎、語意 corpus 與代表性 OASIS oracle;不能聲稱官方 Small/Medium/Large 全部合規。
evidence-gap 3,207 尚缺條款級證據或人工裁決。包含定義、處理語意與關係要求,不全是已確認程式缺陷。
informative 60 出版物明示 non normative 的章節及其子節;不計為合規義務。

父節、子節、非規範性節與義務數量不同;上述列數不可換算成合規百分比。 schema 名稱自動關聯也不證明 matcher 與 Jing 完全等價,更不涵蓋 defaults、參照、語意或 應用程式行為。沒有把未審閱的文字自動判定為範圍外或已支援。

odf-conformance-audits.json 記錄 30 個優先需求、183 個不同條款 關聯、實作路徑、可定位的測試 symbol、優先級及下一步。audit 的 fixed 只表示描述的子要求 已修正;同一條款仍可同時有其他未涵蓋要求,不能提升整列為 fully conforming。

本次修正

需求 ID 原問題 修正與回歸證據
VAL-001 比對原生 schema 前把版本改成該 schema 的合法值。 原始版本不再改寫;1.0/1.1 保留官方 string 語法,由版本規則拒絕未知值,1.2+ 另有 grammar 值域驗證。
VAL-002 Formula/Database 直接跳過整個 document root。 office:formula 相容形狀仍檢查 envelope 並回報警告;更正 Database 不在官方 grammar 的誤判,移除其豁免,必需 datasource 與非法子節點交由官方 pattern 驗證。
VAL-003 1.0/1.1 manifest 輸出未定義的 version 屬性。 根 manifest 與根 file-entry 只在支援版本輸出 version;五版均有正向測試。
VAL-004 舊 manifest 沒有 version 時用 package 預設 1.4 schema 誤判。 缺少宣告時使用偵測文件版本;有宣告時維持 package/document 版本獨立的既有契約。
VAL-005 xml:id 只檢查葉節點,不檢查跨節點重複。 ODF3104 在每個 XML 串流內檢查唯一性;不同嵌入 XML 文件可使用同一 ID。
VAL-006 嵌入文件用外層 schema,並把自己的版本改掉。 pattern 與 namespace scan 使用嵌入文件的宣告版本;已知五版可接受,未知版明確回報。
GAP-006 無 manifest version 的舊 package 載入後版本回復至 1.4。 解密後從核心 XML 根恢復版本;同步/非同步載入與再儲存保留 1.0/1.1。
PRODUCER-001 ChartClass 接受未加前綴的名稱卻原樣輸出。 setter 正規化為 chart: token;getter 與 round-trip 傳回 canonical token。已有前綴維持。
PRODUCER-002 影像新增/替換後,把 image 放在 title/desc 之後。 影像內容插入 metadata 之前;重複替換保留 accessibility metadata,非法逆序仍被 schema 拒絕。
PRODUCER-003 資料表描述使用 query 專屬的 db:command。 命令保留在有文件定義的 SDK 擴充命名空間,須使用 Extended;讀取舊值並在更新時移除舊屬性。
VAL-007 Strict 也先刪除 foreign content,可能讓非法內容通過。 Strict 直接比對原始 grammar;Extended 才使用 foreign-content 處理。metadata 登錄也不能取代 grammar。

新增最小正負案例見 OdfConformanceGapTests.cs。 前一輪的 named range、drop-down、master template 修正另外以 STRUCT-004~006 連結既有 OasisOdf13RegressionTests.cs,不當作本次新增工作。

仍屬 SDK 的驗證缺口

優先級/ID 未涵蓋範圍 裁決
P1/EXEMPT-001 裸 MathML 的完整 grammar。 明確的 validator-gap;現在有 ODF3103 警告,但沒有修成完整 MathML 驗證。
P1/EXEMPT-002 SDK office:formula 相容形狀與 Database 參照語意。 Database 已使用官方 grammar,不再豁免;office:formula 非官方 body 分支,仍有明示相容限制,不能算成官方 Formula 合規。
P1/GAP-001 IDREF、style/name、跨串流參照的目標解析與 scope。 重複 xml:id 已修正;沒有因此宣稱全部參照可解析。
P1/GAP-003 QName/namespacedToken 的 namespace 與相等比較。 data 節點已接入目前元素的 prefix binding 與 whitespace collapse;literal QName 的展開名稱相等比較及完整 facet 證據仍未完成。
P1/GAP-002 XML Schema whitespace/value-space/facet/regex 與 RELAX NG 引擎的完整等價性。 evidence-gap;已修正屬性與子內容選擇不同 choice 分支的缺陷,但仍需按官方實際 pattern 的正負 oracle 持續盤點,不能聲稱整個 matcher 已認證。
P1/GAP-004 RDF metadata 列舉、relative IRI 與 pkg ontology 關係。 有 RDF API,但缺 profile 層的完整條款證據;不能歸為沒有 RDF 功能。
P1/GAP-005 package consumer 的完整 IRI 解析步驟。 ZIP 路徑安全不等於 IRI consumer 合規;先盤點各 resolver,不以一律拒絕 .. 取代規範。
P1/CRYPTO-001~002 簽章真實性、信任、撤銷及 encryption 的版本/profile 組合。 有專用 API、schema 與外部 corpus;profile grammar 通過不代表密碼學與所有組合合規。
P1/FORMULA-001 完整 OpenFormula evaluator 義務。 核心已有 388 函式計算引擎及代表性 oracle,不能把公式重算整體列為 SDK 範圍外。完整官方 evaluator 合規仍未宣稱。

ODF3103 是 Warning;OdfValidationReport.IsValid 表示沒有 blocking issues,不代表全部 檢查已執行。需要完整覆蓋的採用者應檢查 warnings 與本矩陣,而不是只看 IsValid。

範圍外與刻意安全排除

  • GUI authoring tool 的提示、鍵盤操作及實際輔助技術互動,屬互動應用程式;文件 XML 的 accessibility 結構、屬性與保留仍屬 SDK。部分相關指南本身是 non normative。
  • 不受信任的 script/macro host 與實際 SQL server 執行,屬外部執行環境;語法、封裝、 保留及 policy 診斷仍屬 SDK,沒有豁免其 XML。
  • Safe OpenFormula profile 刻意排除 DDE 自動執行。這是安全排除/profile 偏差,不能提升成 官方 Large evaluator 合規;不是宣稱 SDK 完全不支援公式。
  • 像素一致性不屬於核心結構驗證器的判定,但專案已有 Rendering/PDF/轉換 extension; 不把它們的能力或缺口籠統排除於整個 SDK。其品質與互通證據另由 renderer 測試處理。

維護與閘門

本次本機驗證(2026-10-14):新增 31 個 C# 回歸案例;.NET 8/10 各 546 項相關測試 通過,兩個測試 TFM 的 analyzer build 與函式庫 API verify 均為零警告、零錯誤。 內建 corpus 278/278 通過(273 個有效文件來回讀寫無失敗);OASIS corpus 37/37 通過,TDF baseline 沒有差異或例外。另有 5 個矩陣擷取回歸測試、重建一致性、XML Reader 安全、文件連結、CI 資源政策與資源限制壓力測試通過。這些是本次修正的驗證證據, 不提升本矩陣的完整合規宣稱。

日常/CI 使用不需網路的契約檢查:

./eng/Test-OdfConformanceMatrix.ps1

它檢查條款完整數量、唯一 ID、來源、status、schema SHA-256、audit 關聯,以及實作檔與 測試 symbol 存在;這些是可追蹤性檢查,不能代替實際執行回歸測試。 外部 baseline workflow 已呼叫此檢查,不新增排程、下載、產品相依或高成本 job。

重建前依 sources.json 的固定 URL 取得 14 份原始 publication,放入該文件指定的檔名, 並驗證下載 SHA-256。使用 Python 3 與 PDF 讀取相依 pypdf:

python eng/Build-OdfConformanceMatrix.py --source-dir artifacts/odf-conformance-sources
python eng/Build-OdfConformanceMatrix.py --source-dir artifacts/odf-conformance-sources --verify
python eng/testdata/Test-OdfConformanceMatrix.py

重建時 review 出版物 hash、條款增刪及 audit 對應;不能因 schema/generated metadata 有名字就把 status 升級為完全符合。一般測試不重新下載官方全文。