jhove-service 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/LICENSE.rdoc ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2013 by The Board of Trustees of the Leland Stanford Junior
2
+ University. All rights reserved.
3
+
4
+ Redistribution and use of this distribution in source and binary forms,
5
+ with or without modification, are permitted provided that:
6
+ * The above copyright notice and this permission notice appear in all copies and supporting documentation;
7
+ * The name, identifiers, and trademarks of The Board of Trustees
8
+ of the Leland Stanford Junior University are not used in advertising or publicity
9
+ without the express prior written permission of The Board of Trustees
10
+ of the Leland Stanford Junior University;
11
+ * Recipients acknowledge that this distribution is made available as a research courtesy,
12
+ "as is", potentially with defects, without any obligation on the part
13
+ of The Board of Trustees of the Leland Stanford Junior University to provide support,
14
+ services, or repair;
15
+
16
+ THE BOARD OF TRUSTEES OF THE LELAND STANFORD JUNIOR UNIVERSITY DISCLAIMS ALL WARRANTIES,
17
+ EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION
18
+ ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
19
+ AND IN NO EVENT SHALL THE BOARD OF TRUSTEES OF THE LELAND STANFORD JUNIOR UNIVERSITY
20
+ BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
21
+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT
22
+ (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION
23
+ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,28 @@
1
+ = jhove-service
2
+
3
+ Require the following:
4
+ require 'jhove_service'
5
+
6
+
7
+ This will give you:
8
+ JhoveService
9
+
10
+ == Build and release procedure
11
+ Modify the version number in jhove-service.gemspec, then push your commits to AFS. DO NOT TAG!
12
+ Run: 'rake dlss_release' to tag, build, and publish the gem
13
+ See the Rakefile and the LyberCore::DlssRelease task in lyberteam-devel/lib/dlss/rake/dlss_release.rb
14
+ for more details
15
+
16
+ == Releases
17
+ - <b>0.1.0</b> First release
18
+ - <b>0.1.1</b> Rename temp to target (location in which to create output)
19
+ - <b>0.2.0</b> Change method of transforming JHOVE output to technicalMetadata
20
+ - <b>0.2.1</b> Enable processing of a subset of files in a directory
21
+ - <b>0.2.2</b> Enable upgrading of old technical metadata to the new format
22
+ - <b>1.0.0</b> Update JhoveToolkit.jar to v1.0.0. Fix output for filetypes w/o jhove module (bytestreams)
23
+ - <b>1.0.1</b> Updated to use new sul-gems server and new lyberteam-gems-devel utility
24
+ - <b>1.0.2</b> Fixed negative indentation problem for empty elements( e.g. <elem/>)
25
+ - <b>1.0.3</b> Upgraded bin/jhoveApp.jar to copy from Jhove 1.9 release
26
+ == Copyright
27
+
28
+ Copyright (c) 2013 Stanford University Library. See LICENSE for details.
data/bin/JhoveApp.jar ADDED
Binary file
@@ -0,0 +1,209 @@
1
+ 3dmf=x-world/x-3dmf
2
+ ai=application/vnd.adobe-illustrator
3
+ aif=audio/x-aiff
4
+ aifc=audio/x-aiff
5
+ aiff=audio/x-aiff
6
+ als=image/x-vivid
7
+ art=image/x-first-publisher-art
8
+ asc=image/x-hp-graphic-obj
9
+ asf=video/x-ms-asf
10
+ asp=text/html
11
+ asx=video/x-ms-asx
12
+ au=audio/x-au
13
+ avi=video/x-msvideo
14
+ bcpio=application/dca-rft
15
+ bin=application/macbinary
16
+ bm=image/x-xbitmap
17
+ bmp=image/bmp
18
+ c4=image/x-ccitt4
19
+ cal=image/x-cals
20
+ cals=image/x-cals
21
+ ccrf=image/x-calcomp-ccrf
22
+ cdda=audio/x-aiff
23
+ cdr=image/vnd.corel-draw
24
+ cel=image/x-lumena-cel
25
+ cfm=text/html
26
+ cgi=text/html
27
+ class=application/octet-stream
28
+ clp=application/x-pcpaint
29
+ cm=image/x-puzzle
30
+ cpio=application/x-DisplayWrite-txt
31
+ crf=image/x-calcomp-ccrf
32
+ css=text/css
33
+ ct=image/x-scitex-ct
34
+ dcr=application/x-director
35
+ dcx=image/x-pcx
36
+ dir=application/x-director
37
+ doc=application/vnd.ms-word
38
+ dvi=application/x-dvi
39
+ dxf=application/x-autoCAD-dxf
40
+ dxr=application/x-director
41
+ eml=text/plain
42
+ epi=image/x-eps-interchange
43
+ eps=image/eps
44
+ epsf=image/eps
45
+ epsi=image/x-eps-interchange
46
+ etx=text/x-setextetx
47
+ evy=application/x-envoy
48
+ exe=application/octet-stream
49
+ fh7=application/vnd.mm-freehand
50
+ fif=image/x-fractal
51
+ gif=image/gif
52
+ gis=application/x-erdas-lan
53
+ gm=image/x-autologic-gm
54
+ gm2=image/x-autologic-gm
55
+ gm4=image/x-autologic-gm
56
+ goe=image/x-goes
57
+ goes=image/x-goes
58
+ grb=image/x-hp-graphic-obj
59
+ gtar=application/x-gtar
60
+ hdf=application/vnd.samna
61
+ hpg=application/vnd.hp-HPGL
62
+ hpgl=application/vnd.hp-HPGL
63
+ hqx=application/mac-binhex40
64
+ hrf=image/x-hitachi-raster
65
+ htm=text/html
66
+ html=text/html
67
+ ico=image/x-sun-icon
68
+ icon=image/x-sun-icon
69
+ ics=application/ProWrite
70
+ idc=image/x-core-idc
71
+ ief=image/ief
72
+ iff=image/x-iff-ilbm
73
+ ilbm=image/x-iff-ilbm
74
+ im=image/x-sun-raster
75
+ im1=image/x-sun-raster
76
+ im24=image/x-sun-raster
77
+ im32=image/x-sun-raster
78
+ im8=image/x-sun-raster
79
+ img=image/x-vivid
80
+ ind=application/vnd.adobe-indesign
81
+ indd=application/vnd.adobe-indesign
82
+ jpe=image/jpeg
83
+ jpeg=image/jpeg
84
+ jpg=image/jpeg
85
+ jp2=image/jp2
86
+ js=application/x-javascript
87
+ kar=audio/midi
88
+ lan=application/x-erdas-lan
89
+ latex=application/x-latex
90
+ lbm=image/x-iff-ilbm
91
+ mac=image/x-iff-ilbm
92
+ mcw=application/vnd.ms-word
93
+ mdb=application/x-msaccess
94
+ mht=text/html
95
+ mid=audio/midi
96
+ midi=audio/midi
97
+ mif=application/vnd.framemaker-mif
98
+ mov=video/quicktime
99
+ movie=video/x-sgi-movie
100
+ mp2=audio/x-mpeg
101
+ MP2=audio/x-mpeg
102
+ mp3=audio/x-mpeg
103
+ mpa=audio/x-mpeg,video/x-mpeg
104
+ mpe=video/mpeg
105
+ mpeg=video/mpeg
106
+ mpg=video/mpeg
107
+ mpga=audio/x-mpeg
108
+ ms-powerpoint=application/vnd.ms-powerpoint
109
+ msword=application/vnd.ms-word
110
+ mtv=image/x-mtv-ray
111
+ navb=image/x-navb
112
+ octet-stream=application/octet-stream
113
+ oda=application/x-pfsWrite
114
+ pat=image/x-us-patent
115
+ pbm=image/x-portable-bitmap
116
+ pcd=image/x-photo-cd
117
+ pcl=application/vnd.hp-PCL
118
+ pcx=image/x-pcx
119
+ pdf=application/pdf
120
+ pds=application/vnd.NASA-PDS
121
+ pgm=image/x-portable-graymap
122
+ photo=text/plain
123
+ php=text/plain
124
+ pic=image/x-macintosh-pict
125
+ pict=image/x-macintosh-pict
126
+ pjpeg=image/jpeg
127
+ pl=text/plain
128
+ pm=image/x-ibm-picture-mkr
129
+ png=image/png
130
+ pnm=image/x-portable-anymap
131
+ ppm=image/x-portable-pixmap
132
+ pps=application/vnd.ms-powerpoint
133
+ ppt=application/vnd.ms-powerpoint
134
+ ppz=application/vnd.ms-powerpoint
135
+ prn=image/x-calcomp-ccrf
136
+ ps=application/postscript
137
+ psd=application/vnd.adobe-photoshop
138
+ puzzle=image/x-puzzle
139
+ pzl=image/x-puzzle
140
+ qdv=image/x-qdv
141
+ qpr=application/quattroPro
142
+ qt=video/quicktime
143
+ qxd=application/vnd.quark
144
+ ra=audio/vnd.realaudio
145
+ ram=audio/x-pn-realaudio
146
+ ras=image/x-sun-raster
147
+ rast=image/x-qdv
148
+ raw=application/vnd.adobe-photoshop
149
+ rg=image/x-raster-graphics
150
+ rgb=image/x-rgb
151
+ rix=image/x-rix
152
+ rlc=image/x-rlc
153
+ rle=image/x-utah-raster
154
+ rm=audio/x-realmedia,video/vnd.realvideo
155
+ rnc=application/vnd.relax-ng.rnc
156
+ rtf=text/richtext
157
+ rtl=application/vnd.hp-RTL
158
+ scd=image/x-scodl
159
+ scx=image/x-rix
160
+ sea=application/sit
161
+ sgi=image/x-sgi-image
162
+ sgm=text/sgml
163
+ sgml=text/sgml
164
+ shtml=text/html
165
+ sit=application/sit
166
+ smil=application/smil
167
+ snd=audio/basic
168
+ spl=application/futuresplash
169
+ spr=application/x-sprite
170
+ sprite=application/x-sprite
171
+ sst=image/x-avhrr
172
+ svp=video/x-pn-realvideo
173
+ swf=application/x-shockwave-flash
174
+ tar=application/x-tar
175
+ tbk=application/toolbook
176
+ tex=application/x-tex
177
+ texi=application/x-FirstChoice
178
+ texinfo=application/x-FirstChoice
179
+ tga=image/x-targa
180
+ tif=image/tiff
181
+ tiff=image/tiff
182
+ tsp=application/x-SmartDraw
183
+ tsv=text/tab-separated-values
184
+ txt=text/plain
185
+ ustar=application/x-wordstar
186
+ vi=image/x-jovian-vi
187
+ vif=image/x-verity-image
188
+ vit=image/x-vitec
189
+ vrml=x-world/x-vrml
190
+ wav=audio/x-wave
191
+ wk1=application/vnd.lotus1-2-3
192
+ wk3=application/vnd.lotus1-2-3
193
+ wk4=application/vnd.lotus1-2-3
194
+ wks=application/vnd.lotus1-2-3
195
+ wma=audio/x-ms-wma
196
+ wmv=video/x-ms-wmv
197
+ wpd=application/wordperfect
198
+ wpg=application/x-wordperfect-graphic
199
+ wrl=x-world/x-vrml
200
+ xbm=image/x-xbitmap
201
+ xls=application/vnd.ms-excel
202
+ xml=text/xml
203
+ xsd=text/xml
204
+ xsl=text/xml
205
+ xpm=image/x-xpixmap
206
+ x-png=image/png
207
+ x-shockwave-flash=application/x-shockwave-flash
208
+ xwd=image/x-xwindowdump
209
+ zip=application/zip
@@ -0,0 +1,225 @@
1
+ JHOVE - JSTOR/Harvard Object Validation Environment
2
+ Copyright 2003-2008 by JSTOR and the President and Fellows of Harvard College
3
+ JHOVE is made available under the GNU Lesser General Public License (LGPL;
4
+ see the file LICENSE for details)
5
+
6
+ Rev. 1.2, 2009-02-10
7
+
8
+ JHOVE (the JSTOR/Harvard Object Validation Environment, pronounced "jhove")
9
+ is an extensible software framework for performing format identification,
10
+ validation, and characterization of digital objects.
11
+
12
+ o Format identification is the process of determining the format to which a
13
+ digital object conforms: "I have a digital object; what format is it?"
14
+ o Format validation is the process of determining the level of compliance of a
15
+ digital object to the specification for its purported format: "I have an
16
+ object purportedly of format F; is it?"
17
+ o Format characterization is the process of determing the format-specific
18
+ significant properties of an object of a given format: "I have an object of
19
+ format F; what are its salient properties?"
20
+
21
+ These actions are frequently necessary during routine operation of digital
22
+ repositories and for digital preservation activities.
23
+
24
+ The output from JHOVE is controlled by output handlers. JHOVE uses an
25
+ extensible plug-in architecture; it can be configured at the time of its
26
+ invocation to include whatever specific format modules and output handlers
27
+ that are desired. The initial release of JHOVE includes modules for
28
+ arbitrary byte streams, ASCII and UTF-8 encoded text, AIFF and WAVE audio,
29
+ GIF, JPEG, JPEG 2000, TIFF, and PDF; and text and XML output handlers.
30
+
31
+ The JHOVE project is a collaboration of JSTOR and the Harvard University
32
+ Library. Development of JHOVE was funded in part by the Andrew W. Mellon
33
+ Foundation. JHOVE is made available under the GNU Lesser General Public
34
+ License (LGPL; see the file LICENSE for details).
35
+
36
+ REQUIREMENTS
37
+
38
+ 1. Java J2SE 1.4
39
+ (JHOVE was originally implemented using the Sun J2SE SDK 1.4.1 and has
40
+ been tested to work with 1.4.2 <http://java.sun.com/j2se/1.4.2/>)
41
+
42
+ 2. If you would like to compile the JHOVE source code, then
43
+ Apache Ant, a Java-based build tool <http://ant.apache.org/> is necessary.
44
+ Note that the JAVA_HOME environment variable must be set appropriately for
45
+ Ant to work properly.
46
+ (JHOVE was implemented and tested using Ant 1.5.1.)
47
+
48
+ DISTRIBUTION
49
+
50
+ The JHOVE distribution package includes:
51
+
52
+ jhove/ # JHOVE home directory
53
+ COPYING # GNU Lesser General Public License
54
+ LICENSE # JHOVE license information
55
+ README
56
+ RELEASENOTES # JHOVE release notes
57
+ bin/
58
+ jhove.jar # JHOVE API package
59
+ jhove-handler.jar # Standard output handler package
60
+ jhove-module.jar # Standard module package
61
+ JhoveApp.jar # JHOVE command line application
62
+ JhoveView.jar # JHOVE with Swing GUI front-end
63
+ build.xml # Ant configuration file
64
+ classes/
65
+ build.xml # Ant configuration file
66
+ edu/ ... # JHOVE API packages
67
+ ADump.* # AIFF dump utility class
68
+ GDump.* # GIF dump utility class
69
+ Jhove.* # JHOVE main class
70
+ JDump.* # JPEG dump utility class
71
+ J2Dump.* # JPEG 2000 dump utility class
72
+ PDump.* # PDF dump utility class
73
+ TDump.* # TIFF dump utility class
74
+ UserHome.* # user.home property utility class
75
+ WDump.* # WAVE dump utility class
76
+ conf/
77
+ jhove.conf # JHOVE configuration file
78
+ jhove.xsd # JHOVE output schema
79
+ jhoveConfig.xsd # JHOVE configuration file schema
80
+ doc/
81
+ *.html # API documentation
82
+ ...
83
+ examples/ # Sample files
84
+ ascii/ ...
85
+ gif/ ...
86
+ jpeg/ ...
87
+ jpeg2000/ ...
88
+ pdf/ ...
89
+ tiff/ ...
90
+ utf-8/ ...
91
+ adump* # AIFF dump Bourne shell driver
92
+ adump.bat* # AIFF dump DOS shell driver script
93
+ gdump* # GIF dump Bourne shell driver
94
+ gdump.bat* # GIF dump DOS shell driver script
95
+ jdump* # JPEG dump Bourne shell driver
96
+ jdump.bat* # JPEG dump DOS shell driver script
97
+ j2dump* # JPEG 2000 dump Bourne shell driver
98
+ j2dump.bat* # JPEG 2000 dump DOS shell driver
99
+ jhove.tmpl* # Template for JHOVE Bourne shell driver script
100
+ jhove_bat.tmpl* # Template for JHOVE DOS shell driver script
101
+ pdump* # PDF dump Bourne shell driver
102
+ pdump.bat* # PDF dump DOS shell driver script
103
+ tdump* # TIFF dump Bourne shell driver
104
+ tdump.bat* # TIFF dump DOS shell driver script
105
+ userhome* # user.home Bourne shell driver
106
+ userhome.bat* # user.home DOS shell driver script
107
+ wdump* # WAVE dump Bourne shell driver
108
+ wdump.bat* # WAVE dump DOS shell driver script
109
+
110
+ INSTALLATION
111
+
112
+ Edit the configuration file, jhove/conf/jhove.conf, and set the absolute
113
+ pathname of the JHOVE home directory and the temporary directory (in which
114
+ temporary files are created):
115
+
116
+ <jhoveHome>jhove-home-directory</jhoveHome>
117
+ <tempDirectory>temporary-directory</tempDirectory>
118
+
119
+ The JHOVE home directory is the top-most directory in the distribution TAR
120
+ or ZIP file. On Unix systems, "/var/tmp" is an appropriate temporary
121
+ directory; on Windows, "C:\Temp". For example, if the distribution TAR
122
+ file is disaggregated on a Unix system in the directory "/users/stephen/
123
+ projects", then the configuration file should read:
124
+
125
+ <jhoveHome>/users/stephen/projects/jhove</jhoveHome>
126
+ <tempDirectory>/var/tmp</jhoveHome>
127
+
128
+ In the JHOVE home directory, copy the JHOVE Bourne shell driver script
129
+ template, "jhove.tmpl", to "jhove" (or the equivalent Windows shell
130
+ script, "jhove_bat.tmpl" to "jhove.bat"), and set the
131
+ JHOVE home directory, Java home directory, and Java interpreter:
132
+
133
+ JHOVE_HOME=jhove-home-directory
134
+ JAVA_HOME=java-home-directory
135
+ JAVA=java-interpreter
136
+
137
+ The JAVA_HOME property should provide the absolute pathname of the Java
138
+ runtime or SDK installation; JAVA should provide the absolute pathname of the
139
+ Java interpreter. For example:
140
+
141
+ JHOVE_HOME=/users/stephen/projects/jhove
142
+ JAVA_HOME=/usr/local/j2re1.4.1_02
143
+ JAVA=$JAVA_HOME/bin/java
144
+
145
+ In the DOS shell driver script, jhove.bat, the equivalent three
146
+ variables are:
147
+
148
+ SET JHOVE_HOME=jhove-home-directory
149
+ SET JAVA_HOME=java-home-directory
150
+ SET JAVA=%JAVA_HOME%\bin\java
151
+
152
+ For example:
153
+
154
+ SET JHOVE_HOME="C:\Program Files\jhove"
155
+ SET JAVA_HOME="C:\Program Files\java\j2re1.4.1_02"
156
+ SET JAVA=%JAVA_HOME%\bin\java
157
+
158
+ The quotation marks are necessary because of the embedded space characters.
159
+ On Windows platforms it may also be necessary to add the Java bin subdirectory
160
+ to the System PATH environment variable:
161
+
162
+ PATH=C:\Program Files\java\j2re1.4.1_02\bin;...
163
+
164
+ (For information on setting a Windows environment variable, consult your local
165
+ documentation or system administrator.)
166
+
167
+ USAGE
168
+
169
+ java Jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler]
170
+ [-o output] [-x saxclass] [-t tempdir] [-b bufsize]
171
+ [-l loglevel] [[-krs] dir-file-or-uri [...]]
172
+
173
+ where -c config Configuration file pathname
174
+ -m module Module name
175
+ -h handler Output handler name (defaults to TEXT)
176
+ -e encoding Character encoding used by output handler (defaults to UTF-8)
177
+ -H handler About handler name
178
+ -o output Output file pathname (defaults to standard output)
179
+ -x saxclass SAX parser class (defaults to J2SE 1.4 default)
180
+ -t tempdir Temporary directory in which to create temporary files
181
+ -b bufsize Buffer size for buffered I/O (defaults to J2SE 1.4 default)
182
+ -l loglevel Logging level
183
+ -k Calculate CRC32, MD5, and SHA-1 checksums
184
+ -r Display raw data flags, not textual equivalents
185
+ -s Format identification based on internal signatures only
186
+ dir-file-or-uri Directory or file pathname or URI of formated content
187
+ stream
188
+
189
+ All named modules and output handlers must be found on the Java CLASSPATH at
190
+ the time of invocation. The JHOVE driver script, jhove/jhove, automatically
191
+ sets the CLASSPATH and invokes the Jhove main class:
192
+
193
+ jhove [-c config] [-m module] [-h handler] [-e encoding] [-H handler]
194
+ [-o output] [-x saxclass] [-t tempdir] [-b bufsize] [-l loglevel]
195
+ [[-krs] dir-file-or-uri [...]]
196
+
197
+ The following additional programs are available, primarily for testing
198
+ and debugging purposes. They display a minimally processed, human-readable
199
+ version of the contents of AIFF, GIF, JPEG, JPEG 2000, PDF, TIFF, and WAVE
200
+ files:
201
+
202
+ java ADump aiff-file
203
+ java GDump gif-file
204
+ java JDump jpeg-file
205
+ java J2Dump jpeg2000-file
206
+ java PDump pdf-file
207
+ java TDump tiff-file
208
+ java WDump wave-file
209
+
210
+ For convenience, the following driver scripts are also available:
211
+
212
+ adump aiff-file
213
+ gdump gif-file
214
+ jdump jpeg-file
215
+ j2dump jpeg2000-file
216
+ pdump pdf-file
217
+ tdump tiff-file
218
+ wdump wave-file
219
+
220
+ The JHOVE Swing-based GUI interface can be invoked from a command shell from
221
+ the jhove/bin sub-directory:
222
+
223
+ java -jar JhoveView.jar -c <configFile>
224
+
225
+ where <configFile> is the pathname of the JHOVE configuration file.
@@ -0,0 +1,63 @@
1
+ JHOVE - JSTOR/Harvard Object Validation Environment
2
+ Copyright 2003-2007 by JSTOR and the President and Fellows of Harvard College
3
+ JHOVE is made available under the GNU General Public License (see the file
4
+ LICENSE for details)
5
+
6
+ Rev. 2007-08-30
7
+
8
+ Edit the configuration file, jhove.conf, and set the JHOVE home
9
+ directory:
10
+
11
+ <jhoveHome>jhove-home-directory</jhoveHome>
12
+
13
+ and temporary directory:
14
+
15
+ <tempDirectory>temporary-directory</tempDirectory>
16
+
17
+ On most Unix systems, a reasonable temporary directory is "/var/tmp";
18
+ on Windows, "C:\temp".
19
+
20
+ The optional
21
+
22
+ <bufferSize>buffer-size</bufferSize>
23
+
24
+ element defines the buffer size used for buffer I/O operations.
25
+
26
+ The optional
27
+
28
+ <mixVersion>1.0</mixVersion>
29
+
30
+ element specifies that the XML output handler should conform to the
31
+ MIX 1.0 schema. The default behavior is for handler output to conform
32
+ to the MIX 0.2 schema.
33
+
34
+ The optional
35
+
36
+ <sigBytes>n</sigBytes>
37
+
38
+ element specifies that JHOVE modules will look for format signatures
39
+ in the first <n> bytes of the file. The default value is 1024.
40
+
41
+ All class names must be fully qualified with their package name:
42
+
43
+ <module>
44
+ <class>fully-package-qualified-class-name</class>
45
+ <init>optional-initialization-argument</init>
46
+ <param>optional-invocation-argument</param>
47
+ </module>
48
+
49
+ The optional <init> argument is passed to the module once at the time
50
+ its class is instantiated. See module-specific documentation for a
51
+ description of any initialization options.
52
+
53
+ The optional <param> argument is passed to the module every time it is
54
+ invoked. See module-specific documentation for a description of any
55
+ invocation options.
56
+
57
+ The order in which format modules are defined is important; when
58
+ performing a format identification operation, JHOVE will search for a
59
+ matching module in the order in which the modules are defined in the
60
+ configuration file. In general, the modules for more generic formats
61
+ should come later in the list. For example, the standard module ASCII
62
+ should be defined before the UTF-8 module, since all ASCII objects
63
+ are, by definition, UTF-8 objects, but not vice versa.
data/bin/jhove.conf ADDED
@@ -0,0 +1,50 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <jhoveConfig version="1.1"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xmlns="http://hul.harvard.edu/ois/xml/ns/jhove/jhoveConfig"
5
+ xsi:schemaLocation="http://hul.harvard.edu/ois/xml/ns/jhove/jhoveConfig
6
+ http://cosimo.stanford.edu/standards/jhove/v1/jhoveConfig.xsd">
7
+ <jhoveHome></jhoveHome>
8
+ <defaultEncoding>utf-8</defaultEncoding>
9
+ <tempDirectory>/tmp</tempDirectory>
10
+ <bufferSize>131072</bufferSize>
11
+ <mixVersion>1.0</mixVersion>
12
+ <sigBytes>1024</sigBytes>
13
+ <module>
14
+ <class>edu.harvard.hul.ois.jhove.module.AiffModule</class>
15
+ </module>
16
+ <module>
17
+ <class>edu.harvard.hul.ois.jhove.module.WaveModule</class>
18
+ </module>
19
+ <module>
20
+ <class>edu.harvard.hul.ois.jhove.module.PdfModule</class>
21
+ </module>
22
+ <module>
23
+ <class>edu.harvard.hul.ois.jhove.module.Jpeg2000Module</class>
24
+ </module>
25
+ <module>
26
+ <class>edu.harvard.hul.ois.jhove.module.JpegModule</class>
27
+ </module>
28
+ <module>
29
+ <class>edu.harvard.hul.ois.jhove.module.GifModule</class>
30
+ </module>
31
+ <module>
32
+ <class>edu.harvard.hul.ois.jhove.module.TiffModule</class>
33
+ </module>
34
+ <module>
35
+ <class>edu.harvard.hul.ois.jhove.module.XmlModule</class>
36
+ </module>
37
+ <module>
38
+ <class>edu.harvard.hul.ois.jhove.module.HtmlModule</class>
39
+ </module>
40
+ <module>
41
+ <class>edu.harvard.hul.ois.jhove.module.AsciiModule</class>
42
+ </module>
43
+ <module>
44
+ <class>edu.harvard.hul.ois.jhove.module.Utf8Module</class>
45
+ </module>
46
+ <outputHandler>
47
+ <class>edu.harvard.hul.ois.jhove.handler.XmlHandler</class>
48
+ </outputHandler>
49
+
50
+ </jhoveConfig>
Binary file
@@ -0,0 +1,23 @@
1
+ #!/bin/sh
2
+
3
+ JHOVE_HOME=`dirname $0`
4
+ export JHOVE_HOME
5
+ JAVA_HOME=/etc/alternatives/jre
6
+ JAVA=/usr/bin/java
7
+
8
+ CP=${JHOVE_HOME}/jhoveToolkit.jar:${JHOVE_HOME}/JhoveApp.jar
9
+
10
+ # Retrieve a copy of all command line arguments to pass to the application.
11
+ # Since looping over the positional parameters is such a common thing to do in scripts,
12
+ # for arg
13
+ # defaults to
14
+ # for arg in "$@".
15
+ # The double-quoted "$@" is special magic that causes each parameter to be used as a single word
16
+
17
+ ARGS=""
18
+ for ARG do
19
+ ARGS="$ARGS $ARG"
20
+ done
21
+
22
+ # Set the CLASSPATH and invoke the Java loader.
23
+ ${JAVA} -Xms128M -Xmx3000M -classpath $CP $ARGS
@@ -0,0 +1,94 @@
1
+ require 'nokogiri'
2
+ require 'pathname'
3
+ require 'jhove_technical_metadata'
4
+ require 'stringio'
5
+
6
+ class JhoveService
7
+
8
+ # @return [Pathname] The directory in which program files are located
9
+ attr_accessor :bin_pathname
10
+
11
+ # @return [Pathname] The directory in which output should be generated
12
+ attr_accessor :target_pathname
13
+
14
+ # @return [String] The druid of the object, which gets inserted in the root element of the output
15
+ attr_accessor :digital_object_id
16
+
17
+ # @param [String] target_dir The directory into which output should be generated
18
+ def initialize(target_dir=nil)
19
+ @target_pathname = Pathname.new(target_dir) unless target_dir.nil?
20
+ @bin_pathname = Pathname.new(File.expand_path(File.dirname(__FILE__) + '/../bin'))
21
+ end
22
+
23
+ # @return [String] The output file from the JHOVE run
24
+ def jhove_output
25
+ @target_pathname.join('jhove_output.xml')
26
+ end
27
+
28
+ # @return [String] The technicalMetadata.xml output file path
29
+ def tech_md_output
30
+ @target_pathname.join('technicalMetadata.xml')
31
+ end
32
+
33
+ # @param content_dir [Pathname,String] the directory path containing the files to be analyzed by JHOVE
34
+ # @param fileset_file [Pathname,String] the pathname of the file listing which files should be processed. If nil, process all files.
35
+ # @return [String] Run JHOVE to characterize all content files, returning the output file path
36
+ def run_jhove(content_dir, fileset_file=nil)
37
+ `#{get_jhove_command(content_dir, fileset_file)}`
38
+ exitcode = $?.exitstatus
39
+ if (exitcode != 0)
40
+ raise "Error when running JHOVE against #{content_dir.to_s}"
41
+ end
42
+ jhove_output.to_s
43
+ end
44
+
45
+ # @param content_dir [Pathname,String] the directory path containing the files to be analyzed by JHOVE
46
+ # @param fileset_file [Pathname,String] the pathname of the file listing which files should be processed. If nil, process all files.
47
+ # @return [String] The jhove-toolkit command to be exectuted in a system call
48
+ def get_jhove_command(content_dir, fileset_file=nil)
49
+ if fileset_file.nil?
50
+ args = "edu.stanford.sulair.jhove.JhoveCommandLine #{content_dir.to_s}"
51
+ else
52
+ args = "edu.stanford.sulair.jhove.JhoveFileset #{content_dir.to_s} #{fileset_file.to_s}"
53
+ end
54
+ jhove_script = @bin_pathname.join('jhoveToolkit.sh').to_s
55
+ jhove_cmd = "#{jhove_script} #{args} > #{jhove_output.to_s}"
56
+ jhove_cmd
57
+ end
58
+
59
+ # @param [Pathname,String] jhove_pathname The full path of the file containing JHOVE output to be transformed to technical metadata
60
+ # @return [String] Convert jhove output it to technicalMetadata, returning the output file path
61
+ def create_technical_metadata(jhove_pathname=jhove_output)
62
+ jhove_pathname = Pathname.new(jhove_pathname)
63
+ jhovetm = JhoveTechnicalMetadata.new()
64
+ jhovetm.digital_object_id=self.digital_object_id
65
+ jhovetm.output_file=tech_md_output
66
+ # Create a SAX parser
67
+ parser = Nokogiri::XML::SAX::Parser.new(jhovetm)
68
+ # Feed the parser some XML
69
+ parser.parse(jhove_pathname.open('rb'))
70
+ tech_md_output.to_s
71
+ end
72
+
73
+ # @param [String] old_tm the old techMD xml to be transformed to new technical metadata format
74
+ # @return [String] Convert old techMD date to new technicalMetadata format
75
+ def upgrade_technical_metadata(old_tm)
76
+ new_tm = StringIO.new()
77
+ upgrade_sax_handler = JhoveTechnicalMetadata.new()
78
+ upgrade_sax_handler.digital_object_id=self.digital_object_id
79
+ upgrade_sax_handler.ios = new_tm
80
+ # Create a SAX parser
81
+ parser = Nokogiri::XML::SAX::Parser.new(upgrade_sax_handler)
82
+ # Feed the parser some XML
83
+ parser.parse(old_tm)
84
+ new_tm.string
85
+ end
86
+
87
+
88
+ # @return [void] Cleanup the temporary workspace used to hold the metadata outputs
89
+ def cleanup()
90
+ jhove_output.delete if jhove_output.exist?
91
+ tech_md_output.delete if tech_md_output.exist?
92
+ end
93
+
94
+ end
@@ -0,0 +1,284 @@
1
+ require 'rubygems'
2
+ require 'nokogiri'
3
+ require 'time'
4
+ require 'pathname'
5
+
6
+ # A SAX handler for filtering JHOVE output to create a technicalMetadata datastream
7
+ # The previous mechanism (uising XSLT tranformation) was causing out of memory errors,
8
+ # due to XSLT's behavior of loading both the input and output objects into memory.
9
+ class JhoveTechnicalMetadata < Nokogiri::XML::SAX::Document
10
+
11
+ # @return [IO] the output stream for the result
12
+ attr_accessor :ios
13
+
14
+ # @return [String] The druid of the object, which gets inserted in the root element of the output
15
+ attr_accessor :digital_object_id
16
+
17
+ def initialize()
18
+ @indent = 0
19
+ @ios = STDOUT #File.open(STDOUT, 'w')
20
+ end
21
+
22
+ # @param [Pathname] pathname the location of the technicalMetadata.xml file to be created
23
+ # @return [void] Opens the output stream pointing to the specified file
24
+ def output_file=(pathname)
25
+ @ios = pathname.open('w')
26
+ end
27
+
28
+ # @param [String] string The character string to be appended to the output
29
+ # @return [void] Append the specified string to the output stream
30
+ def output(string)
31
+ @ios.puts " "*@indent + string
32
+ end
33
+
34
+ # @param [String] tag the name of the XML element from the parsed input
35
+ # @param [Hash] attrs the XML attributes of the element
36
+ # @return [void] this method is called by the sax parser at the beginning of an element
37
+ def start_element(tag, attrs = [])
38
+ case tag
39
+ when 'jhove'
40
+ # <jhove> is the root element of the input
41
+ root_open(attrs)
42
+ when 'repInfo'
43
+ # A <repInfo> element contains the data for each file
44
+ file_wrapper_open(attrs)
45
+ when 'properties'
46
+ # A <properties> element contains the variable data for the file
47
+ properties_open
48
+ else
49
+ if tag[0..2] == 'mix'
50
+ # JHOVE output for image files contains tech md in MIX format that we copy verbatum to output
51
+ mix_open(tag)
52
+ elsif @in_jhove
53
+ # we've encountered one of the JHOVE elements that we want to automatically copy
54
+ jhove_open(tag, attrs)
55
+ elsif @in_properties
56
+ # we're looking for the LineEndings property in the JHOVE output
57
+ linebreak_open(tag)
58
+ end
59
+ end
60
+ end
61
+
62
+ # @param [String] tag the value of a text node found in the parsed XML
63
+ # @return [void] this method is called by the sax parser when a text node is encountered
64
+ def characters(string)
65
+ @text = string
66
+ end
67
+
68
+ # @param [String] tag the name of the XML element from the parsed input
69
+ # @return [void] this method is called by the sax parser at the end of an element
70
+ def end_element(tag)
71
+ case tag
72
+ when 'jhove'
73
+ root_close
74
+ when 'repInfo'
75
+ file_wrapper_close
76
+ when 'properties'
77
+ properties_close
78
+ else
79
+ if tag[0..2] == 'mix'
80
+ mix_close(tag)
81
+ elsif @in_jhove
82
+ jhove_close(tag)
83
+ elsif @in_properties
84
+ linebreak_close(tag)
85
+ end
86
+ end
87
+ end
88
+
89
+ # @param [Hash] attrs the attributes of the <jhove> element in the XML input
90
+ # @return [void] create the <technicalMetadata> root element of the XML output and include namespace declararions
91
+ def root_open(attrs)
92
+ if @digital_object_id
93
+ output "<technicalMetadata objectId='#{@digital_object_id}' datetime='#{Time.now.utc.iso8601}'"
94
+ else
95
+ output "<technicalMetadata datetime='#{Time.now.utc.iso8601}'"
96
+ end
97
+ @indent += 2
98
+ output "xmlns:jhove='http://hul.harvard.edu/ois/xml/ns/jhove'"
99
+ output "xmlns:mix='http://www.loc.gov/mix/v10'"
100
+ output "xmlns:textmd='info:lc/xmlns/textMD-v3' >"
101
+ @indent -= 1
102
+ end
103
+
104
+ # @return [void] add the closing element of the output document
105
+ def root_close
106
+ @indent -= 1
107
+ output "</technicalMetadata>"
108
+ @ios.close
109
+ end
110
+
111
+ # @param [Hash] attrs the attributes of the <jhove> element in the XML input
112
+ # @return [void] Append a <file> element to the output, setting the id attribute to the file path
113
+ def file_wrapper_open(attrs)
114
+ filepath=nil
115
+ attrs.each { |attr| filepath=attr[1] if attr[0]=='uri'}
116
+ output "<file id='#{filepath}'>"
117
+ @indent += 1
118
+ @in_jhove = true
119
+ end
120
+
121
+ # @return [void] Append a </file> tag to close the file data,
122
+ # but first inset a textMD stanza if the file has a text format
123
+ def file_wrapper_close
124
+ case @format
125
+ when 'ASCII', 'HTML','TEXT','UTF-8'
126
+ output_textmd(@linebreak)
127
+ end
128
+ @indent -= 1
129
+ output " </jhove:properties>" if @in_properties
130
+
131
+ output "</file>"
132
+ @in_jhove = false
133
+ @in_properties=false
134
+ end
135
+
136
+ # @param [String] tag the name of the XML element from the parsed input
137
+ # @param [Hash] attrs the attributes of the <jhove> element in the XML input
138
+ # @return [void] Copy this jhove element tag and its attributes verbatum
139
+ def jhove_open(tag, attrs)
140
+ if @jhove_tag # saved previously
141
+ # we encountered a new element so output what was previously cached
142
+ output "<jhove:#{@jhove_tag}#{@jhove_attrs}>"
143
+ @indent += 1
144
+ end
145
+ # cache the element name and its attributes
146
+ @jhove_tag = tag
147
+ @jhove_attrs = ""
148
+ attrs.each do |attr|
149
+ @jhove_attrs += " #{attr[0]}='#{attr[1]}'"
150
+ end
151
+ @text = nil
152
+ @linebreak='LF'
153
+ end
154
+
155
+ # @param [String] tag the name of the XML element from the parsed input
156
+ # @return [void] Output a closing tag, preceded by cached data, if such exists
157
+ def jhove_close(tag)
158
+ if @text && tag == @jhove_tag
159
+ output "<jhove:#{@jhove_tag}#{@jhove_attrs}>#{@text}</jhove:#{tag}>"
160
+ elsif tag == @jhove_tag
161
+ output "<jhove:#{@jhove_tag}#{@jhove_attrs}/>"
162
+ else
163
+ @indent -=1
164
+ output "</jhove:#{tag}>"
165
+ end
166
+ @format = @text if tag == 'format'
167
+ @text = nil
168
+ @jhove_tag = nil
169
+ @jhove_attrs=""
170
+ end
171
+
172
+ # @return [void] Output a <properties> element if one was encountered in the input,
173
+ # then ignore most input data from within the properties element, except mix and LineBreaks
174
+ def properties_open
175
+ output "<jhove:properties>"
176
+ @indent += 1
177
+ @in_jhove = false
178
+ @in_properties=true
179
+ end
180
+
181
+ # @return [void] Appending of a closing tag is handled elsewhere
182
+ def properties_close
183
+ @indent -= 1
184
+ end
185
+
186
+ # @param [String] tag the name of the XML element from the parsed input
187
+ # @return [void] Copy any Mix data verbatum,
188
+ def mix_open(tag)
189
+ if @mix_tag
190
+ # we encountered a new element so output what was previously cached
191
+ output "<#{@mix_tag}>"
192
+ @indent += 1
193
+ end
194
+ # cache the element name
195
+ @mix_tag = tag
196
+ @text = nil
197
+ end
198
+
199
+ # @param [String] tag the name of the XML element from the parsed input
200
+ # @return [void] Output a closing tag, preceded by cached data, if such exists
201
+ def mix_close(tag)
202
+ if @text && tag == @mix_tag
203
+ output "<#{tag}>#{@text}</#{tag}>"
204
+ elsif tag == @mix_tag
205
+ output "<#{tag}/>"
206
+ else
207
+ @indent -=1
208
+ output "</#{tag}>"
209
+ end
210
+ @text = nil
211
+ @mix_tag = nil
212
+ end
213
+
214
+ # @param [String] tag the name of the XML element from the parsed input
215
+ # @return [void] Keep clearing the text cache any time a new element is encountered
216
+ def linebreak_open(tag)
217
+ @text = nil if @text
218
+ end
219
+
220
+ # @param [String] tag the name of the XML element from the parsed input
221
+ # @return [void] Look for the LineEndings name/value pair, which is spread across multiple elements
222
+ def linebreak_close(tag)
223
+ case tag
224
+ when 'name'
225
+ @in_line_endings = false
226
+ @in_line_endings = true if @text == 'LineEndings'
227
+ when 'value'
228
+ @linebreak = @text if @in_line_endings
229
+ @in_line_endings = false
230
+ end
231
+ end
232
+
233
+ # @param [Object] linebreak the CRLF or LF value found in the JHOVE output ()default is LF)
234
+ # @return [void] Output a textMD section within the properties element
235
+ def output_textmd(linebreak)
236
+ indent = @indent
237
+ @indent = 0
238
+ if @in_properties
239
+ # properties element tags provided by other code
240
+ output <<-EOF
241
+ <textmd:textMD>
242
+ <textmd:character_info>
243
+ <textmd:byte_order>big</textmd:byte_order>
244
+ <textmd:byte_size>8</textmd:byte_size>
245
+ <textmd:character_size>1</textmd:character_size>
246
+ <textmd:linebreak>#{linebreak}</textmd:linebreak>
247
+ </textmd:character_info>
248
+ </textmd:textMD>
249
+ EOF
250
+ else
251
+ # there were no properties elements in the input, so we must supply them ourselves
252
+ output <<-EOF
253
+ <jhove:properties>
254
+ <textmd:textMD>
255
+ <textmd:character_info>
256
+ <textmd:byte_order>big</textmd:byte_order>
257
+ <textmd:byte_size>8</textmd:byte_size>
258
+ <textmd:character_size>1</textmd:character_size>
259
+ <textmd:linebreak>#{linebreak}</textmd:linebreak>
260
+ </textmd:character_info>
261
+ </textmd:textMD>
262
+ </jhove:properties>
263
+ EOF
264
+ end
265
+ @indent = indent
266
+ end
267
+
268
+ end
269
+
270
+
271
+ # Below is the equivalent of a java main method.
272
+ # For this to work OK, the module/class being invoked
273
+ # must have already have been loaded by the Ruby interpreter.
274
+
275
+ if __FILE__ == $0
276
+ # Create a handler
277
+ jhovetm = JhoveTechnicalMetadata.new()
278
+ jhovetm.digital_object_id=ARGV[0]
279
+ jhovetm.output_file=Pahtname.new(ARGV[2])
280
+ # Create a SAX parser
281
+ parser = Nokogiri::XML::SAX::Parser.new(jhovetm)
282
+ # Feed the parser some XML
283
+ parser.parse(File.open(ARGV[1], 'rb'))
284
+ end
@@ -0,0 +1,31 @@
1
+ desc "Generate RDoc"
2
+ task :doc => ['doc:generate']
3
+
4
+ namespace :doc do
5
+ project_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
6
+ doc_destination = File.join(project_root, 'doc')
7
+
8
+ begin
9
+ require 'yard'
10
+ require 'yard/rake/yardoc_task'
11
+
12
+ YARD::Rake::YardocTask.new(:generate) do |yt|
13
+ yt.files = Dir.glob(File.join(project_root, 'lib', '*.rb')) +
14
+ ['-'] +
15
+ [ File.join(project_root, 'LICENSE.rdoc') ]
16
+
17
+ yt.options = ['--output-dir', doc_destination, '--hide-void-return']
18
+ end
19
+ rescue LoadError
20
+ desc "Generate YARD Documentation"
21
+ task :generate do
22
+ abort "Please install the YARD gem to generate rdoc."
23
+ end
24
+ end
25
+
26
+ desc "Remove generated documentation"
27
+ task :clean do
28
+ rm_r doc_destination if File.exists?(doc_destination)
29
+ end
30
+
31
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jhove-service
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Richard Anderson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.4.3.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.4.3.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: equivalent-xml
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.2.2
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.2.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.8.7
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.7
62
+ - !ruby/object:Gem::Dependency
63
+ name: rdoc
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Generates JHOVE output and/or technicalMetadata
111
+ email:
112
+ - rnanders@stanford.edu
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - bin/extension-mimetype.conf
118
+ - bin/jhove-README-1st.txt
119
+ - bin/jhove-README-conf.txt
120
+ - bin/jhove.conf
121
+ - bin/JhoveApp.jar
122
+ - bin/jhoveToolkit.jar
123
+ - bin/jhoveToolkit.sh
124
+ - lib/jhove_service.rb
125
+ - lib/jhove_technical_metadata.rb
126
+ - lib/tasks/yard.rake
127
+ - LICENSE.rdoc
128
+ - README.rdoc
129
+ homepage:
130
+ licenses: []
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ segments:
142
+ - 0
143
+ hash: 4252808025718583470
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: 1.3.6
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 1.8.23
153
+ signing_key:
154
+ specification_version: 3
155
+ summary: Generates JHOVE output and/or technicalMetadata
156
+ test_files: []
157
+ has_rdoc: