目錄 / Table of Contents

ODF 1.4 逐章稽核紀錄

本文件記錄針對 ODF 1.4(OASIS Standard 文件日期為 2025-10-06)四份正式規格文本, 逐章比對 OdfKit schema/驗證層/公式引擎是否有遺漏新增元素的稽核方法與結論。 稽核基準為 docs.oasis-open.org/office/OpenDocument/v1.4/os/ 下四份官方文本:

  • Part 1:Introduction
  • Part 2:Packages
  • Part 3:Schema
  • Part 4:OpenFormula

稽核方法

每份規格文本皆附有非正式的「Appendix — Changes from Open Document Format ... v1.4」(或對應章節),列出該版本相對於前一版的異動摘要。本次稽核先讀取 各份文本的異動摘要章節,再針對異動項目與 OdfKit 現有程式碼逐一比對, 必要時直接下載官方 RelaxNG schema(.rng)做元素/屬性層級的機械化差異比對。

Part 1(Introduction)

Part 1 為介紹與一致性聲明性質文件,其附錄僅為 Acknowledgments(貢獻者名單), 未附獨立的「異動摘要」章節。Part 1 本身不定義 schema 元素或屬性,因此不會是 schema/驗證層遺漏的來源。結論:無需採取行動。

Part 2(Packages)

Part 2 附錄 D 明確聲明:

No technical changes have been made to Part 2 of this specification for ODF v1.4.

即 manifest/digital signature/encryption 封裝層規格於 1.4 版完全沒有技術異動。 交叉核對 OdfKit 現有實作:

  • manifest:file-entryencryption-dataalgorithmkey-derivationencrypted-keystart-key-generation 已由 OdfManifestLoaderOdfPackageManifestWriter 處理。
  • OpenPGP 型加密(manifest:PGPDataPGPKeyIDPGPKeyPacket)已由 OdfBouncyCastleOpenPgpProviderOdfOpenPgpCryptographyProvider 處理。
  • 數位簽章(ds:Signaturedsig:document-signatures)已由 OdfSignatureSignerOdfSignatureVerifier 處理。

結論:功能面無缺口。 Manifest 與 dsig 已與主要內容 schema 一樣納入 OdfSchemaGenerator 自動化產生管線:ODF 1.0~1.4 manifest 及 ODF 1.2~1.4 dsig 均使用版本化官方 RNG metadata 驗證。文件驗證另會檢查各核心 XML 的 office:version 一致性;manifest:version 則依 Part 2 自身版本化 schema 驗證, 不會誤當成內容 XML 版本。

Part 3(Schema)

以官方 OpenDocument-v1.4-schema.rng 逐一擷取全部 rng:elementrng:attribute 定義名稱,與 OdfKit tools/OdfSchemaGenerator 產生的 schema metadata(OdfKit/Compliance/Generated/Odf14OfficialSchemaProvider.g.cs) 做機械化差異比對:

比對項目 RNG 定義數 OdfKit 產生數 差異
元素(Element) 599 599 0(完全相符)
屬性(Attribute) 1300(含 1 筆) 1299 1 筆表面差異,經查證非真實缺口(見下)

唯一的表面差異是 office:process-content:此屬性定義在官方 RNG 原始碼中 被整段 XML 註解(<!-- removed from text as well ... -->)包住,規格文本本身 已停用此屬性,並非 1.4 新增或現行有效定義。進一步核對 OdfKit 產生的 Odf12OfficialSchemaProvider.g.cs 確認此屬性確實以 OdfVersionRange.Exact(OdfVersion.Odf12) 正確註冊為僅 1.2 版有效—— 即 OdfKit 對此屬性的版本範圍判定與規格沿革完全一致,不是遺漏。

結論:Part 3 內容 schema 元素與屬性層級 100% 對齊官方 ODF 1.4 定義, 無遺漏。

Part 4(OpenFormula)

Part 4 附錄 A 列出以下異動:

  • 說明文字調整:YEAR(§7.4,1583 年特例說明)。
  • 新增函式EASTERSUNDAY(§6.10.8)。
  • 定義變更(語意澄清,非新函式):CONVERT(§6.16.18,Table 24 更新)、 COUNTAINDEXISBLANKISFORMULAISLOGICALISNONTEXTISNUMBERISREFISTEXTNPERPMT

逐一比對 FormulaBuiltinFunctionRegistryOdfFormulaSupport 後, 發現以下真實缺口(已於本次稽核修復):

函式 稽核前狀態 修復內容
EASTERSUNDAY 僅以 LibreOffice 供應商前綴 ORG.OPENOFFICE.EASTERSUNDAY 註冊;ODF 1.4 已將其標準化為無前綴函式名稱,稽核前呼叫 EASTERSUNDAY(...) 會得到 #NAME? 新增 EASTERSUNDAY 標準名稱註冊,共用既有 Gauss 復活節演算法實作;保留舊前綴名稱以維持回溯相容
ISFORMULA 完全未實作(非 1.4 新增,屬既有缺口) 新增 FormulaLogicalFunctionHandlers.EvaluateIsFormula,透過 IEvaluationContext.GetCellFormula 判斷儲存格是否含公式
ISNONTEXT 完全未實作(非 1.4 新增,屬既有缺口) 新增 FormulaLogicalFunctionHandlers.EvaluateIsNonText,與既有 ISTEXT 對稱實作
CONVERT 完全未實作(非 1.4 新增,屬既有缺口) 新增 FormulaMathFunctionHandlers.EvaluateConvertFormulaConvertUnitTable,依 Table 24-26 實作 Area/Distance/Energy/Force/Information/MagneticFluxDensity/Mass/Power/Pressure/Speed/Temperature/Time/Volume 十三個單位群組、十進位與二進位字首換算

其餘 COUNTAINDEXISBLANKISLOGICALISNUMBERISREFISTEXTNPERPMT 皆已實作,本次稽核未發現與 1.4 定義變更相關的 行為缺口(1.4 對這些函式的變更多為邊界案例措辭澄清,未變更既定計算語意)。

結論:發現並修復 4 個真實缺口(1 個 ODF 1.4 新函式的標準命名缺口、 3 個既有規格缺口)。

總結

Part 是否有新增元素/函式 OdfKit 是否已涵蓋 本次動作
Part 1 Introduction 無(非 schema 承載文件) N/A 無需行動
Part 2 Packages 官方聲明零技術變更 是(功能面與官方 RNG metadata) 已納入版本化產生管線與跨檔案版本一致性驗證
Part 3 Schema 599 元素、屬性全數核對 是(100% 相符) 無需行動
Part 4 OpenFormula 1 新函式+12 項定義變更 修復前有 4 項缺口 已修復 EASTERSUNDAYISFORMULAISNONTEXTCONVERT,測試通過

修復程式碼位置:OdfKit/Formula/FormulaLogicalFunctionHandlers.csOdfKit/Formula/FormulaMathFunctionHandlers.csOdfKit/Formula/FormulaConvertUnitTable.csOdfKit/Formula/FormulaBuiltinFunctionRegistry.csOdfKit/Formula/OdfFormulaSupport.cs;對應測試見 OdfKit.Tests/FormulaAndStylesTest.csOdfKit.Tests/OpenFormulaSupportTests.cs