OPC--open packaging convention学习

OPC是一种开放的打包约定,常用于微软的docx、pptx等文件。它规定了如何打包多个XML、图片等内容,形成Package。Package由Parts组成,每个Part有特定的命名和内容类型。Parts之间的关系通过Relationships描述,而Content Types定义了各Part的内容类型。此外,还包括核心属性、缩略图和OPC的基本目录结构。
摘要由CSDN通过智能技术生成
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 必须
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android 使用poi读取高版本excel, 解决以下这两个错误 java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/xml/stream/XMLEventFactory; at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149) javax.xml.stream.FactoryConfigurationError: Provider com.sun.xml.internal.stream.events.XMLEventFactoryImpl not found at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.XMLEventFactory.newInstance(Unknown Source) at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值