③ File descriptor:
根据表11-4编写File descriptor的XML描述。
<Block name="DataDescriptor"> <Relation type="when" when="int(self.find('lfh_BitFlag.lfh_bf_Zeroed').defaultValue) == 1"/> <String name="dd_Sig" valueType="hex" value="504b0708" token="true" mutable="false"/> <Number name="dd_CRC32" size="32" endian="little" signed="false"/> <Choice name="dd_chooser"> <Block name="dd_64"> <Number name="dd_CompSize64" size="64" endian="little" signed="false"/> <Number name="dd_DecompSize64" size="64" endian="little" signed="false" constraint="'4b50' not in hex(value)"/> </Block> <Block name="dd_32"> <Number name="dd_CompSize32" size="32" endian="little" signed="false"/> <Number name="dd_DecompSize32" size="32" endian="little" signed="false"/> </Block> </Choice> </Block> </Block> |
(2)压缩的目录源数据
根据表11-5编写压缩的目录源数据的XML描述。
<Block name="CentralDirectoryStructure" minOccurs="0" maxOccurs="1"> <Block name="FileHeader" maxOccurs="1024"> <String name="cfh_Signature" valueType="hex" value="504b0102" token="true" mutable="false"/> <Number name="cfh_Ver" size="16" endian="little" signed="false"/> <Number name="cfh_VerReq" size="16" endian="little" signed="false"/> <Flags name="cfh_BitFlag" size="16" endian="little" signed="false"> <Flag name="cfh_bf_Encrypted" size="1" position="0"/> <Flag name="cfh_bf_CompMethod1" size="1" position="1"/> <Flag name="cfh_bf_CompMethod2" size="1" position="2"/> <Flag name="cfh_bf_Zeroed" size="1" position="3"/> <Flag name="cfh_bf_Deflate" size="1" position="4"/> <Flag name="cfh_bf_Patched" size="1" position="5"/> <Flag name="cfh_bf_Strong" size="1" position="6"/> <Flag name="cfh_bf_Unused1" size="1" position="7"/> <Flag name="cfh_bf_Unused2" size="1" position="8"/> <Flag name="cfh_bf_Unused3" size="1" position="9"/> <Flag name="cfh_bf_Unused4" size="1" position="10"/> <Flag name="cfh_bf_EFS" size="1" position="11"/> <Flag name="cfh_bf_Reserved1" size="1" position="12"/> <Flag name="cfh_bf_Enc_Cd" size="1" position="13"/> <Flag name="cfh_bf_Reserved2" size="1" position="14"/> <Flag name="cfh_bf_Reserved3" size="1" position="15"/> </Flags> <Number name="cfh_CompMethod" size="16" endian="little" signed="false"/> <Number name="cfh_LastModTime" size="16" endian="little" signed="false"/> <Number name="cfh_LastModDate" size="16" endian="little" signed="false"/> <Number name="cfh_CRC32" size="32" endian="little" signed="false" mutable="false"/> <Number name="cfh_CompSize" size="32" endian="little" signed="false"/> <Number name="cfh_DecompSize" size="32" endian="little" signed="false"/> <Number name="cfh_FileNameLen" size="16" endian="little" signed="false"> <Relation type="size" of="cfh_FileName"/> </Number> <Number name="cfh_ExtraFldLen" size="16" endian="little" signed="false"> <Relation type="size" of="cfh_FldName"/> </Number> <Number name="cfh_FileCommLen" size="16" endian="little" signed="false"> <Relation type="size" of="cfh_FileComment"/> </Number> <Number name="cfh_DiskNumStart" size="16" endian="little" signed="false"/> <Number name="cfh_IntFileAttrib" size="16" endian="little" signed="false"/> <Number name="cfh_ExtFileAttrib" size="32" endian="little" signed="false"/> <Number name="cfh_RelOffsetLFH" size="32" endian="little" signed="false"/> <String name="cfh_FileName"> <Fixup class="checksums.ExpressionFixup"> <Param name="ref" value="lfh_FileName" /> <Param name="expression" value="data" /> </Fixup> </String> <String name="cfh_FldName"/> <String name="cfh_FileComment"/> </Block> <Block name="CDSDigitalSignature" minOccurs="0" maxOccurs="1"> <String name="cdsds_Signature" valueType="hex" value="504b0505" token="true" mutable="false"/> <Number name="cdsds_DataSize" size="16" endian="little" signed="false"> <Relation type="size" of="cdsds_Data"/> </Number> <Blob name="cdsds_Data" mutable="false"/> </Block> </Block> |
(3)目录结束标识结构:
根据表11-6编写目录结束标识结构的XML描述。
<Block name="EndOfCentralDirectoryRecord"> <String name="eocd_Signature" valueType="hex" value="504b0506" token="true" mutable="false"/> <Number name="eocd_NumOfDisk" size="16" endian="little" signed="false"/> <Number name="eocd_NumOfDiskWCD" size="16" endian="little" signed="false"/> <Number name="eocd_TotNumEntriesOD" size="16" endian="little" signed="false"/> <Number name="eocd_TotNumEntriesICD" size="16" endian="little" signed="false"/> <Number name="eocd_SizeOfCenDir" size="32" endian="little" signed="false"> <Relation type="size" of="CentralDirectoryStructure" isOutputOnly="true"/> </Number> <Number name="eocd_OffsetToCenDir" size="32" endian="little" signed="false"> <Relation type="size" of="LocalFileHeader" isOutputOnly="true"/> </Number> <Block name="ZipFileCommentBlock" minOccur="0" maxOccur="1"> <Number name="eocd_CommLen" size="16" endian="little" signed="false"> <Relation type="size" of="eocd_Comment"/> </Number> <Blob name="eocd_Comment"/> </Block> </Block> |