1、什么是OPC
我的理解是,OPC是一种开放的打包约定、一种类似于文件归档、打包压缩的格式,可以接受通用的zip进行打开,很多文件都是使用OPC进行打包,例如微软的docx、pptx;从使用的角度来说,docx文件就单单是一个独立的文件,但是从开发的角度来说,这个文件是由多个xml标记的数据文件和文档内容、以及嵌入的的图片、音乐和其他格式的文件组成,所以OPC就对如何打包这些文件进行了一些规范和约定,方便开发者进行读取和生成OPC文件,并进行二次开发。
2、Package
最直观观察package的方式就是,直接在桌面新建一个ppt文件,然后改后缀名为zip,再解压来看即可,可以直接看到该文件其实是由多部分组成。
包。包是保存部分集合的逻辑实体。包的目的是将文档的所有部分(或其他类型的内容)聚合到单个对象中。[示例:一个带有图片的文档包可能包含两部分:一个表示文档的XML标记部分,另一部分表示图片。该包还可以存储部件之间的关系。包提供了一种方便的方法,将文档中的所有组件(如图像、字体和数据)分发。虽然这个开放包装规范定义了一个单一的文件包格式,包模型允许将来定义其他物理包表示。
这种开放式的包装规范还定义了一个URI方案,包的URI,允许URI作为包内部件寻址的统一机构。
3、Parts
部件。各种部件组成了package。
在package中的
部件组成如下:
名字 | 描述 | 必须/可选择 |
---|---|---|
name | 部件的名字 | 必须 |
content type | 存储在部件中的文件类型 | 必须 |
growth hint | 留空 | 可选择 |
name要求如下:
A part name shall not be empty.
A part name shall not have empty segments.
A part name shall start with a forward slash (“/”) character.
A part name shall not have a forward slash as the last character.
content type要求如下:
每个part都有一个内容类型,它标识了存储在该部分中的内容的类型。内容类型定义媒体类型、子类型和可选的参数集
在OPC中定义的部件的所有XML内容应符合以下验证规则:
1、XML编码应该为UTF8或者UTF16。
2、DTD声明不应用于在这个开放包装规范中定义的XML标记中。
3、XML内容不得含有的元素或属性从“XML”或“XSI”命名空间,除非他们明确XSD架构中或以其他方式在这打开的包装规范描述的定义。
4、Part Addressing
Parts often contain references to other parts。一个包可能包含两个部分:XML标记文件和图像。标记文件保存对图像的引用,以便在处理标记文件时,可以识别和定位相关联的图像。
5、Relationships
部件通常包含对包中其他部分和包外资源的引用。一般来说,这些引用以特定于内容类型的方式在引用部分中表示,即在任意标记或特定于应用程序的编码中。这有效地隐藏了来自不理解包含此类引用的部分内容类型的消费者之间的内部和外部链接。包引入了一种更高层的机制来描述从其他部分到内部或外部资源的引用:关系。关系表示源部分和目标资源之间的连接类型。他们使连接直接发现没有看的部分内容,所以他们是独立于特定内容的模式和快速解决。关系提供了第二个重要功能:关联部分而不修改内容。有时关系作为标签,其中标记部分的内容类型没有定义附加给定信息的方法。有些场景需要将信息附加到现有的部分而不修改该部分,或者因为该部分已加密且无法解密,或者由于它被数字签名并更改它将使签名无效。
组成部分
名字 | 描述 | 必须/可选择 |
---|---|---|
id | 有效的XML标识符 | 必须 |
type | 要求类型属性是一个URI | 必须 |
target | 也是一个URI | 必须 |