OPC【2】——Relationships

引言

Relationships由一系列Relationship構成。將Abstract Package看做是一個圖數據結構,則Relationships是圖數據中的邊集合。
?

Package Relationships

對于Package Relationships,其所有引用關系的source對象為Abstract Package,或者看做是Abstract Package的一個虛擬根節點。target為包內的其它part節點,或者外部資源。Package Relationships定義于"/_rel/.rels.xml"文件中。其中首部的“/”表示包根路徑。一個簡單"/_rel/.rels.xml"文件內容實例:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" Target="docProps/thumbnail.emf"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
</Relationships>

?

Part Relationships

對于Part Relationships類型。包內part節點可能會引用包內另外的part節點,或者包外資源。對于某一節點,如果其作為source對象,并存在1或者多個Part Relationship類型引用,則會在該節點下創建一個“_rel”目錄,并在其中創建一個"_rels.xml"文件。例如,/docProps/core.xml part節點并沒有引用其它資源, 則/docProps目錄下不存在“rels.xml”文件。而/word/document.xml part節點通常需要引用其它資源,這部分引用信息存儲在 word/_rels/document.xml.rels 中。 以下為一個簡單的/word/_rels/document.xml.rels文件內容實例:

    <?xml version='1.0' encoding='UTF-8' standalone='yes'?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.jpeg"/></Relationships>

注意不論是Package Relationships 或者Part Relationships,source都是唯一的,但target是多樣的。

Each set of relationships sharing a common source is represented by a Relationships part.

?

.rels.xml文件解析

Relationships以XML 文件格式存儲,其根節點元素為復雜類型(complex type) CT_Relationships。根節點下存儲的每一子節點元素為 CT_Relationship。CT_Relationship包含四個屬性值:

- target mode,該屬性為optional,默認取值internal。當target為外部資源時,為external target mode;當target為包內資源時,為internel target mode。
- target, 該屬性為required。如果為internel target mode,則target屬性值為相對引用信息。
- type,  該屬性為required。relationship type 可以以URI形式進行相互比較的。
- id, 該屬性為required。為relationship的唯一標識符,在一個Relationships內,rid具有唯一性。

在docx.opc.oxml.CT_Relationship的實例化定義如下:

class CT_Relationship(BaseOxmlElement):"""``<Relationship>`` element, representing a single relationship from asource to a target part."""@staticmethoddef new(rId, reltype, target, target_mode=RTM.INTERNAL):"""Return a new ``<Relationship>`` element."""xml = '<Relationship xmlns="%s"/>' % nsmap['pr']relationship = parse_xml(xml)relationship.set('Id', rId)relationship.set('Type', reltype)relationship.set('Target', target)if target_mode == RTM.EXTERNAL:relationship.set('TargetMode', RTM.EXTERNAL)return relationship

?

總結

基于Abstract Package Model從docx文檔抽取一個Abstract Package,計算程序要做的第一步便是讀取“/_rel/.rels.xml” Package Relationships 引用關系文件,從而確定虛擬根節點的直接子節點。然后根據“/[Content_Types].xml”分別處理每個直接子節點的xml文件。在處理子節點part對象時,同樣會檢查該子節點是否包含Part Relationships,如果包含,則創建一顆子樹。不斷迭代該過程,并最終將直接子節點與包虛擬根節點連接起來,從而完成Abstract Package抽取。因此創建子節點、加載引用關系是一個“深度優先遍歷”過程。

?

參考資料

《ISO/IEC 29500-2:Open packaging conventions》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39123.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39123.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python機器學習】實驗10 支持向量機

文章目錄 支持向量機實例1 線性可分的支持向量機1.1 數據讀取1.2 準備訓練數據1.3 實例化線性支持向量機1.4 可視化分析 實例2 核支持向量機2.1 讀取數據集2.2 定義高斯核函數2.3 創建非線性的支持向量機2.4 可視化樣本類別 實例3 如何選擇最優的C和gamma3.1 讀取數據3.2 利用數…

Open3D 最小二乘擬合平面(SVD分解法)

目錄 一、算法原理二、代碼實現三、結果展示1、點云2、擬合結果四、優秀博客本文由CSDN點云俠原創,原文鏈接。爬蟲網站自重。 一、算法原理 本文實現矩陣奇異值分解方法的最小二乘擬合平面。原理如下: 對于得到的 n n

歐拉函數(質因子分解)

思路&#xff1a; (1)歐拉函數&#xff1a;輸入n則輸出1~n中與n互質的數的個數。 &#xff08;2&#xff09;計算公式&#xff1a; &#xff08;3&#xff09;證明&#xff1a;&#xff08;容斥原理&#xff09;對于n個數&#xff0c;先分別摘除所有被pi整除的數&#xff0c;…

億信ABI有什么不同,來看最新DEMO演示

為了給用戶營造更好的體驗環境&#xff0c;提供更豐富、更完善的服務&#xff0c;億信華辰旗下核心產品億信ABI DEMO再次上新啦&#xff01;本次億信ABI DEMO環境在原有基礎上煥新升級&#xff0c;帶來了全新的主視覺界面、豐富的行業應用和功能演示DEMO&#xff0c;我們一起來…

季度到季度的組件選擇

組件&#xff1a;<template><div class"quarter"><div class"input-wrap" id"closeId" mouseover"handler" click.stop"btn" :style"{color:colorItem}"><i class"el-icon-date"&…

【Java】BF算法(串模式匹配算法)

?? 什么是BF算法 BF算法&#xff0c;即暴力算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是將目標串S的第一個與模式串T的第一個字符串進行匹配&#xff0c;若相等&#xff0c;則繼續比較S的第二個字符和T的第二個字符&#xff1b;若不相等&#xff0c;則…

【計算機視覺|生成對抗】用深度卷積生成對抗網絡進行無監督表示學習(DCGAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 鏈接&#xff1a;[1511.06434] Unsupervised Representation Learning with Deep Conv…

騰訊云CVM服務器競價實例是什么?和按量計費有什么區別?

騰訊云服務器CVM計費模式分為包年包月、按量計費和競價實例&#xff0c;什么是競價實例&#xff1f;競價實例和按量付費相類似&#xff0c;優勢是價格更劃算&#xff0c;缺點是云服務器實例有被自動釋放風險&#xff0c;騰訊云服務器網來詳細說下什么是競價實例&#xff1f;以及…

NLP——操作步驟講義與實踐鏈接

數據集與語料 語料是NLP的生命之源&#xff0c;所有NLP問題都是從語料中學到數據分布的規律語料的分類&#xff1a;單語料&#xff0c;平行語料&#xff0c;復雜結構 語料的例子&#xff1a;Penn Treebank, Daily Dialog, WMT-1x翻譯數據集&#xff0c;中文閑聊數據集&#xf…

大數據:Numpy基礎應用詳解

Numpy基礎應用 Numpy 是一個開源的 Python 科學計算庫&#xff0c;用于快速處理任意維度的數組。Numpy 支持常見的數組和矩陣操作&#xff0c;對于同樣的數值計算任務&#xff0c;使用 NumPy 不僅代碼要簡潔的多&#xff0c;而且 NumPy 的性能遠遠優于原生 Python&#xff0c;…

mysql-5.5.62-win32安裝與使用

1.為啥是這個版本而不是當前最新的8.0&#xff1f; 因為我要用32位。目前mysql支持win32的版本最新只到5.7.33。 首先&#xff0c;到官網MySQL :: MySQL Downloads 然后選 選一個自己喜歡的版本就好。我這里是如標題版本。下載32位的zip。然后回來解壓。 完了創建系統環境變…

項目實施方案案例模板-拿來即用

《項目實施方案》實際案例模板&#xff0c;拿來即用&#xff0c;原件可獲取。 項目背景 項目目標 項目范圍 項目總體計劃 項目組織架構 5.1. 項目職責分工 項目風險點 6.1. 項目風險分析 6.2. 項目實施關鍵點 項目管理規范 7.1. 項目實施約束 7.2. 項目變更凍結 7…

(三) CUDA 硬件實現

一組帶有on-chip 共享內存的SIMD多處理器 GPU可以被看作一組多處理器, 每個多處理器使用單一指令&#xff0c;多數據架構(SIMD)【單指令流多數據流】 在任何給定的時鐘周期內&#xff0c;多處理器的每個處理器執行同一指令&#xff0c;但操作不同的數據 每個多處理器使用以下…

HASH索引,AVL樹,B樹,B+樹的區別?

1. 什么是 Hash 1.1 Hash 函數 Hash 本身其實是一個函數&#xff0c;又被稱為散列函數&#xff0c;它可以大幅提高我們對數據的檢索效率。因為它是散列的&#xff0c;所以在存儲數據的時候&#xff0c;它也是無序的。 Hash 算法是通過某種確定性的算法(例如MD5&#xff0c;S…

virtualBox橋接模式下openEuler鏡像修改IP地址、openEule修改IP地址、openEule設置IP地址

安裝好openEuler后,設置遠程登入前,必不可少的一步,主機與虛擬機之間的通信要解決,下面給出詳細步驟: 第一步:檢查虛擬機適配器模式:橋接模式 第二步:登入虛擬機修改IP cd /etc/sysconfig/network-scripts vim ifcfg-enpgs3 沒有vim的安裝或者用vi代替:sudo dnf …

關于consul的下載方法

linux下 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo sudo yum -y install consulwindow下 https://developer.hashicorp.com/consul/downloads 然后把里面的exe文件放在gopath下就行了 驗證…

打造專屬花店展示小程序

在當今社會&#xff0c;微信小程序已經成為了各行各業拓展客戶資源的利器&#xff0c;而花店行業也不例外。通過打造一個獨特的花店小程序&#xff0c;你可以為你的花店帶來更多的曝光和客戶資源。那么&#xff0c;如何制作一個專屬的花店小程序呢&#xff1f;下面我們就來一步…

圖像像素梯度

梯度 在高數中&#xff0c;梯度是一個向量&#xff0c;是有方向有大小。假設一二元函數f(x,y)&#xff0c;在某點的梯度有&#xff1a; 結果為&#xff1a; 即方向導數。梯度的方向是函數變化最快的方向&#xff0c;沿著梯度的方向容易找到最大值。 圖像梯度 在一幅模糊圖…

電子商務類網站需要什么配置的服務器?

隨著電子商務的迅猛發展&#xff0c;越來越多的企業和創業者選擇在互聯網上開設自己的電商網站。為了確保電商網站能夠高效運行&#xff0c;給用戶提供良好的體驗&#xff0c;選擇合適的服務器配置至關重要。今天飛飛將和你分享電子商務類網站所需的服務器配置&#xff0c;希望…

【實際開發19】- 壓測 / 調優準備

目錄 1. Jmeter 2. Jmeter 環境部署 1. 配置 : 臨時修改語言 ~ Options → Choose Language → Chinese 3. Jmeter 并發測試 0. 提示 : Postman 測試是“串行”的 , 無法測試并發請求 1. daiding 1. Jmeter 下載 : Apache JMeter - Download Apache JMeter 詳參&#xf…