Open Packaging Conventions (OPC)

  博客地址:www.cnblogs.com/icmzn

  OPC是一个文件容器技术。被微软创建,用来存储XML或者非XML文件结合起来的规范, 称为Open XML Paper Specification (OpenXPS)文档。

  基于OPC文件格式的文档组合了文档元素无关的优势以及文件非常小,与正常的XML相比。

  扩展形式为XML,或者ZIP。

  

1. 用法

  XML Paper Specification (XPS)和Office Open XML (OOXML)使用Open Packaging Conventions (OPC)规范, 提供了常见的ZIP文件格式。 文档在ZIP文件中可以包含其他的text或者binary文件,如PNG,BMP, AVI,PDF,RTF等。 OPC定义了明明规范,和提供了间接的方式允许位置无关,并且不依赖于二进制和XML文件,在ZIP结构中。

  OPC文件可以被常用的ZIP工具打开。

  OPC匀速间接、分块、相对寻址。

2. 采用OPC规范的文件格式如下:

 

3. 编程支持

(1)在Win7之后,OS中提供API 通过COM接口。

(2)可选, ZIP库文件可以用来创建和打开OPC文件。只要合适的文件包含ZIP中。

4. 结构说明

  

  In OPC terminology,在OPC技术术语中:Package对应于ZIP结构, part对应于在ZIP文件中存储的文件。

  每一个part在Package中都有一个唯一的URI, 一个兼容的part Name并关联一个指定的content-type
即MIME media type, 在part中报春数据的类型, 减少重复以及模糊的问题。

  OPC中的Package中也包含relationships, 其定义了package、parts以及外部资源中的关联方式。另外对于目录的层次以及parts, OPC package通常使用 relationships来获取内容。

  relationships由4部分组成:

  ID、source(package或者part在package中的资源)、relationsihip type(URI类的表示类型)、target目标(一个uri指向另一个part在同一个package中或者外部的资源中)

  OPC的 package能保存parts,且part能够包含一些数据类型如:text,image,xml,binary等等其他。注意:“.rels”扩展,是保留的,用于保存关系metadata, 在“/_rels” 子文件夹中。其中子文件夹的名字“_rels”、在项目目录下的".rels"、以及在其他的文件加下“[content_type].xml”文件,这三个名字是保留字,在整个OPC的package中。具体的详细介绍如下:

(1)/[Content_Types].xml file

  在根目录之下。这个文件定义了MIME 媒体类型,用于所有的parts在package中。这个文件基于“文件扩展”定义了默认的匹配关系, 以及通过content-types, 如果与特定默认的文件扩展不同,将会覆盖特定的parts。

  其MIMT类型如下:

 

(2)/_rels

  文件夹/_rels文件夹下的根目录中,保存着package下的所有relationships,并作为整体。文件“/_rels”文件夹一般包括“.rels”文件, 这个.rels文件是一个XML文件,在这个文件保存着the starting package-level relationships.

(3)[partname].rels

  每一个part拥有其自己的relationships。 _rels文件夹,可以在这里找到package中的特定part的关系,即在每一个part的目录之下,可以有一个独有_rels的文件夹,如果独有的_rels有关系,则其会包含一个文件"xxx.rels"。例如, 如果 AAA part 拥有自己的关系,则这将会有一个AAA .xml.rels在当前的文件夹/_rels之下。

  所有的关系(包括根package的关系)都以xml文件来表示。如果用文本打开一个.rels文件,可以看到xml的信息,这些信息定义了所有的关系。典型的关系内容如下:

5. 分块

  鼓励将一个documents分为多个小chunks块。 有以下优势:(1)可以减少file corruptions庞大扩张, (2)其次可以方便接近数据。例如,在一个xmlpart的所有信息类型中,每一个不同的parts的部分,可以快速获取以及产生少量的对象,可以方便的多线程处理对于同一个document

6. 相对寻址

  在OPC 的package中,每一个file都引用它自己的_rels 文件,以相对的方式。这样可以非常容易来cut和paste 一些信息与相关的资源。

 

endl;

  

OPC的理解Open Packaging Conventions的更多相关文章

  1. (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

    标题:Open Document 和 Open XML安全性(OpenOffice.org and MS Office 2007) 摘要,OpenDocument 和 Open XML 都是 Offi ...

  2. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  3. WPF 图片显示中的保留字符问题

    在WPF中显示一张图片,本是一件再简单不过的事情.一张图片,一行XAML代码即可. 但是前段时间遇到了一件奇怪的事: 开发机上运行正常的程序,在某些客户机器上却显示不了图片,而且除了这个问题,其它运行 ...

  4. .net文件压缩和解压及中文文件夹名称乱码问题

    /**************************注释区域内为引用http://www.cnblogs.com/zhaozhan/archive/2012/05/28/2520701.html的博 ...

  5. C#- 压缩和解压缩的研究 .

    用了第二种方法,感觉很不错,其他都没用过了.摘录下来,做一个备忘. 最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip ...

  6. .net中压缩和解压缩的处理

    最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip 参考代码如下: //======================= ...

  7. WPF 中的 Pack URI地(资源文件加载)

    参考资源网http://msdn.microsoft.com/zh-cn/library/aa970069.aspx#Absolute_vs_Relative_Pack_URIs 在 Windows ...

  8. Using XSLT and Open XML to Create a Word 2007 Document

    Summary: Learn how to transform XML data into a Word 2007 document by starting with an existing docu ...

  9. .NET中zip的压缩和解压

    在.NET可以通过多种方式实现zip的压缩和解压:1.使用System.IO.Packaging:2.使用第三方类库:3.通过 System.IO.Compression 命名空间中新增的ZipArc ...

随机推荐

  1. Observer(观察者)-对象行为型模式

    1.意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 2.别名 依赖(Depenents),发布-订阅(Publish-subscribe ...

  2. 转载 --ios 模型-setValuesForKeysWithDictionary

    应用场景:app请求后端数据,返回的数据是JSON形式,如: { "is_favor" = 0; "is_follow" = 0; "is_prais ...

  3. C#中格式化获取到的当前系统时间的各种格式

    public class CustomLanguage : CultureInfo    {        public CustomLanguage(string shortDatePattern ...

  4. ZooKeeper概述(转)

    译自http://zookeeper.apache.org/doc/trunk/zookeeperOver.html ZooKeeper是一个用于分布式应用的开源分布式协调服务.它提供了简单的原语集合 ...

  5. 关于python3.X 报"import urllib.request ImportError: No module named request"错误,解决办法

    #encoding:UTF-8 import urllib.request url = "http://www.baidu.com" data = urllib.request.u ...

  6. codeforces 446C DZY Loves Fibonacci Numbers 线段树

    假如F[1] = a, F[2] = B, F[n] = F[n - 1] + F[n - 2]. 写成矩阵表示形式可以很快发现F[n] = f[n - 1] * b + f[n - 2] * a. ...

  7. oracle创建密码文件的语句

    orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5;

  8. 插入排序 - C语言

    插入排序的思想: 以现有的已排序元素为基础,下一个元素添加到正确的位置,则最终会完成排序. 第一个元素本身是已经排序好的.从第二个开始排. void insertSort(int arr[], int ...

  9. 20145229&20145316 《信息安全系统设计基础》实验三 实时系统的移植

    实验封面 实验内容 1.安装ADS(安装文件在00-ads1.2目录下,破解方法00-ads1.2\Crack目录下) 2.安装GIVEIO驱动(安装文件在01-GIVEIO目录下) 3.把整个GIV ...

  10. photoshopcc基础教程

    web项目中,除了最基础的用java存取数据外,还有重要的h5+css排版以及图片的ps,排版多多看网上人家的好看的界面设计,至于图片,只能自己上手了,设计最终的目的是好看,好看,好看. 接下来,做个 ...