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. 写出易调试的SQL—西科软件

    1.前言 上篇 写出易调试的SQL , 带来了一些讨论, 暴露了不能重用执行计划和sql注入问题, 十分感谢园友们的建议 . 经过调整后 ,将原来的SQLHelper 抓SQL 用做调试环境用, 发布 ...

  2. socket阻塞与非阻塞,同步与异步

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 转自:http://blog.csdn.net/hguisu/article/details/7453390 1. 概念理解 在进行网 ...

  3. powerdesigner连接数据库 导出数据

    powerdesigner连接数据库 导出数据 生成PDM文件 傻瓜试教程   也可下载文档:http://download.csdn.net/detail/shutingwang/6378665  ...

  4. yarn container启动失败

    在yarn资源管理的集群上运行spark程序,无法读取的数据多与少,都会报这个错误,但是其他程序在集群上能够正常运行. 16/11/14 00:13:44 WARN cluster.YarnSched ...

  5. C++中数据对齐

    大体看了看数据对齐,不知道是否正确,总结如下: struct A { char name; double dHeight; int age; }; sizeof(A) = (1+7+8+4+4) =  ...

  6. C#实现自动单击

    最新玩了一下上学时候玩的游戏,但游戏里面变化太多了,进去后等级就很高,要不停地点击鼠标加技能. 所以利用工作中常用的C#调用 API不停地点击鼠标. 如图: 为方便在基础上修改,我把整个解决方案放到百 ...

  7. Use Apache HttpClient to Post json data

    import org.apache.commons.io.IOUtils;import org.apache.http.HttpResponse;import org.apache.http.clie ...

  8. XAF学习笔记2,关于XAF

    简单的说下XAF,王北的博客写得非常好了.我就不在啰嗦, XAF能解决几个问题 1,不用自己创建数据库(设定好Model自动创建数据库,我们只要配置好app.config文件的数据库路径就行.) 2, ...

  9. cx_freeze安装使用

    在windows下 安装比较方便又专门的安装包 然后cmd 进入 c:\python33\Scripts >cxfreeze E:\main.py --target-dir E:\ 前面是源文件 ...

  10. MD5 加密的密码在数据库重置

    如果不小心更改掉了项目管理员帐号的密码而又忘了,存在数据库里的密码又是MD5加密后的,这时候怎么办呢? 1. oracle数据库,可以用DBMS_OBFUSCATION_TOOLKIT.MD5 ( i ...