Difference between revisions of "ZIP Module"
(46 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | This | + | This [[Module Library|XQuery Module]] contains functions to handle ZIP archives. The contents of ZIP files can be extracted and listed, and new archives can be created. The module is based on the [http://expath.org/spec/zip EXPath ZIP Module]. Please note that the ZIP module is not being actively maintained but is still distributed for compatibility with older applications. We recommend you use the [[Archive Module]] wherever possible. |
− | == | + | =Conventions= |
− | + | ||
+ | All functions in this module are assigned to the <code><nowiki>http://expath.org/ns/zip</nowiki></code> namespace, which is statically bound to the {{Code|zip}} prefix.<br/> | ||
+ | All errors are assigned to the <code><nowiki>http://expath.org/ns/error</nowiki></code> namespace, which is statically bound to the {{Code|experr}} prefix. | ||
+ | |||
+ | =Functions= | ||
==zip:binary-entry== | ==zip:binary-entry== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:binary-entry|$uri as xs:string, $path as xs:string|xs:base64Binary}} |
|- | |- | ||
− | + | | '''Summary''' | |
− | | | + | |Extracts the binary file at {{Code|$path}} within the ZIP file located at {{Code|$uri}} and returns it as an {{Code|xs:base64Binary}} item. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} the specified path does not exist.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|} | |} | ||
==zip:text-entry== | ==zip:text-entry== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:text-entry|$uri as xs:string, $path as xs:string|xs:string}}<br />{{Func|zip:text-entry|$uri as xs:string, $path as xs:string, $encoding as xs:string|xs:string}} |
|- | |- | ||
− | + | | '''Summary''' | |
− | | | + | |Extracts the text file at {{Code|$path}} within the ZIP file located at {{Code|$uri}} and returns it as an {{Code|xs:string}} item.<br />An optional encoding can be specified via {{Code|$encoding}}. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} the specified path does not exist.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|} | |} | ||
==zip:xml-entry== | ==zip:xml-entry== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:xml-entry|$uri as xs:string, $path as xs:string|document-node()}}<br /> |
|- | |- | ||
− | + | | '''Summary''' | |
− | |Extracts the XML file at | + | |Extracts the XML file at {{Code|$path}} within the ZIP file located at {{Code|$uri}} and returns it as a document node. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} the specified path does not exist.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|} | |} | ||
==zip:html-entry== | ==zip:html-entry== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:html-entry|$uri as xs:string, $path as xs:string|document-node()}}<br /> |
|- | |- | ||
− | + | | '''Summary''' | |
− | | | + | |Extracts the HTML file at {{Code|$path}} within the ZIP file located at {{Code|$uri}} and returns it as a document node. The file is converted to XML first if [[Parsers#HTML_Parser|Tagsoup]] is found in the classpath. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} the specified path does not exist.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|} | |} | ||
==zip:entries== | ==zip:entries== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:entries|$uri as xs:string|element(zip:file)}}<br /> |
|- | |- | ||
− | + | | '''Summary''' | |
− | |Generates an [http://expath.org/spec/zip#spec-file-handling-elements-sect XML Representation] of the hierarchical structure of the ZIP file located at | + | |Generates an [http://expath.org/spec/zip#spec-file-handling-elements-sect ZIP XML Representation] of the hierarchical structure of the ZIP file located at {{Code|$uri}} and returns it as an element node. The file contents are not returned by this function. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} the specified path does not exist.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|- | |- | ||
− | + | | '''Examples''' | |
− | |If the ZIP archive | + | |If the ZIP archive {{Code|archive.zip}} is empty, {{Code|zip:entries('archive.zip')}} returns: |
+ | <syntaxhighlight lang="xml"> | ||
+ | <zip:file xmlns:zip="http://expath.org/ns/zip" href="archive.zip"/> | ||
+ | </syntaxhighlight> | ||
|} | |} | ||
==zip:zip-file== | ==zip:zip-file== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:zip-file|$zip as element(zip:file)|empty-sequence()}}<br /> |
|- | |- | ||
− | + | | '''Summary''' | |
− | |Creates a new ZIP archive with the characteristics described by | + | |Creates a new ZIP archive with the characteristics described by {{Code|$zip}}, the [http://expath.org/spec/zip#spec-file-handling-elements-sect ZIP XML Representation]. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} an addressed file does not exist.<br />{{Error|ZIP0002|#Errors}} entries in the ZIP archive description are unknown, missing, or invalid.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|- | |- | ||
− | + | | '''Examples''' | |
− | |The following function creates a file | + | |The following function creates a file {{Code|archive.zip}} with the file {{Code|file.txt}} inside: |
+ | <syntaxhighlight lang="xquery"> | ||
+ | zip:zip-file( | ||
+ | <file xmlns="http://expath.org/ns/zip" href="archive.zip"> | ||
+ | <entry src="file.txt"/> | ||
+ | </file>) | ||
+ | </syntaxhighlight> | ||
+ | The following function creates a file {{Code|archive.zip}}. It contains one file {{Code|readme}} with the content "{{Code|thanks}}": | ||
+ | <syntaxhighlight lang="xquery"> | ||
+ | zip:zip-file( | ||
+ | <file xmlns="http://expath.org/ns/zip" href="archive.zip"> | ||
+ | <entry name="readme">thanks</entry> | ||
+ | </file>) | ||
+ | </syntaxhighlight> | ||
|} | |} | ||
==zip:update-entries== | ==zip:update-entries== | ||
− | {| | + | {| width='100%' |
|- | |- | ||
− | | | + | | width='120' | '''Signatures''' |
− | | | + | |{{Func|zip:update-entries|$zip as element(zip:file), $output as xs:string|empty-sequence()}}<br /> |
|- | |- | ||
− | + | | '''Summary''' | |
− | |Updates an existing ZIP archive or creates a modifed copy, based on the characteristics described by | + | |Updates an existing ZIP archive or creates a modifed copy, based on the characteristics described by {{Code|$zip}}, the [http://expath.org/spec/zip#spec-file-handling-elements-sect ZIP XML Representation]. The {{Code|$output}} argument is the URI where the modified ZIP file is copied to. |
|- | |- | ||
− | + | | '''Errors''' | |
− | | | + | |{{Error|ZIP0001|#Errors}} an addressed file does not exist.<br />{{Error|ZIP0002|#Errors}} entries in the ZIP archive description are unknown, missing, or invalid.<br />{{Error|ZIP0003|#Errors}} the operation fails for some other reason. |
|- | |- | ||
− | + | | '''Examples''' | |
− | |The following function creates a copy | + | |The following function creates a copy {{Code|new.zip}} of the existing {{Code|archive.zip}} file: |
+ | <syntaxhighlight lang="xquery"> | ||
+ | zip:update-entries(zip:entries('archive.zip'), 'new.zip') | ||
+ | </syntaxhighlight> | ||
+ | The following function deletes all PNG files from {{Code|archive.zip}}: | ||
+ | <syntaxhighlight lang="xquery"> | ||
+ | declare namespace zip = "http://expath.org/ns/zip"; | ||
+ | copy $doc := zip:entries('archive.zip') | ||
+ | modify delete node $doc//zip:entry[ends-with(lower-case(@name), '.png')] | ||
+ | return zip:update-entries($doc, 'archive.zip') | ||
+ | </syntaxhighlight> | ||
|} | |} | ||
− | + | =Errors= | |
+ | |||
+ | {| class="wikitable" width="100%" | ||
+ | ! width="110"|Code | ||
+ | |Description | ||
+ | |- | ||
+ | |{{Code|ZIP0001}} | ||
+ | |A specified path does not exist. | ||
+ | |- | ||
+ | |{{Code|ZIP0002}} | ||
+ | |Entries in the ZIP archive description are unknown, missing, or invalid. | ||
+ | |- | ||
+ | |{{Code|ZIP0003}} | ||
+ | |An operation fails for some other reason. | ||
+ | |} |
Latest revision as of 13:16, 27 February 2020
This XQuery Module contains functions to handle ZIP archives. The contents of ZIP files can be extracted and listed, and new archives can be created. The module is based on the EXPath ZIP Module. Please note that the ZIP module is not being actively maintained but is still distributed for compatibility with older applications. We recommend you use the Archive Module wherever possible.
Conventions[edit]
All functions in this module are assigned to the http://expath.org/ns/zip
namespace, which is statically bound to the zip
prefix.
All errors are assigned to the http://expath.org/ns/error
namespace, which is statically bound to the experr
prefix.
Functions[edit]
zip:binary-entry[edit]
Signatures | zip:binary-entry($uri as xs:string, $path as xs:string) as xs:base64Binary
|
Summary | Extracts the binary file at $path within the ZIP file located at $uri and returns it as an xs:base64Binary item.
|
Errors | ZIP0001 : the specified path does not exist.ZIP0003 : the operation fails for some other reason.
|
zip:text-entry[edit]
Signatures | zip:text-entry($uri as xs:string, $path as xs:string) as xs:string zip:text-entry($uri as xs:string, $path as xs:string, $encoding as xs:string) as xs:string
|
Summary | Extracts the text file at $path within the ZIP file located at $uri and returns it as an xs:string item.An optional encoding can be specified via $encoding .
|
Errors | ZIP0001 : the specified path does not exist.ZIP0003 : the operation fails for some other reason.
|
zip:xml-entry[edit]
Signatures | zip:xml-entry($uri as xs:string, $path as xs:string) as document-node() |
Summary | Extracts the XML file at $path within the ZIP file located at $uri and returns it as a document node.
|
Errors | ZIP0001 : the specified path does not exist.ZIP0003 : the operation fails for some other reason.
|
zip:html-entry[edit]
Signatures | zip:html-entry($uri as xs:string, $path as xs:string) as document-node() |
Summary | Extracts the HTML file at $path within the ZIP file located at $uri and returns it as a document node. The file is converted to XML first if Tagsoup is found in the classpath.
|
Errors | ZIP0001 : the specified path does not exist.ZIP0003 : the operation fails for some other reason.
|
zip:entries[edit]
Signatures | zip:entries($uri as xs:string) as element(zip:file) |
Summary | Generates an ZIP XML Representation of the hierarchical structure of the ZIP file located at $uri and returns it as an element node. The file contents are not returned by this function.
|
Errors | ZIP0001 : the specified path does not exist.ZIP0003 : the operation fails for some other reason.
|
Examples | If the ZIP archive archive.zip is empty, zip:entries('archive.zip') returns:
<zip:file xmlns:zip="http://expath.org/ns/zip" href="archive.zip"/>
|
zip:zip-file[edit]
Signatures | zip:zip-file($zip as element(zip:file)) as empty-sequence() |
Summary | Creates a new ZIP archive with the characteristics described by $zip , the ZIP XML Representation.
|
Errors | ZIP0001 : an addressed file does not exist.ZIP0002 : entries in the ZIP archive description are unknown, missing, or invalid.ZIP0003 : the operation fails for some other reason.
|
Examples | The following function creates a file archive.zip with the file file.txt inside:
zip:zip-file(
<file xmlns="http://expath.org/ns/zip" href="archive.zip">
<entry src="file.txt"/>
</file>)
The following function creates a file zip:zip-file(
<file xmlns="http://expath.org/ns/zip" href="archive.zip">
<entry name="readme">thanks</entry>
</file>)
|
zip:update-entries[edit]
Signatures | zip:update-entries($zip as element(zip:file), $output as xs:string) as empty-sequence() |
Summary | Updates an existing ZIP archive or creates a modifed copy, based on the characteristics described by $zip , the ZIP XML Representation. The $output argument is the URI where the modified ZIP file is copied to.
|
Errors | ZIP0001 : an addressed file does not exist.ZIP0002 : entries in the ZIP archive description are unknown, missing, or invalid.ZIP0003 : the operation fails for some other reason.
|
Examples | The following function creates a copy new.zip of the existing archive.zip file:
zip:update-entries(zip:entries('archive.zip'), 'new.zip')
The following function deletes all PNG files from declare namespace zip = "http://expath.org/ns/zip";
copy $doc := zip:entries('archive.zip')
modify delete node $doc//zip:entry[ends-with(lower-case(@name), '.png')]
return zip:update-entries($doc, 'archive.zip')
|
Errors[edit]
Code | Description |
---|---|
ZIP0001
|
A specified path does not exist. |
ZIP0002
|
Entries in the ZIP archive description are unknown, missing, or invalid. |
ZIP0003
|
An operation fails for some other reason. |