From 383d8d3162b0f65387384a0470e22620471dca44 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 16 Mar 2022 11:51:11 -0400 Subject: [PATCH 01/36] initial pages setup with jekyll --- docs/.gitignore | 5 + docs/404.html | 25 ++ docs/Gemfile | 4 + docs/Gemfile.lock | 284 ++++++++++++++++++ docs/_config.yml | 55 ++++ .../2022-03-16-welcome-to-jekyll.markdown | 29 ++ docs/about.markdown | 18 ++ docs/index.markdown | 6 + 8 files changed, 426 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/404.html create mode 100644 docs/Gemfile create mode 100644 docs/Gemfile.lock create mode 100644 docs/_config.yml create mode 100644 docs/_posts/2022-03-16-welcome-to-jekyll.markdown create mode 100644 docs/about.markdown create mode 100644 docs/index.markdown diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..f40fbd8b --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,5 @@ +_site +.sass-cache +.jekyll-cache +.jekyll-metadata +vendor diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 00000000..086a5c9e --- /dev/null +++ b/docs/404.html @@ -0,0 +1,25 @@ +--- +permalink: /404.html +layout: default +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 00000000..9391d420 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' +gem 'github-pages' +gem 'jekyll' +gem 'webrick' \ No newline at end of file diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock new file mode 100644 index 00000000..57cfc453 --- /dev/null +++ b/docs/Gemfile.lock @@ -0,0 +1,284 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (6.0.4.7) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.23.4) + concurrent-ruby (1.1.9) + dnsruby (1.61.9) + simpleidn (~> 0.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + ethon (0.15.0) + ffi (>= 1.15.0) + eventmachine (1.2.7) + execjs (2.8.1) + faraday (1.10.0) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.3) + multipart-post (>= 1.2, < 3) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + ffi (1.15.5) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (225) + github-pages-health-check (= 1.17.9) + jekyll (= 3.9.0) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.2.0) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.8.0) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.1) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.3) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.12.5, < 2.0) + rouge (= 3.26.0) + terminal-table (~> 1.4) + github-pages-health-check (1.17.9) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.0) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.8.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.9.0) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) + jekyll-commonmark-ghpages (0.2.0) + commonmarker (~> 0.23.4) + jekyll (~> 3.9.0) + jekyll-commonmark (~> 1.4.0) + rouge (>= 2.0, < 4.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.1) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.15.0) + multipart-post (2.1.1) + nokogiri (1.13.3-x86_64-darwin) + racc (~> 1.4) + octokit (4.22.0) + faraday (>= 0.9) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.6) + racc (1.6.0) + rb-fsevent (0.11.1) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.8.2) + addressable (>= 2.3.5) + faraday (> 0.8, < 2.0) + simpleidn (0.2.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.9) + thread_safe (~> 0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.1) + unicode-display_width (1.8.0) + webrick (1.7.0) + zeitwerk (2.5.4) + +PLATFORMS + x86_64-darwin-20 + +DEPENDENCIES + github-pages + jekyll + webrick + +BUNDLED WITH + 2.3.9 diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000..60e14aa7 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,55 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. +# +# If you need help with YAML syntax, here are some quick references for you: +# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml +# https://learnxinyminutes.com/docs/yaml/ +# +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: Your awesome title +email: your-email@example.com +description: >- # this means to ignore newlines until "baseurl:" + Write an awesome description for your new site here. You can edit this + line in _config.yml. It will appear in your document head meta (for + Google search results) and in your feed.xml site description. +baseurl: "" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +twitter_username: jekyllrb +github_username: jekyll + +# Build settings +theme: minima +plugins: + - jekyll-feed + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. +# +# exclude: +# - .sass-cache/ +# - .jekyll-cache/ +# - gemfiles/ +# - Gemfile +# - Gemfile.lock +# - node_modules/ +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ diff --git a/docs/_posts/2022-03-16-welcome-to-jekyll.markdown b/docs/_posts/2022-03-16-welcome-to-jekyll.markdown new file mode 100644 index 00000000..b2de3a46 --- /dev/null +++ b/docs/_posts/2022-03-16-welcome-to-jekyll.markdown @@ -0,0 +1,29 @@ +--- +layout: post +title: "Welcome to Jekyll!" +date: 2022-03-16 11:44:47 -0400 +categories: jekyll update +--- +You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. + +Jekyll requires blog post files to be named according to the following format: + +`YEAR-MONTH-DAY-title.MARKUP` + +Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works. + +Jekyll also offers powerful support for code snippets: + +{% highlight ruby %} +def print_hi(name) + puts "Hi, #{name}" +end +print_hi('Tom') +#=> prints 'Hi, Tom' to STDOUT. +{% endhighlight %} + +Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk]. + +[jekyll-docs]: https://jekyllrb.com/docs/home +[jekyll-gh]: https://github.com/jekyll/jekyll +[jekyll-talk]: https://talk.jekyllrb.com/ diff --git a/docs/about.markdown b/docs/about.markdown new file mode 100644 index 00000000..8b4e0b28 --- /dev/null +++ b/docs/about.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: About +permalink: /about/ +--- + +This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) + +You can find the source code for Minima at GitHub: +[jekyll][jekyll-organization] / +[minima](https://github.com/jekyll/minima) + +You can find the source code for Jekyll at GitHub: +[jekyll][jekyll-organization] / +[jekyll](https://github.com/jekyll/jekyll) + + +[jekyll-organization]: https://github.com/jekyll diff --git a/docs/index.markdown b/docs/index.markdown new file mode 100644 index 00000000..06715078 --- /dev/null +++ b/docs/index.markdown @@ -0,0 +1,6 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +layout: home +--- From 86116725b6dc2832b50a564554e837d1e025ee4d Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 16 Mar 2022 16:24:42 -0400 Subject: [PATCH 02/36] moving content over from user manual --- docs/_config.yml | 16 +- docs/_layouts/tool.html | 10 + docs/_tools/ffident/index.md | 6 + docs/about.markdown | 18 - docs/about.md | 7 + docs/blog.md | 6 + docs/connect.md | 25 + docs/guides.md | 25 + docs/guides/introduction.md | 14 + docs/guides/overview-of-fits-processing.md | 16 + docs/guides/references.md | 9 + .../guides/references/command-line-options.md | 27 + .../references/fits-configuration-files.md | 14 + docs/guides/references/fits-xml.md | 738 ++++++++++++++++++ .../references/standard-metadata-schemas.md | 57 ++ docs/guides/references/tools.md | 48 ++ docs/guides/understanding-the-output.md | 29 + docs/images/fits_process.jpg | Bin 0 -> 142736 bytes docs/index.html | 24 + docs/index.markdown | 6 - docs/projects.md | 22 + 21 files changed, 1085 insertions(+), 32 deletions(-) create mode 100644 docs/_layouts/tool.html create mode 100644 docs/_tools/ffident/index.md delete mode 100644 docs/about.markdown create mode 100644 docs/about.md create mode 100644 docs/blog.md create mode 100644 docs/connect.md create mode 100644 docs/guides.md create mode 100644 docs/guides/introduction.md create mode 100644 docs/guides/overview-of-fits-processing.md create mode 100644 docs/guides/references.md create mode 100644 docs/guides/references/command-line-options.md create mode 100644 docs/guides/references/fits-configuration-files.md create mode 100644 docs/guides/references/fits-xml.md create mode 100644 docs/guides/references/standard-metadata-schemas.md create mode 100644 docs/guides/references/tools.md create mode 100644 docs/guides/understanding-the-output.md create mode 100644 docs/images/fits_process.jpg create mode 100644 docs/index.html delete mode 100644 docs/index.markdown create mode 100644 docs/projects.md diff --git a/docs/_config.yml b/docs/_config.yml index 60e14aa7..2eba5496 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -18,16 +18,16 @@ # You can create any custom variable you would like, and they will be accessible # in the templates via {{ site.myvariable }}. -title: Your awesome title +title: FITS email: your-email@example.com description: >- # this means to ignore newlines until "baseurl:" - Write an awesome description for your new site here. You can edit this - line in _config.yml. It will appear in your document head meta (for - Google search results) and in your feed.xml site description. -baseurl: "" # the subpath of your site, e.g. /blog -url: "" # the base hostname & protocol for your site, e.g. http://example.com -twitter_username: jekyllrb -github_username: jekyll + Documentation and official code release of the FITS and the FITS Web Service projects +baseurl: "/fits.github.io" # the subpath of your site, e.g. /blog +url: "https://mferrarini.github.io" # the base hostname & protocol for your site, e.g. http://example.com +github_reponame_fits: FITS +github_url_fits: "https://github.com/harvard-lts/fits" +github_reponame_fits-servlet: FITSservlet +github_url_fits-servlet: "https://github.com/harvard-lts/FITSservlet" # Build settings theme: minima diff --git a/docs/_layouts/tool.html b/docs/_layouts/tool.html new file mode 100644 index 00000000..eee51dca --- /dev/null +++ b/docs/_layouts/tool.html @@ -0,0 +1,10 @@ +--- +layout: default +--- + +
+

{{ tool.name }}

+ {% if tool.capabilities %} +

Capabilities: {{ tool.capabilities }}

+ {% endif %} +
\ No newline at end of file diff --git a/docs/_tools/ffident/index.md b/docs/_tools/ffident/index.md new file mode 100644 index 00000000..a055c132 --- /dev/null +++ b/docs/_tools/ffident/index.md @@ -0,0 +1,6 @@ +--- +layout: tool +name: Apache +url: https://github.com/geoblacklight/geoblacklight +capabilities: A discovery application for geospatial data, built on Blacklight and Ruby on Rails +--- \ No newline at end of file diff --git a/docs/about.markdown b/docs/about.markdown deleted file mode 100644 index 8b4e0b28..00000000 --- a/docs/about.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: page -title: About -permalink: /about/ ---- - -This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/) - -You can find the source code for Minima at GitHub: -[jekyll][jekyll-organization] / -[minima](https://github.com/jekyll/minima) - -You can find the source code for Jekyll at GitHub: -[jekyll][jekyll-organization] / -[jekyll](https://github.com/jekyll/jekyll) - - -[jekyll-organization]: https://github.com/jekyll diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 00000000..be445004 --- /dev/null +++ b/docs/about.md @@ -0,0 +1,7 @@ +--- +layout: page +title: About +permalink: /about +--- + +The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. \ No newline at end of file diff --git a/docs/blog.md b/docs/blog.md new file mode 100644 index 00000000..8a5d6b5d --- /dev/null +++ b/docs/blog.md @@ -0,0 +1,6 @@ +--- +layout: page +title: Blog +subtitle: News, presentations, and blog posts go here +permalink: /blog +--- diff --git a/docs/connect.md b/docs/connect.md new file mode 100644 index 00000000..a7e6d73a --- /dev/null +++ b/docs/connect.md @@ -0,0 +1,25 @@ +--- +layout: page +title: Connect +subtitle: Connect with the FITS community +permalink: /connect +--- + +
+
+

Join the Google Group

+

Description

+
+
+

Chat on Slack

+

Description

+
+
+

Participate in a Community Sprint

+

Description

+
+
+

Discuss on GitHub

+

Description

+
+
\ No newline at end of file diff --git a/docs/guides.md b/docs/guides.md new file mode 100644 index 00000000..6827774e --- /dev/null +++ b/docs/guides.md @@ -0,0 +1,25 @@ +--- +layout: page +title: Guides +permalink: /guides +--- + +
+ + +
+ + +
+{% include_relative guides/introduction.md %} +{% include_relative guides/overview-of-fits-processing.md %} +{% include_relative guides/understanding-the-output.md %} +{% include_relative guides/references.md %} +
+
diff --git a/docs/guides/introduction.md b/docs/guides/introduction.md new file mode 100644 index 00000000..9afa5dd2 --- /dev/null +++ b/docs/guides/introduction.md @@ -0,0 +1,14 @@ +## Introduction + +The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is compatible with Java 1.8 or higher. The external tools currently used are: + +- [Apache](http://tika.apache.org/) +- [Jhove](https://github.com/openpreserve/jhove) +- [MediaInfo](https://mediaarea.net/en/MediaInfo) +- [Exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/) +- [National Library of New Zealand Metadata Extractor](http://meta-extractor.sourceforge.net/) +- [DROID](https://github.com/digital-preservation/droid) +- [FFIdent](http://schmidt.devlib.org/ffident/index.html) +- [File Utility (windows)](http://gnuwin32.sourceforge.net/) + +--- \ No newline at end of file diff --git a/docs/guides/overview-of-fits-processing.md b/docs/guides/overview-of-fits-processing.md new file mode 100644 index 00000000..1a1725b4 --- /dev/null +++ b/docs/guides/overview-of-fits-processing.md @@ -0,0 +1,16 @@ +## Overview of FITS processing + +FITS works in different stages as shown in the image below. + + + +The steps are described in more detail here. + +1. First the configuration files are read. This determines which tools are called and can affect the output. +2. Each tool (JHOVE etc.) is called in parallel to process the file or directory of files (depending on the option used). Each tool's native output is converted to FITS XML. +3. All of the FITS XML is consolidated into a single instance of FITS XML. +4. The FITS XML is converted to standard XML (e.g. MIX) (if this option was requested for example by using the -x parameter on the command line). + +For a more technical description of FITS processing - see the [Developer Manual](https://github.com/harvard-lts/fits/wiki/Developer-Manual#fits-processing). + +--- \ No newline at end of file diff --git a/docs/guides/references.md b/docs/guides/references.md new file mode 100644 index 00000000..ee4e6faa --- /dev/null +++ b/docs/guides/references.md @@ -0,0 +1,9 @@ +## References + +{% include_relative guides/references/command-line-options.md %} +{% include_relative guides/references/fits-xml.md %} +{% include_relative guides/references/standard-metadata-schemas.md %} +{% include_relative guides/references/fits-configuration-files.md %} +{% include_relative guides/references/tools.md %} + +--- \ No newline at end of file diff --git a/docs/guides/references/command-line-options.md b/docs/guides/references/command-line-options.md new file mode 100644 index 00000000..b0c8a9fa --- /dev/null +++ b/docs/guides/references/command-line-options.md @@ -0,0 +1,27 @@ +### Command-line options + +When you run FITS on the command-line, the following options are available: + +| Option | Description | +| :---------: | ----------- | +| -h | Prints a help message to the screen. | +| -i | Indicates that a file or directory to process will follow. (required) | +| -o | Directs the FITS output to a file (if -i is a directory) rather than console. (optional) | +| -r | Causes FITS to recursively process all files when the input is a directory. All output files are placed in the same directory as configured in -o unless -n is set. (optional) | +| -n | When -r is set and -i is a directory, output files are placed in nested directories in the same way the input directories are nested. (optional) | +| -v | Outputs tool version information. | +| -x | Transforms the FITS output into standard XML schemas. (Only standard schema metadata is output.) | +| -xc | Outputs the FITS output plus the FITS output transformed into standard XML schemas. | +| -f | Path to an alternate fits.xml configuration file rather than using the default within FITS. (optional) | + + + +Many of the options can be used together. For example: + +```.\fits.bat -i myFileToProcess.pdf -o theOutput.txt``` + +When processing multiple files contained in a single directory whose output goes to another directory while using an alternate FITS configuration file: + +```./fits.sh -i /input-files-directory -o /output-directory -xc -f /alternate-fits-config/fits.xml``` + +--- \ No newline at end of file diff --git a/docs/guides/references/fits-configuration-files.md b/docs/guides/references/fits-configuration-files.md new file mode 100644 index 00000000..e199e791 --- /dev/null +++ b/docs/guides/references/fits-configuration-files.md @@ -0,0 +1,14 @@ +### FITS configuration files + +The FITS configuration files are located in the xml directory. + +**The FITS XML output is highly affected by how FITS is configured. In particular, the order of tools near the top of the fits.xml configuration file specifies which tools FITS should prefer when they give conflicting information and if FITS should ignore tool output for particular formats. FITS comes pre-configured based on testing different tools with different formats and the default configuration should only be changed with a great deal of care and testing.** + +#### fits.xml +#### fits_format_tree.xml +#### fits_xml_map.xml +#### format_map.txt +#### mime_map.txt +#### mime_to_format_map.txt + +--- \ No newline at end of file diff --git a/docs/guides/references/fits-xml.md b/docs/guides/references/fits-xml.md new file mode 100644 index 00000000..70afa741 --- /dev/null +++ b/docs/guides/references/fits-xml.md @@ -0,0 +1,738 @@ +### FITS XML + +FITS converts the native output of each wrapped tool to a format called FITS XML which is described here. The XML schema for FITS XML is maintained by Harvard Library and located at [http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd](http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd). + +#### identification +This section contains the file format in one or more identity blocks. If all the tools that processed the file and could identify it came up with the same format, there will only be one identity block. If there were tools that processed the file that came up with an alternative format, there will be multiple identity blocks. The tools that identified the format will be nested within the identity elements. Some examples follow. + +##### **EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION** + +In this example, two tools (Jhove 1.5 and file utility 5.04) identified the format as Plain text with a MIME media type of text/plain. + +``` + + + + + + +``` + +##### **EXAMPLE: FORMAT CONFLICT** +In this example, there is a "format conflict". The tool Exiftool 9.13 identified the format as PCD with MIME media type image/x-photo-cd, but the tool Tika 1.3 identified the format as MPEG-1 Audio Layer 3. Notice in this case that the identification element will carry an attribute status value of CONFLICT. + +```` + + + + + + + + + + +```` + +#### fileinfo +This section contains basic technical metadata that isn't specific to any format: + +- copyrightBasis element +- copyrightNote element +- created element (file creation date) +- creatingApplicationName element (name of the software used to create the file) +- creatingApplicationVersion element (version of the software used to create the file) +- creatingos element (Operating system used to create the file) +- filepath element (full filepath to the file) +- filename element (name of the file) +- fslastmodified element (last modified date based on file system metadata) +- inhibitorType element (type of file inhibitor) +- inhibitorTarget element (what is being inhibited) +- lastmodified element (last modified date based on metadata embedded in the file) +- md5checksum element (MD5 value for the file) +- rightsBasis element +- size element (size of the file in bytes) + +Each of the above elements will carry toolname and toolversion attributes to record the name of the tool that is the source of the information. In most cases there will also be a status attribute value equal to ```SINGLE_RESULT``` which means that there wasn't any conflicting information output by a tool. In some cases, for example if tools reported different file creation dates there will be a status value of ```CONFLICT```. + +#### filestatus +If any of the tools are able to validate files in this format, this section will contain validity information: + +- message element (more information from tools about what was found) +- valid element (whether or not the file was found to be valid) +- well-formed element (whether or not the file was found to be well-formed) + +#### metadata +This section contains the format-specific technical metadata after each tool's native output has been normalized and consolidated by FITS. The elements in this section differ depending on the genre of the file format (audio, document, image, text, video). Each genre-specific section below lists the potential elements that can appear; the actual elements depend on what the tools are able to determine for the file. + +
+AUDIO ELEMENTS + +
+ + audioDataEncoding + + + avgBitRate + + + avgPacketSize + + + bitDepth + + + bitRate + + + blockAlign + + + blockSizeMax + + + blockSizeMin + + + byteOrder + + + channels + + + duration + + + maxBitRate + + + maxPacketSize + + + numPackets + + + numSamples + + + offset + + + sampleRate + + + software + + + soundField + + + time + + + wordSize + +
+ +
+ +
+DOCUMENT ELEMENTS + +
+ + author + + + hasAnnotations + + + hasOutline + + + isProtected + + + isRightsManaged + + + isTagged + + + language + + + pageCount + + + title + +
+ +
+ +
+IMAGE ELEMENTS + +
+ + apertureValue + + + bitsPerSample + + + brightnessValue + + + byteOrder + + + captureDevice + + + cfaPattern + + + cfaPattern2 + + + colorMap + + + colorSpace + + + compressionScheme + + + digitalCameraManufacturer + + + digitalCameraModelName + + + digitalCameraSerialNo + + + exifVersion + + + exposureBiasValue + + + exposureIndex + + + exposureProgram + + + exposureTime + + + extraSamples + + + flash + + + flashEnergy + + + fNumber + + + focalLength + + + gpsAltitudeRef + + + gpsAltitude + + + gpsAreaInformation + + + gpsDateStamp + + + gpsDestBearing + + + gpsDestBearingRef + + + gpsDestDistance + + + gpsDestDistanceRef + + + gpsDestLatitude + + + gpsDestLatitudeRef + + + gpsDestLongitude + + + gpsDestLongitudeRef + + + gpsDifferential + + + gpsDOP + + + gpsImgDirection + + + gpsImgDirectionRef + + + gpsLatitude + + + gpsLatitudeRef + + + gpsLongitude + + + gpsLongitudeRef + + + gpsMapDatum + + + gpsMeasureMode + + + gpsProcessingMethod + + + gpsSatellites + + + gpsSpeed + + + gpsSpeedRef + + + gpsStatus + + + gpsTimeStamp + + + gpsTrack + + + gpsTrackRef + + + gpsVersionID + + + grayResponseUnit + + + iccProfileName + + + iccProfileVersion + + + imageHeight + + + imageProducer + + + imageWidth + + + isoSpeedRating + + + lightSource + + + maxApertureValue + + + meteringMode + + + oECF + + + orientation + + + primaryChromaticitiesBlueX + + + primaryChromaticitiesBlueY + + + primaryChromaticitiesGreenX + + + primaryChromaticitiesGreenY + + + primaryChromaticitiesRedX + + + primaryChromaticitiesRedY + + + qualityLayers + + + referenceBlackWhite + + + resolutionLevels + + + samplesPerPixel + + + samplingFrequencyUnit + + + scannerManufacturer + + + scannerModelName + + + scannerModelNumber + + + scannerModelSerialNo + + + scanningSoftwareName + + + scanningSoftwareVersionNo + + + sensingMethod + + + shutterSpeedValue + + + spectralSensitivity + + + subjectDistance + + + tileHeight + + + tileWidth + + + whitePointXValue + + + whitePointYValue + + + xSamplingFrequency + + + ySamplingFrequency + + + YCbCrCoefficients + + + YCbCrPositioning + + + YCbCrSubSampling + +
+ +
+ +
+TEXT ELEMENTS + +
+ + charset + + + linebreak + + + markupBasis + + + markupBasisVersion + + + markupLanguage + +
+ +
+ +
+VIDEO ELEMENTS + +
+ + apertureSetting + + + bitDepth + + + bitRate + + + blockSizeMax + + + blockSizeMin + + + channels + + + creatingApplicationName + + + dataFormatType + + + digitalCameraManufacturer + + + digitalCameraModelName + + + duration + + + exposureTime + + + exposureProgram + + + fNumber + + + focus + + + frameRate + + + gain + + + gpsAltitude + + + gpsAltitudeRef + + + gpsAreaInformation + + + gpsDateStamp + + + gpsDestBearing + + + gpsDestBearingRef + + + gpsDestDistance + + + gpsDestDistanceRef + + + gpsDestLatitude + + + gpsDestLatitudeRef + + + gpsDestLongitude + + + gpsDestLongitudeRef + + + gpsDifferential + + + gpsDOP + + + gpsImgDirection + + + gpsImgDirectionRef + + + gpsLatitude + + + gpsLatitudeRef + + + gpsLongitude + + + gpsLongitudeRef + + + gpsMapDatum + + + gpsMeasureMode + + + gpsProcessingMethod + + + gpsSatellites + + + gpsSpeed + + + gpsSpeedRef + + + gpsStatus + + + gpsTimeStamp + + + gpsTrack + + + gpsTrackRef + + + gpsVersionID + + + imageHeight + + + imageStabilization + + + imageWidth + + + sampleRate + + + shutterSpeedValue + + + videoStreamType + + + whiteBalance + + + xSamplingFrequency + + + ySamplingFrequency + +
+ +
+ +#### toolOutput +When the fits.xml file is configured to also output the native tool output, this section will contain the output from each tool that ran against the file, each surrounded by tool elements like this example: + +``` + + + [Jhove's native output] + + + [file utility's native output] + + + [ExifTool's native output] + + + [Droid's native output] + + + [NLNZ Metadata Extractor's native output] + + + [OIS File Information's native output] + + + [ffident's native output] + + + [Tika's native output] + + +``` + +#### statistics + In later versions of FITS this section was added to record how much time each wrapped tool spent processing the file. As shown in this example, when a tool isn't run against a file, a status attribute value of "did not run" is output: + +``` + + + + + + + + + + + + + +``` + +#### Additional things to understand about the FITS XML schema +##### **STATUS ATTRIBUTE** +If multiple tools disagree on a format identity or other metadata values, a status attribute is added to the element with a value of ```CONFLICT```. If only a single tool reports a format identity or other metadata value, a status attribute is added to the element with a value of ```SINGLE_RESULT```. If multiple tools agree on a an identity or value, and none disagree, the status attribute is omitted. A ```PARTIAL``` value is written when the format can only be partially identified, for example a format name is identified but not a MIME media type. + +##### **TOOL ORDERING PREFERENCE** +The ordering preference of the tools in xml/fits.xml determines the ordering of conflicting values. If the report-conflict configuration option is set to false then only the tool that first reported the element is displayed and the other conflicting values are discarded. + +##### **RELATIONSHIP BETWEEN FORMAT IDENTIFICATION AND TECHINICAL METADATA** +All tools that agree on a format identity are consolidated into a single `````` section. + +**Technical metadata is only output (and a part of the consolidation process) for tools that were able to identify the file and that are listed in the first `````` section. All other output is discarded**. + +##### **TOOL OUTPUT NORMALIZATION** +It’s possible for tools to output conflicting data when they actually mean the same thing. For example, one tool could report the format of a PNG image as “Portable Network Graphics”, while another may report “PNG”. A tool could report a sampling frequency unit of “2”, while another may report the text string “inches”. If left alone, these would cause false positive conflicts to appear in the FITS consolidated output. These differences are converted in the XSLT that converts the native tool output into FITS XML. In general, FITS prefers text strings to numeric values (“inches” instead of “2”), and complete format names to abbreviations (“Portable Network Graphics” instead of “PNG”). If new tools or formats are being added to FITS then thorough testing should be done to ensure that any false positive conflicts are resolved. + +--- \ No newline at end of file diff --git a/docs/guides/references/standard-metadata-schemas.md b/docs/guides/references/standard-metadata-schemas.md new file mode 100644 index 00000000..049846e4 --- /dev/null +++ b/docs/guides/references/standard-metadata-schemas.md @@ -0,0 +1,57 @@ +### Standard metadata schemas +When FITS is told to output standard XML metadata (e.g. by use of the -x or -xc options on the command-line), the following community-standard XML schemas for technical metadata are used: + +#### Audio + +| --------- | ----------- | +| Short name | AES Audio Object | +| Full name | AES standard for audio metadata – Audio object structures for preservation and restoration | +| Maintenance organization | Audio Engineering Society, Inc. (AES) | +| Website | [http://www.aes.org/publications/standards/search.cfm?docID=84](http://www.aes.org/publications/standards/search.cfm?docID=84) [http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object](http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object) | + + +#### Documents + +| --------- | ----------- | +| Short name | DocumentMD | +| Full name | Document Metadata: document technical metadata for digital preservation | +| Maintenance organization | Florida Virtual Campus / Harvard Library | +| Website | [http://fclaweb.fcla.edu/content/format-specific-metadata](http://fclaweb.fcla.edu/content/format-specific-metadata) | + + +#### Images + +| --------- | ----------- | +| Short name | MIX | +| Full name | NISO Metadata for Images in XML Schema | +| Maintenance organization | Library of Congress (for NISO) | +| Website | [http://www.loc.gov/standards/mix/](http://www.loc.gov/standards/mix/) | + + +#### Text + +| --------- | ----------- | +| Short name | TextMD | +| Full name | Technical Metadata for Text | +| Maintenance organization | Library of Congress | +| Website | [http://www.loc.gov/standards/textMD/](http://www.loc.gov/standards/textMD/) | + + +#### Video + +| --------- | ----------- | +| Short name | EBUCore | +| Full name | EBUCore metadata | +| Maintenance organization | European Broadcasting Union | +| Website | [https://tech.ebu.ch/MetadataEbuCore](https://tech.ebu.ch/MetadataEbuCore) | + + +#### Containers + +| --------- | ----------- | +| Short name | ContainerMD | +| Full name | ContainerMD | +| Maintenance organization | Bibliothèque Nationale de France | +| Website | [http://bibnum.bnf.fr/containerMD-v1_1/index.html](http://bibnum.bnf.fr/containerMD-v1_1/index.html) | + +--- \ No newline at end of file diff --git a/docs/guides/references/tools.md b/docs/guides/references/tools.md new file mode 100644 index 00000000..b3a0512d --- /dev/null +++ b/docs/guides/references/tools.md @@ -0,0 +1,48 @@ +### Tools + +#### Included tools +The latest version of FITS is configured to use these tools for identifying, validating, and extracting technical metadata: + +
+ADL Tool + +
+
Maintenance organization
+
Harvard Library
+
Formats supported
+
Audio Decision List files
+
+
+ +
+Apache Tiki + +
+
Capabilities
+
Identifies file formats
+
Maintenance organization
+
Apache
+
Formats supported
+
see supported document formats
+
+
+ +#### Potential tools + +Capabilities +Maintenance organization +Details +Formats supported +URL + + + + {% for tool in site.tools %} + {% if tool.name %} +

{{ tool.name }}

+

{{ tool.capabilities }}

+ + {% endif %} + {% endfor %} + +--- \ No newline at end of file diff --git a/docs/guides/understanding-the-output.md b/docs/guides/understanding-the-output.md new file mode 100644 index 00000000..3e423851 --- /dev/null +++ b/docs/guides/understanding-the-output.md @@ -0,0 +1,29 @@ +## Understanding the output + +### Output format +The output format of FITS is controlled by the options used when executing FITS, how FITS is configured and the genre of the format. + +The format of the output will include one or more of the following: + +#### FITS XML +- This is the default output described in detail [here](https://projects.iq.harvard.edu/fits/fits-xml) + +#### "Standard" Metadata +- This is format genre-specific technical metadata in community-standard XML schemas +- When using the command-line, use the -x parameter (to just get the output in standard metadata), or -xc (to get FITS XML in addition to standard metadata) +- The specific XML schema used is determined by the format genre - for more information see the [standard metadata schemas](https://projects.iq.harvard.edu/fits/standard-metadata-schemas) + +#### Native tool output +- This is the pre-normalized output of each tool run against the file +- This is specified by the display-tool-output configuration property in the [fits.xml configuration file](https://projects.iq.harvard.edu/fits/fits-configuration-files#fits_xml_config) + +### Output writing method (change this wording) + +#### Terminal +- This is the default unless an output file is specified + +#### File +- When using the command-line, use the -o parameter +- When using the Java API, use the FitsOutput.saveToDisk method + +--- \ No newline at end of file diff --git a/docs/images/fits_process.jpg b/docs/images/fits_process.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cb0209df46e3fd4688ac2f65ad0fd0c9721f657 GIT binary patch literal 142736 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

OH|Pn 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

*;u72w;|)?Aq;%qJIA36BJrM*E5xt6~3b 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 Dh`9y` literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..97e238e7 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,24 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +layout: home +--- + +

{{ site.title }}

+

Documentation and official code release of the FITS and FITS Web Service projects

+ + + + + +

FITS Contributors

+
    +
  • Contributor 1
  • +
  • Contributor 2
  • +
  • Contributor 3
  • +
\ No newline at end of file diff --git a/docs/index.markdown b/docs/index.markdown deleted file mode 100644 index 06715078..00000000 --- a/docs/index.markdown +++ /dev/null @@ -1,6 +0,0 @@ ---- -# Feel free to add content and custom Front Matter to this file. -# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults - -layout: home ---- diff --git a/docs/projects.md b/docs/projects.md new file mode 100644 index 00000000..539275b5 --- /dev/null +++ b/docs/projects.md @@ -0,0 +1,22 @@ +--- +layout: page +title: Projects +subtitle: brief description of page +permalink: /projects +--- + +

FITS

+

Release Notes & Downloads

+The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. + +

FITS Web Service

+

Release Notes & Downloads

+The FITS Web Service is a project that allows FITS to be deployed as a service on either Tomcat or JBoss. The code has been built and test using Java 7 and Java 8 and tested on Tomcat 7, Tomcat 8, and minimally on JBoss 7.1. The path to the service will be the WAR file name plus the service name. E.g. - For release 1.1.1 which provides the release artifact fits-1.1.1.war -- http://localhost:8080/fits-1.1.1/examine/ as the base URL. This can be adjusted by either changing the WAR filename or using server-specific settings. + +The source code and further documentation for this project and using GET and POST requests to process input files with this URL is available on GitHub here:FITSservlet + +Note: The latest and future versions of this project are built and tested using Java 8. + +

Islandora(?)

+ +

Pronom(?)

From 70806b58f6e12b171ac5bb6c47dfea80bd9ff4f0 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 16 Mar 2022 16:25:05 -0400 Subject: [PATCH 03/36] header/footer setup --- docs/_includes/footer.html | 45 +++++++++++++++++++++++++++ docs/_includes/header.html | 33 ++++++++++++++++++++ docs/_layouts/home.html | 34 ++++++++++++++++++++ docs/_layouts/page.html | 16 ++++++++++ docs/_posts/2022-03-15-first-post.md | 8 +++++ docs/images/fits-logo.png | Bin 0 -> 2880 bytes 6 files changed, 136 insertions(+) create mode 100644 docs/_includes/footer.html create mode 100644 docs/_includes/header.html create mode 100644 docs/_layouts/home.html create mode 100644 docs/_layouts/page.html create mode 100644 docs/_posts/2022-03-15-first-post.md create mode 100644 docs/images/fits-logo.png diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html new file mode 100644 index 00000000..f40bfd33 --- /dev/null +++ b/docs/_includes/footer.html @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/docs/_includes/header.html b/docs/_includes/header.html new file mode 100644 index 00000000..c9a6a391 --- /dev/null +++ b/docs/_includes/header.html @@ -0,0 +1,33 @@ + diff --git a/docs/_layouts/home.html b/docs/_layouts/home.html new file mode 100644 index 00000000..67567677 --- /dev/null +++ b/docs/_layouts/home.html @@ -0,0 +1,34 @@ +--- +layout: default +--- + +
+ {%- if page.title -%} +

{{ page.title }}

+ {%- endif -%} + + {{ content }} + + + +
\ No newline at end of file diff --git a/docs/_layouts/page.html b/docs/_layouts/page.html new file mode 100644 index 00000000..4ba8cdeb --- /dev/null +++ b/docs/_layouts/page.html @@ -0,0 +1,16 @@ +--- +layout: default +--- + +
+ +
+

{{ page.title }}

+ {% if page.subtitle %}

{{ page.subtitle }}

{% endif %} +
+ +
+ {{ content }} +
+ +
\ No newline at end of file diff --git a/docs/_posts/2022-03-15-first-post.md b/docs/_posts/2022-03-15-first-post.md new file mode 100644 index 00000000..f7b5456c --- /dev/null +++ b/docs/_posts/2022-03-15-first-post.md @@ -0,0 +1,8 @@ +--- +layout: post +title: "First post" +date: 2022-03-15 19:02:51 -0400 +categories: blog +--- + +My first post \ No newline at end of file diff --git a/docs/images/fits-logo.png b/docs/images/fits-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9b11e8d8a3b55b8c9ab57dd8e8f1c9333b834510 GIT binary patch literal 2880 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 Date: Thu, 17 Mar 2022 10:42:32 -0400 Subject: [PATCH 04/36] adding more content --- docs/_includes/footer.html | 1 + docs/_includes/head.html | 12 +++ docs/_layouts/documentation.html | 18 +++++ docs/_layouts/presentation.html | 16 ++++ docs/_layouts/tool.html | 10 --- docs/_posts/2009-05-18-fits-poster.md | 14 ++++ docs/_posts/2009-09-01-new-tool.md | 10 +++ .../2010-10-01-fits-bpe-presentation.md | 9 +++ .../2011-06-09-fits-tool-belt-presentation.md | 9 +++ .../2012-07-25-fits-demo-presentation.md | 9 +++ docs/_posts/2013-04-29-fits-webinar.md | 9 +++ docs/_posts/2013-11-20-fits-blitz.md | 13 ++++ docs/_posts/2015-06-01-video-support copy.md | 9 +++ docs/_posts/2022-03-15-first-post.md | 8 -- .../2022-03-16-welcome-to-jekyll.markdown | 29 ------- docs/_tools/ffident/index.md | 6 -- docs/about.md | 16 +++- docs/blog.md | 17 +++++ docs/css/main.css | 65 ++++++++++++++++ docs/guides.md | 16 +--- docs/guides/overview-of-fits-processing.md | 2 +- docs/guides/references.md | 4 +- docs/guides/references/tools.md | 10 --- docs/quick-start.md | 75 +++++++++++++++++++ 24 files changed, 307 insertions(+), 80 deletions(-) create mode 100644 docs/_includes/head.html create mode 100644 docs/_layouts/documentation.html create mode 100644 docs/_layouts/presentation.html delete mode 100644 docs/_layouts/tool.html create mode 100644 docs/_posts/2009-05-18-fits-poster.md create mode 100644 docs/_posts/2009-09-01-new-tool.md create mode 100644 docs/_posts/2010-10-01-fits-bpe-presentation.md create mode 100644 docs/_posts/2011-06-09-fits-tool-belt-presentation.md create mode 100644 docs/_posts/2012-07-25-fits-demo-presentation.md create mode 100644 docs/_posts/2013-04-29-fits-webinar.md create mode 100644 docs/_posts/2013-11-20-fits-blitz.md create mode 100644 docs/_posts/2015-06-01-video-support copy.md delete mode 100644 docs/_posts/2022-03-15-first-post.md delete mode 100644 docs/_posts/2022-03-16-welcome-to-jekyll.markdown delete mode 100644 docs/_tools/ffident/index.md create mode 100644 docs/css/main.css create mode 100644 docs/quick-start.md diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html index f40bfd33..be18b57f 100644 --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -37,6 +37,7 @@ diff --git a/docs/_includes/head.html b/docs/_includes/head.html new file mode 100644 index 00000000..9dde3580 --- /dev/null +++ b/docs/_includes/head.html @@ -0,0 +1,12 @@ + + + + + {%- seo -%} + + + {%- feed_meta -%} + {%- if jekyll.environment == 'production' and site.google_analytics -%} + {%- include google-analytics.html -%} + {%- endif -%} + \ No newline at end of file diff --git a/docs/_layouts/documentation.html b/docs/_layouts/documentation.html new file mode 100644 index 00000000..052d7e9d --- /dev/null +++ b/docs/_layouts/documentation.html @@ -0,0 +1,18 @@ +--- +layout: default +--- + +
+ +
+

{{ page.title }}

+ {% if page.subtitle %}

{{ page.subtitle }}

{% endif %} +
+ +
+
+ {{ content }} +
+
+ +
\ No newline at end of file diff --git a/docs/_layouts/presentation.html b/docs/_layouts/presentation.html new file mode 100644 index 00000000..16118538 --- /dev/null +++ b/docs/_layouts/presentation.html @@ -0,0 +1,16 @@ +--- +layout: default +--- + +
+

{{ page.title | escape }}

+
+ +
+ {% if page.date %}

Presentation Date: {{ page.date }}

{% endif %} + {% if page.location %}

Location: {{ page.location }}

{% endif %} + {% if page.presentors %}

Presentor(s): {{ page.presentors }}

{% endif %} + {% if page.link %}

Presentation Slides

{% endif %} +
+ +{{ content }} diff --git a/docs/_layouts/tool.html b/docs/_layouts/tool.html deleted file mode 100644 index eee51dca..00000000 --- a/docs/_layouts/tool.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: default ---- - -
-

{{ tool.name }}

- {% if tool.capabilities %} -

Capabilities: {{ tool.capabilities }}

- {% endif %} -
\ No newline at end of file diff --git a/docs/_posts/2009-05-18-fits-poster.md b/docs/_posts/2009-05-18-fits-poster.md new file mode 100644 index 00000000..d27391ab --- /dev/null +++ b/docs/_posts/2009-05-18-fits-poster.md @@ -0,0 +1,14 @@ +--- +layout: post +title: Video support in FITS +date: 2015-06-01 +categories: blog +# author: author +# author_link: author_link +--- + +Harvard is in the process of integrating the [MediaInfo](https://mediaarea.net/en/MediaInfo) tool into FITS! When complete, the tool will provide format identification and technical metadata extraction for video file formats, allow FITS XML to represent technical metadata for video file formats, and support the creation of [EBUCore](https://tech.ebu.ch/MetadataEbuCore) XML metadata through the use of the embedded OTS package. + +It is expected that the first public release will be made in summer 2016, in support of a Harvard project to add video preservation and access services to the Harvard Digital Repository Service, a project that has been made possible through the generous support of the Arcadia Fund. + +MediaInfo and EBUCore were selected for video format analysis and technical metadata delivery in consultation with [AVPreserve](http://www.avpreserve.com/). \ No newline at end of file diff --git a/docs/_posts/2009-09-01-new-tool.md b/docs/_posts/2009-09-01-new-tool.md new file mode 100644 index 00000000..c1b5c8b1 --- /dev/null +++ b/docs/_posts/2009-09-01-new-tool.md @@ -0,0 +1,10 @@ +--- +layout: post +title: A New Tool for Digital Preservation Repositories +date: 2009-09-01 +categories: blog +# author: author +# author_link: author_link +--- + +It was announced in the [September/October 2009 D-Lib In Brief](http://www.dlib.org/dlib/september09/09inbrief.html) that FITS was made available as an open source tool. \ No newline at end of file diff --git a/docs/_posts/2010-10-01-fits-bpe-presentation.md b/docs/_posts/2010-10-01-fits-bpe-presentation.md new file mode 100644 index 00000000..440d3df3 --- /dev/null +++ b/docs/_posts/2010-10-01-fits-bpe-presentation.md @@ -0,0 +1,9 @@ +--- +layout: presentation +title: FITS - The File Information Tool Set, Presentation +date: 2010-10-01 +location: Best Practices Exchange, Phoenix, Arizona +presentors: Spencer McEwen +# link: https://projects.iq.harvard.edu/files/fits/files/fits_poster_final.pdf +categories: blog +--- \ No newline at end of file diff --git a/docs/_posts/2011-06-09-fits-tool-belt-presentation.md b/docs/_posts/2011-06-09-fits-tool-belt-presentation.md new file mode 100644 index 00000000..e62c2722 --- /dev/null +++ b/docs/_posts/2011-06-09-fits-tool-belt-presentation.md @@ -0,0 +1,9 @@ +--- +layout: presentation +title: Free Tools for your Preservation Tool Belt, Presentation +date: 2011-06-09 +location: Open Repositories 2011, Austin, Texas +presentors: Randy Stern +link: https://projects.iq.harvard.edu/files/fits/files/drs2_preservation_tools-3.pdf +categories: blog +--- \ No newline at end of file diff --git a/docs/_posts/2012-07-25-fits-demo-presentation.md b/docs/_posts/2012-07-25-fits-demo-presentation.md new file mode 100644 index 00000000..5353eb1d --- /dev/null +++ b/docs/_posts/2012-07-25-fits-demo-presentation.md @@ -0,0 +1,9 @@ +--- +layout: presentation +title: FITS Demo, Presentation +date: 2012-07-25 +location: Digital Preservation 2012, Washington DC +presentors: Andrea Goethals +# link: https://projects.iq.harvard.edu/files/fits/files/drs2_preservation_tools-3.pdf +categories: blog +--- \ No newline at end of file diff --git a/docs/_posts/2013-04-29-fits-webinar.md b/docs/_posts/2013-04-29-fits-webinar.md new file mode 100644 index 00000000..c410d178 --- /dev/null +++ b/docs/_posts/2013-04-29-fits-webinar.md @@ -0,0 +1,9 @@ +--- +layout: presentation +title: Using FITS to Identify File Formats and Extract Metadata, Webinar +date: 2013-04-29 +location: ASERL-sponsored webinar +presentors: Andrea Goethals +# link: https://projects.iq.harvard.edu/files/fits/files/drs2_preservation_tools-3.pdf +categories: blog +--- \ No newline at end of file diff --git a/docs/_posts/2013-11-20-fits-blitz.md b/docs/_posts/2013-11-20-fits-blitz.md new file mode 100644 index 00000000..6efe32a1 --- /dev/null +++ b/docs/_posts/2013-11-20-fits-blitz.md @@ -0,0 +1,13 @@ +--- +layout: post +title: FITS Blitz +date: 2013-11-20 +categories: blog +# author: author +# author_link: author_link +--- + +We're almost finished with the 2-week project to merge the different forks of FITS on GitHub and to make it easier for others to contribute code to the FITS test base. This was done as a joint project between Harvard Library and the Open Planets Foundation with funding by the SPRUCE project. Learn more about the FITS blitz at: + +- [Paul Wheatley's blog post on the Open Planets blog](http://www.openplanetsfoundation.org/blogs/2013-11-06-fits-blitz) +- [The announcement in the Harvard Library newsletter](http://library.harvard.edu/11152013-1810/fits-blitz) \ No newline at end of file diff --git a/docs/_posts/2015-06-01-video-support copy.md b/docs/_posts/2015-06-01-video-support copy.md new file mode 100644 index 00000000..b88d69bc --- /dev/null +++ b/docs/_posts/2015-06-01-video-support copy.md @@ -0,0 +1,9 @@ +--- +layout: presentation +title: FITS – The File Information Tool Set, Poster +date: 2009-05-18 +location: Open Repositories 2009, Georgia Institute of Technology +presentors: Spencer McEwen and Randy Stern +link: https://projects.iq.harvard.edu/files/fits/files/fits_poster_final.pdf +categories: blog +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-15-first-post.md b/docs/_posts/2022-03-15-first-post.md deleted file mode 100644 index f7b5456c..00000000 --- a/docs/_posts/2022-03-15-first-post.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -title: "First post" -date: 2022-03-15 19:02:51 -0400 -categories: blog ---- - -My first post \ No newline at end of file diff --git a/docs/_posts/2022-03-16-welcome-to-jekyll.markdown b/docs/_posts/2022-03-16-welcome-to-jekyll.markdown deleted file mode 100644 index b2de3a46..00000000 --- a/docs/_posts/2022-03-16-welcome-to-jekyll.markdown +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: post -title: "Welcome to Jekyll!" -date: 2022-03-16 11:44:47 -0400 -categories: jekyll update ---- -You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. - -Jekyll requires blog post files to be named according to the following format: - -`YEAR-MONTH-DAY-title.MARKUP` - -Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works. - -Jekyll also offers powerful support for code snippets: - -{% highlight ruby %} -def print_hi(name) - puts "Hi, #{name}" -end -print_hi('Tom') -#=> prints 'Hi, Tom' to STDOUT. -{% endhighlight %} - -Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk]. - -[jekyll-docs]: https://jekyllrb.com/docs/home -[jekyll-gh]: https://github.com/jekyll/jekyll -[jekyll-talk]: https://talk.jekyllrb.com/ diff --git a/docs/_tools/ffident/index.md b/docs/_tools/ffident/index.md deleted file mode 100644 index a055c132..00000000 --- a/docs/_tools/ffident/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tool -name: Apache -url: https://github.com/geoblacklight/geoblacklight -capabilities: A discovery application for geospatial data, built on Blacklight and Ruby on Rails ---- \ No newline at end of file diff --git a/docs/about.md b/docs/about.md index be445004..366669af 100644 --- a/docs/about.md +++ b/docs/about.md @@ -4,4 +4,18 @@ title: About permalink: /about --- -The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. \ No newline at end of file +

FITS

+ +The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. + +

Release Notes & Downloads

+ +

FITS Web Service

+ +The FITS Web Service is a project that allows FITS to be deployed as a service on either Tomcat or JBoss. The code has been built and test using Java 7 and Java 8 and tested on Tomcat 7, Tomcat 8, and minimally on JBoss 7.1. The path to the service will be the WAR file name plus the service name. E.g. - For release 1.1.1 which provides the release artifact fits-1.1.1.war -- http://localhost:8080/fits-1.1.1/examine/ as the base URL. This can be adjusted by either changing the WAR filename or using server-specific settings. + +The source code and further documentation for this project and using GET and POST requests to process input files with this URL is available on GitHub here:FITSservlet + +Note: The latest and future versions of this project are built and tested using Java 8. + +

Release Notes & Downloads

\ No newline at end of file diff --git a/docs/blog.md b/docs/blog.md index 8a5d6b5d..8b83992f 100644 --- a/docs/blog.md +++ b/docs/blog.md @@ -4,3 +4,20 @@ title: Blog subtitle: News, presentations, and blog posts go here permalink: /blog --- + +
    + {% for post in site.categories.blog %} +
  • +

    + {{ post.title }} +

    +

    {{ post.snippet }}

    + +
  • +
    + {% endfor %} +
\ No newline at end of file diff --git a/docs/css/main.css b/docs/css/main.css new file mode 100644 index 00000000..cf85cdab --- /dev/null +++ b/docs/css/main.css @@ -0,0 +1,65 @@ +.wrapper { + max-width: calc(1170px - (20px * 2)); + margin-right: auto; + margin-left: auto; + padding-right: 20px; + padding-left: 20px; +} + +hr { + margin-top: 40px; + margin-bottom: 40px; +} + +.svg-icon { + width: 20px; + height: 20px; + vertical-align: middle; +} + + +/* anchor links need an offset to clear the fixed header */ +:target::before { + content: ""; + display: block; + height: 80px; + /* fixed header height*/ + margin: -80px 0 0; + /* negative fixed header height */ } + +.documentation-post .post-header { + position: sticky; + top: 0; + background: white; + padding-top: 10px; + border-bottom: .55px solid; + z-index: 2; + } + +/* 48em = 768px */ +@media (min-width: 48em) { + .documentation { + display: flex; + justify-content: space-between; + } + + .sidebar { + overflow-y: auto; + height: 100vh; + flex: 0 0 25%; + max-width: 25%; + } + .sidebar { + border-right: 1px solid black; + padding-right: 20px; + position: -webkit-sticky; + position: sticky; + top: 80px; + } + + .main { + padding-left: 20px; + flex: 0 0 calc(75% - 40px); + max-width: calc(75% - 40px); + } +} \ No newline at end of file diff --git a/docs/guides.md b/docs/guides.md index 6827774e..d1f4e0f3 100644 --- a/docs/guides.md +++ b/docs/guides.md @@ -1,25 +1,17 @@ --- -layout: page -title: Guides -permalink: /guides +layout: documentation +title: User manual +permalink: /user-manual --- -
- - -
-
+
{% include_relative guides/introduction.md %} {% include_relative guides/overview-of-fits-processing.md %} {% include_relative guides/understanding-the-output.md %} {% include_relative guides/references.md %} -
diff --git a/docs/guides/overview-of-fits-processing.md b/docs/guides/overview-of-fits-processing.md index 1a1725b4..81aa7875 100644 --- a/docs/guides/overview-of-fits-processing.md +++ b/docs/guides/overview-of-fits-processing.md @@ -2,7 +2,7 @@ FITS works in different stages as shown in the image below. - + The steps are described in more detail here. diff --git a/docs/guides/references.md b/docs/guides/references.md index ee4e6faa..54087e2e 100644 --- a/docs/guides/references.md +++ b/docs/guides/references.md @@ -4,6 +4,4 @@ {% include_relative guides/references/fits-xml.md %} {% include_relative guides/references/standard-metadata-schemas.md %} {% include_relative guides/references/fits-configuration-files.md %} -{% include_relative guides/references/tools.md %} - ---- \ No newline at end of file +{% include_relative guides/references/tools.md %} \ No newline at end of file diff --git a/docs/guides/references/tools.md b/docs/guides/references/tools.md index b3a0512d..d21df518 100644 --- a/docs/guides/references/tools.md +++ b/docs/guides/references/tools.md @@ -35,14 +35,4 @@ Details Formats supported URL - - - {% for tool in site.tools %} - {% if tool.name %} -

{{ tool.name }}

-

{{ tool.capabilities }}

- - {% endif %} - {% endfor %} - --- \ No newline at end of file diff --git a/docs/quick-start.md b/docs/quick-start.md new file mode 100644 index 00000000..a93e9dbc --- /dev/null +++ b/docs/quick-start.md @@ -0,0 +1,75 @@ +--- +layout: documentation +title: Quick start +# subtitle: brief description of page +permalink: /quick-start +--- + + + +
+ +## 1. System Requirements + +FITS is a Java program and requires Java version 1.8 or higher. To find out your Java version type java -version in a command-line window. + +## 2. Installation + +Download the latest [release](https://github.com/harvard-lts/fits/releases). If this is your first time downloading FITS, create a directory for FITS: + +- On Windows: C:\Program Files\Fits +- On Mac OS X: /Applications/Fits +- On *nix: /home/myuser/Fits + +Extract the contents of your ZIP file to your FITS directory. You should end up with a another directory under your top-level FITS directory that has a version number embedded in it, for example on Windows: C:\Program Files\Fits\fits-1.3.0 + +## 3. Running FITS + +FITS can be run on a command-line or within a program using the Java API. + +## 4. FITS from the command-line + +Run FITS on the command-line using one of the start-up scripts (fits.bat on Windows, fits.sh on Mac OS X and *nix). + +On Windows 7: + +- Open up a command line interface window: Click on Start -> Type in cmd in the lower-left box and hit enter +- Navigate to the directory where you installed FITS, for example: cd "..\..\Program Files\fits\fits-1.3.0" +- Execute FITS using the start-up script with the -h parameter to see the parameter options: fits.bat -h + +On *nix: + +- Open up a terminal window. +- Navigate to the directory where you installed FITS +- If it not already, make the fits.sh file executable: chmod +x fits.sh +- Run the script named fits.sh: ./fits.sh + +Here are a couple examples of running FITS to get you started. These are relatively simple examples assuming Windows - more complex examples can be found in the on-line user manual. + +- Run FITS against its release text file printing the FITS output to the terminal: + - ```fits.bat -i version.properties``` + - On Linux: ```./fits.sh -i version.properties``` +- Run FITS against its release text file saving the FITS output to a file: + - ```fits.bat -i version.properties -o myoutput.txt``` +- Output the technical metadata only (in the TextMD format) for the file to the terminal: + - ```fits.bat -x -i version.properties``` +- Output the FITS output plus technical metadata (in the TextMD format) for the text file to the terminal: + - ```fits.bat -xc -i version.properties``` + +**NOTE**: It may be necessary to increase Java heap memory when processing large audio or video file. To do this, modify the command line startup script by adding the following right after "java": + +- ```-Xmx``` (where is in megabytes or gigabytes) +- Example: ```java -Xmx512m or java -Xmx5g``` + +## 5. Using FITS' Java API + +See the [Developer Manual](https://github.com/harvard-lts/fits/wiki/Developer-Manual). + +## 6. Next steps + +After you are up and running see the [User Manual]() for more documentation. + +
\ No newline at end of file From c60fd13f54d2f475712693ecaf93bb157bbc6620 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Thu, 17 Mar 2022 16:54:09 -0400 Subject: [PATCH 05/36] edits with tammy in working meeting this afternoon --- docs/_config.yml | 4 +- docs/_includes/header.html | 2 +- docs/about.md | 2 +- docs/guides/introduction.md | 8 +++- docs/guides/overview-of-fits-processing.md | 2 +- docs/guides/references/fits-xml.md | 15 +++++--- .../references/standard-metadata-schemas.md | 2 +- docs/guides/references/tools.md | 37 ++----------------- docs/guides/understanding-the-output.md | 8 ++-- docs/index.html | 6 +-- docs/{blog.md => news.md} | 4 +- docs/projects.md | 22 ----------- docs/quick-start.md | 2 +- 13 files changed, 36 insertions(+), 78 deletions(-) rename docs/{blog.md => news.md} (95%) delete mode 100644 docs/projects.md diff --git a/docs/_config.yml b/docs/_config.yml index 2eba5496..b8f1d9d3 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -22,8 +22,8 @@ title: FITS email: your-email@example.com description: >- # this means to ignore newlines until "baseurl:" Documentation and official code release of the FITS and the FITS Web Service projects -baseurl: "/fits.github.io" # the subpath of your site, e.g. /blog -url: "https://mferrarini.github.io" # the base hostname & protocol for your site, e.g. http://example.com +baseurl: "/fits" # the subpath of your site, e.g. /blog +url: "https://harvard-lts.github.io" # the base hostname & protocol for your site, e.g. http://example.com github_reponame_fits: FITS github_url_fits: "https://github.com/harvard-lts/fits" github_reponame_fits-servlet: FITSservlet diff --git a/docs/_includes/header.html b/docs/_includes/header.html index c9a6a391..0ad105fc 100644 --- a/docs/_includes/header.html +++ b/docs/_includes/header.html @@ -3,7 +3,7 @@
{%- assign default_paths = site.pages | map: "path" -%} {%- assign page_paths = site.header_pages | default: default_paths -%} - diff --git a/docs/about.md b/docs/about.md index 366669af..4c7ecb30 100644 --- a/docs/about.md +++ b/docs/about.md @@ -18,4 +18,4 @@ The source code and further documentation for this project and using GET and POS Note: The latest and future versions of this project are built and tested using Java 8. -

Release Notes & Downloads

\ No newline at end of file +

Release Notes & Source Code

\ No newline at end of file diff --git a/docs/guides/introduction.md b/docs/guides/introduction.md index 9afa5dd2..5e64357e 100644 --- a/docs/guides/introduction.md +++ b/docs/guides/introduction.md @@ -1,4 +1,4 @@ -## Introduction +## What is FITS? The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is compatible with Java 1.8 or higher. The external tools currently used are: @@ -11,4 +11,10 @@ The File Information Tool Set (FITS) identifies, validates and extracts technica - [FFIdent](http://schmidt.devlib.org/ffident/index.html) - [File Utility (windows)](http://gnuwin32.sourceforge.net/) +--- + +## Why use FITS? + +EVERYBODY. + --- \ No newline at end of file diff --git a/docs/guides/overview-of-fits-processing.md b/docs/guides/overview-of-fits-processing.md index 81aa7875..2925e5c4 100644 --- a/docs/guides/overview-of-fits-processing.md +++ b/docs/guides/overview-of-fits-processing.md @@ -1,4 +1,4 @@ -## Overview of FITS processing +## How FITS processes FITS works in different stages as shown in the image below. diff --git a/docs/guides/references/fits-xml.md b/docs/guides/references/fits-xml.md index 70afa741..893c3cf9 100644 --- a/docs/guides/references/fits-xml.md +++ b/docs/guides/references/fits-xml.md @@ -1,11 +1,13 @@ -### FITS XML +### FITS XML schema -FITS converts the native output of each wrapped tool to a format called FITS XML which is described here. The XML schema for FITS XML is maintained by Harvard Library and located at [http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd](http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd). +FITS converts the raw output of each wrapped tool to a structure called FITS XML. [FITS XML schema](http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd) is maintained by Harvard Library. #### identification This section contains the file format in one or more identity blocks. If all the tools that processed the file and could identify it came up with the same format, there will only be one identity block. If there were tools that processed the file that came up with an alternative format, there will be multiple identity blocks. The tools that identified the format will be nested within the identity elements. Some examples follow. -##### **EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION** + +
+**EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION** In this example, two tools (Jhove 1.5 and file utility 5.04) identified the format as Plain text with a MIME media type of text/plain. @@ -18,7 +20,10 @@ In this example, two tools (Jhove 1.5 and file utility 5.04) identified the form ``` -##### **EXAMPLE: FORMAT CONFLICT** + +
+**EXAMPLE: FORMAT CONFLICT** + In this example, there is a "format conflict". The tool Exiftool 9.13 identified the format as PCD with MIME media type image/x-photo-cd, but the tool Tika 1.3 identified the format as MPEG-1 Audio Layer 3. Notice in this case that the identification element will carry an attribute status value of CONFLICT. ```` @@ -720,7 +725,7 @@ When the fits.xml file is configured to also output the native tool output, this ``` -#### Additional things to understand about the FITS XML schema +#### Additional things to understand about the FITS XML schema **(this should be reworded, maybe move above the schema part)** ##### **STATUS ATTRIBUTE** If multiple tools disagree on a format identity or other metadata values, a status attribute is added to the element with a value of ```CONFLICT```. If only a single tool reports a format identity or other metadata value, a status attribute is added to the element with a value of ```SINGLE_RESULT```. If multiple tools agree on a an identity or value, and none disagree, the status attribute is omitted. A ```PARTIAL``` value is written when the format can only be partially identified, for example a format name is identified but not a MIME media type. diff --git a/docs/guides/references/standard-metadata-schemas.md b/docs/guides/references/standard-metadata-schemas.md index 049846e4..2456ef09 100644 --- a/docs/guides/references/standard-metadata-schemas.md +++ b/docs/guides/references/standard-metadata-schemas.md @@ -10,7 +10,7 @@ When FITS is told to output standard XML metadata (e.g. by use of the -x or -xc | Website | [http://www.aes.org/publications/standards/search.cfm?docID=84](http://www.aes.org/publications/standards/search.cfm?docID=84) [http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object](http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object) | -#### Documents +#### Documents **(has this been deprecated?)** | --------- | ----------- | | Short name | DocumentMD | diff --git a/docs/guides/references/tools.md b/docs/guides/references/tools.md index d21df518..a2df590f 100644 --- a/docs/guides/references/tools.md +++ b/docs/guides/references/tools.md @@ -1,38 +1,7 @@ -### Tools +### Tools & Libraries -#### Included tools -The latest version of FITS is configured to use these tools for identifying, validating, and extracting technical metadata: +The latest version of FITS is configured to use these open source projects. Licenses for all projects are available in our [GitHub repo](https://github.com/harvard-lts/fits/tree/dev/Licenses). -
-ADL Tool - -
-
Maintenance organization
-
Harvard Library
-
Formats supported
-
Audio Decision List files
-
-
- -
-Apache Tiki - -
-
Capabilities
-
Identifies file formats
-
Maintenance organization
-
Apache
-
Formats supported
-
see supported document formats
-
-
- -#### Potential tools - -Capabilities -Maintenance organization -Details -Formats supported -URL +Tables for each tool to be added. --- \ No newline at end of file diff --git a/docs/guides/understanding-the-output.md b/docs/guides/understanding-the-output.md index 3e423851..e43a19d7 100644 --- a/docs/guides/understanding-the-output.md +++ b/docs/guides/understanding-the-output.md @@ -1,4 +1,4 @@ -## Understanding the output +## How to read a FITS output ### Output format The output format of FITS is controlled by the options used when executing FITS, how FITS is configured and the genre of the format. @@ -8,16 +8,16 @@ The format of the output will include one or more of the following: #### FITS XML - This is the default output described in detail [here](https://projects.iq.harvard.edu/fits/fits-xml) -#### "Standard" Metadata +#### Standardized Metadata - This is format genre-specific technical metadata in community-standard XML schemas - When using the command-line, use the -x parameter (to just get the output in standard metadata), or -xc (to get FITS XML in addition to standard metadata) - The specific XML schema used is determined by the format genre - for more information see the [standard metadata schemas](https://projects.iq.harvard.edu/fits/standard-metadata-schemas) -#### Native tool output +#### Raw output - This is the pre-normalized output of each tool run against the file - This is specified by the display-tool-output configuration property in the [fits.xml configuration file](https://projects.iq.harvard.edu/fits/fits-configuration-files#fits_xml_config) -### Output writing method (change this wording) +### Output destination #### Terminal - This is the default unless an output file is specified diff --git a/docs/index.html b/docs/index.html index 97e238e7..b280126f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -9,9 +9,9 @@

{{ site.title }}

Documentation and official code release of the FITS and FITS Web Service projects

diff --git a/docs/blog.md b/docs/news.md similarity index 95% rename from docs/blog.md rename to docs/news.md index 8b83992f..03fb33f3 100644 --- a/docs/blog.md +++ b/docs/news.md @@ -1,8 +1,8 @@ --- layout: page -title: Blog +title: News subtitle: News, presentations, and blog posts go here -permalink: /blog +permalink: /news ---
    diff --git a/docs/projects.md b/docs/projects.md deleted file mode 100644 index 539275b5..00000000 --- a/docs/projects.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: page -title: Projects -subtitle: brief description of page -permalink: /projects ---- - -

    FITS

    -

    Release Notes & Downloads

    -The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. - -

    FITS Web Service

    -

    Release Notes & Downloads

    -The FITS Web Service is a project that allows FITS to be deployed as a service on either Tomcat or JBoss. The code has been built and test using Java 7 and Java 8 and tested on Tomcat 7, Tomcat 8, and minimally on JBoss 7.1. The path to the service will be the WAR file name plus the service name. E.g. - For release 1.1.1 which provides the release artifact fits-1.1.1.war -- http://localhost:8080/fits-1.1.1/examine/ as the base URL. This can be adjusted by either changing the WAR filename or using server-specific settings. - -The source code and further documentation for this project and using GET and POST requests to process input files with this URL is available on GitHub here:FITSservlet - -Note: The latest and future versions of this project are built and tested using Java 8. - -

    Islandora(?)

    - -

    Pronom(?)

    diff --git a/docs/quick-start.md b/docs/quick-start.md index a93e9dbc..b21cea7c 100644 --- a/docs/quick-start.md +++ b/docs/quick-start.md @@ -18,7 +18,7 @@ FITS is a Java program and requires Java version 1.8 or higher. To find out your ## 2. Installation -Download the latest [release](https://github.com/harvard-lts/fits/releases). If this is your first time downloading FITS, create a directory for FITS: +Download the [latest release](https://github.com/harvard-lts/fits/releases). If this is your first time downloading FITS, create a directory for FITS: - On Windows: C:\Program Files\Fits - On Mac OS X: /Applications/Fits From d73f718ee983c37b7e79244a910060acaed2607c Mon Sep 17 00:00:00 2001 From: mferrarini Date: Thu, 17 Mar 2022 17:06:08 -0400 Subject: [PATCH 06/36] updated location of css file --- docs/_includes/head.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_includes/head.html b/docs/_includes/head.html index 9dde3580..52685e2e 100644 --- a/docs/_includes/head.html +++ b/docs/_includes/head.html @@ -4,7 +4,7 @@ {%- seo -%} - + {%- feed_meta -%} {%- if jekyll.environment == 'production' and site.google_analytics -%} {%- include google-analytics.html -%} From cba257245ba76d7df74fdbb3104572b801c2e45f Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 12:33:25 -0400 Subject: [PATCH 07/36] moving references into 'guides' folder --- docs/_includes/footer.html | 4 +-- docs/_includes/tool.html | 12 ++++++++ docs/_tools/adl-tool.md | 12 ++++++++ docs/_tools/apache-tika.md | 12 ++++++++ docs/about.md | 4 +-- docs/guides.md | 10 ++++++- .../{references => }/command-line-options.md | 0 .../fits-configuration-files.md | 0 docs/guides/{references => }/fits-xml.md | 0 docs/guides/references/tools.md | 7 ----- .../standard-metadata-schemas.md | 0 docs/guides/tools.md | 30 +++++++++++++++++++ docs/index.html | 4 +-- 13 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 docs/_includes/tool.html create mode 100644 docs/_tools/adl-tool.md create mode 100644 docs/_tools/apache-tika.md rename docs/guides/{references => }/command-line-options.md (100%) rename docs/guides/{references => }/fits-configuration-files.md (100%) rename docs/guides/{references => }/fits-xml.md (100%) delete mode 100644 docs/guides/references/tools.md rename docs/guides/{references => }/standard-metadata-schemas.md (100%) create mode 100644 docs/guides/tools.md diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html index be18b57f..1cbb9398 100644 --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -19,7 +19,7 @@ {% if site.github_url_fits %}
  • - + {{ site.github_reponame_fits }}
  • @@ -27,7 +27,7 @@ {% if site.github_url_fits-servlet %}
  • - + {{ site.github_reponame_fits-servlet }}
  • diff --git a/docs/_includes/tool.html b/docs/_includes/tool.html new file mode 100644 index 00000000..ba85bedc --- /dev/null +++ b/docs/_includes/tool.html @@ -0,0 +1,12 @@ +Test! + +{% for post in site.categories.tools %} +

    {{ post.title }}

    + | --------- | ----------- | + | Maintenance organization | AES Audio Object | + | Capabilities | AES Audio Object | + | Details | AES Audio Object | + | Formats supported | AES Audio Object | + | More information | AES Audio Object | + {% if page.description %}| Formats supported | AES standard for audio metadata – Audio object structures for preservation and restoration |{% endif %} +{% endfor %} \ No newline at end of file diff --git a/docs/_tools/adl-tool.md b/docs/_tools/adl-tool.md new file mode 100644 index 00000000..2cca1343 --- /dev/null +++ b/docs/_tools/adl-tool.md @@ -0,0 +1,12 @@ +--- +layout: post +title: ADL Tool +categories: tools +maintenance-organization: Harvard Library +# capabilities: capabilities +# details: details +formats: Audio Decision List files +# url: more information link +--- + +Texty text \ No newline at end of file diff --git a/docs/_tools/apache-tika.md b/docs/_tools/apache-tika.md new file mode 100644 index 00000000..df75725b --- /dev/null +++ b/docs/_tools/apache-tika.md @@ -0,0 +1,12 @@ +--- +layout: post +title: Apache Tika +categories: tools +maintenance-organization: Apache +capabilities: Identifies file formats +# details: details +formats: See [https://tika.apache.org/1.19/formats.html](https://tika.apache.org/1.19/formats.html) +url: http://tika.apache.org/ +--- + +Texty text \ No newline at end of file diff --git a/docs/about.md b/docs/about.md index 4c7ecb30..b8830734 100644 --- a/docs/about.md +++ b/docs/about.md @@ -8,7 +8,7 @@ permalink: /about The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. -

    Release Notes & Downloads

    +

    Release Notes & Downloads

    FITS Web Service

    @@ -18,4 +18,4 @@ The source code and further documentation for this project and using GET and POS Note: The latest and future versions of this project are built and tested using Java 8. -

    Release Notes & Source Code

    \ No newline at end of file +

    Release Notes & Source Code

    \ No newline at end of file diff --git a/docs/guides.md b/docs/guides.md index d1f4e0f3..541b0ccd 100644 --- a/docs/guides.md +++ b/docs/guides.md @@ -13,5 +13,13 @@ permalink: /user-manual {% include_relative guides/introduction.md %} {% include_relative guides/overview-of-fits-processing.md %} {% include_relative guides/understanding-the-output.md %} -{% include_relative guides/references.md %} + +## References + +{% include_relative guides/command-line-options.md %} +{% include_relative guides/fits-xml.md %} +{% include_relative guides/standard-metadata-schemas.md %} +{% include_relative guides/fits-configuration-files.md %} +{% include_relative guides/tools.md %} +
diff --git a/docs/guides/references/command-line-options.md b/docs/guides/command-line-options.md similarity index 100% rename from docs/guides/references/command-line-options.md rename to docs/guides/command-line-options.md diff --git a/docs/guides/references/fits-configuration-files.md b/docs/guides/fits-configuration-files.md similarity index 100% rename from docs/guides/references/fits-configuration-files.md rename to docs/guides/fits-configuration-files.md diff --git a/docs/guides/references/fits-xml.md b/docs/guides/fits-xml.md similarity index 100% rename from docs/guides/references/fits-xml.md rename to docs/guides/fits-xml.md diff --git a/docs/guides/references/tools.md b/docs/guides/references/tools.md deleted file mode 100644 index a2df590f..00000000 --- a/docs/guides/references/tools.md +++ /dev/null @@ -1,7 +0,0 @@ -### Tools & Libraries - -The latest version of FITS is configured to use these open source projects. Licenses for all projects are available in our [GitHub repo](https://github.com/harvard-lts/fits/tree/dev/Licenses). - -Tables for each tool to be added. - ---- \ No newline at end of file diff --git a/docs/guides/references/standard-metadata-schemas.md b/docs/guides/standard-metadata-schemas.md similarity index 100% rename from docs/guides/references/standard-metadata-schemas.md rename to docs/guides/standard-metadata-schemas.md diff --git a/docs/guides/tools.md b/docs/guides/tools.md new file mode 100644 index 00000000..8558862a --- /dev/null +++ b/docs/guides/tools.md @@ -0,0 +1,30 @@ +### Tools & Libraries + +The latest version of FITS is configured to a number of open source projects. + +[All project licenses are available in our GitHub repository](https://github.com/harvard-lts/fits/tree/dev/Licenses). + +#### ADL Tool + +| --------- | ----------- | +| Maintenance organization | AES Audio Object | +{% if page.title %}| Formats supported | AES standard for audio metadata – Audio object structures for preservation and restoration {{ page.title }} |{% endif %} + +**find a way to make a template that can we repeated** + +{% include tool.html %} + +--- + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index b280126f..8317ab35 100644 --- a/docs/index.html +++ b/docs/index.html @@ -9,8 +9,8 @@

{{ site.title }}

Documentation and official code release of the FITS and FITS Web Service projects

From 2663e7c1db2cfdd7e0dcfcb25bb176a9560281b2 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 12:35:12 -0400 Subject: [PATCH 08/36] references section of user manual --- docs/guides.md | 9 +-------- docs/guides/references.md | 10 +++++----- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/docs/guides.md b/docs/guides.md index 541b0ccd..df757305 100644 --- a/docs/guides.md +++ b/docs/guides.md @@ -13,13 +13,6 @@ permalink: /user-manual {% include_relative guides/introduction.md %} {% include_relative guides/overview-of-fits-processing.md %} {% include_relative guides/understanding-the-output.md %} - -## References - -{% include_relative guides/command-line-options.md %} -{% include_relative guides/fits-xml.md %} -{% include_relative guides/standard-metadata-schemas.md %} -{% include_relative guides/fits-configuration-files.md %} -{% include_relative guides/tools.md %} +{% include_relative guides/references.md %} diff --git a/docs/guides/references.md b/docs/guides/references.md index 54087e2e..c0dc50f5 100644 --- a/docs/guides/references.md +++ b/docs/guides/references.md @@ -1,7 +1,7 @@ ## References -{% include_relative guides/references/command-line-options.md %} -{% include_relative guides/references/fits-xml.md %} -{% include_relative guides/references/standard-metadata-schemas.md %} -{% include_relative guides/references/fits-configuration-files.md %} -{% include_relative guides/references/tools.md %} \ No newline at end of file +{% include_relative guides/command-line-options.md %} +{% include_relative guides/fits-xml.md %} +{% include_relative guides/standard-metadata-schemas.md %} +{% include_relative guides/fits-configuration-files.md %} +{% include_relative guides/tools.md %} \ No newline at end of file From d87b670f39a346151ad42b633d97fdeea65eb7d6 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 12:37:45 -0400 Subject: [PATCH 09/36] Update guides.md --- docs/guides.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/guides.md b/docs/guides.md index df757305..541b0ccd 100644 --- a/docs/guides.md +++ b/docs/guides.md @@ -13,6 +13,13 @@ permalink: /user-manual {% include_relative guides/introduction.md %} {% include_relative guides/overview-of-fits-processing.md %} {% include_relative guides/understanding-the-output.md %} -{% include_relative guides/references.md %} + +## References + +{% include_relative guides/command-line-options.md %} +{% include_relative guides/fits-xml.md %} +{% include_relative guides/standard-metadata-schemas.md %} +{% include_relative guides/fits-configuration-files.md %} +{% include_relative guides/tools.md %} From 318addf7c4afde0a8bdce7f91a18b04a72bd43a4 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 12:43:15 -0400 Subject: [PATCH 10/36] Delete references.md --- docs/guides/references.md | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 docs/guides/references.md diff --git a/docs/guides/references.md b/docs/guides/references.md deleted file mode 100644 index c0dc50f5..00000000 --- a/docs/guides/references.md +++ /dev/null @@ -1,7 +0,0 @@ -## References - -{% include_relative guides/command-line-options.md %} -{% include_relative guides/fits-xml.md %} -{% include_relative guides/standard-metadata-schemas.md %} -{% include_relative guides/fits-configuration-files.md %} -{% include_relative guides/tools.md %} \ No newline at end of file From 2dea5295cb19ba724952923ed53f4b59f84aae13 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 12:50:10 -0400 Subject: [PATCH 11/36] hard-coded menu --- docs/_includes/header.html | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/_includes/header.html b/docs/_includes/header.html index 0ad105fc..f519692c 100644 --- a/docs/_includes/header.html +++ b/docs/_includes/header.html @@ -20,12 +20,11 @@
- {%- for path in page_paths -%} - {%- assign my_page = site.pages | where: "path", path | first -%} - {%- if my_page.title -%} - {{ my_page.title | escape }} - {%- endif -%} - {%- endfor -%} + About + News + Connect + User manual + Quick start
{%- endif -%} From 6a11bed15400f1b54dd027a3666bc0c16496fa26 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 16:03:45 -0400 Subject: [PATCH 12/36] tools added --- docs/_includes/header.html | 1 + docs/_includes/tool.html | 12 --------- docs/_includes/tool.md | 19 ++++++++++++++ .../2022-03-20-adl-tool.md} | 12 ++++----- .../2022-03-20-apache-tika.md} | 8 +++--- docs/_posts/2022-03-20-droid.md | 12 +++++++++ docs/_posts/2022-03-20-embARC.md | 12 +++++++++ docs/_posts/2022-03-20-exifTool.md | 12 +++++++++ docs/_posts/2022-03-20-ffident.md | 12 +++++++++ docs/_posts/2022-03-20-file-utility.md | 12 +++++++++ docs/_posts/2022-03-20-jhove.md | 12 +++++++++ docs/_posts/2022-03-20-mediaInfo.md | 12 +++++++++ docs/_posts/2022-03-20-metadata-extractor.md | 12 +++++++++ docs/_posts/2022-03-20-ois-audio.md | 12 +++++++++ docs/_posts/2022-03-20-ois-file.md | 12 +++++++++ docs/_posts/2022-03-20-ois-xml.md | 12 +++++++++ docs/_posts/2022-03-20-vtt.md | 12 +++++++++ docs/css/main.css | 10 ++++++++ docs/guides/fits-xml.md | 19 +++++++++----- docs/guides/tools.md | 25 ++----------------- docs/guides/understanding-the-output.md | 5 ++++ 21 files changed, 205 insertions(+), 50 deletions(-) delete mode 100644 docs/_includes/tool.html create mode 100644 docs/_includes/tool.md rename docs/{_tools/adl-tool.md => _posts/2022-03-20-adl-tool.md} (61%) rename docs/{_tools/apache-tika.md => _posts/2022-03-20-apache-tika.md} (70%) create mode 100644 docs/_posts/2022-03-20-droid.md create mode 100644 docs/_posts/2022-03-20-embARC.md create mode 100644 docs/_posts/2022-03-20-exifTool.md create mode 100644 docs/_posts/2022-03-20-ffident.md create mode 100644 docs/_posts/2022-03-20-file-utility.md create mode 100644 docs/_posts/2022-03-20-jhove.md create mode 100644 docs/_posts/2022-03-20-mediaInfo.md create mode 100644 docs/_posts/2022-03-20-metadata-extractor.md create mode 100644 docs/_posts/2022-03-20-ois-audio.md create mode 100644 docs/_posts/2022-03-20-ois-file.md create mode 100644 docs/_posts/2022-03-20-ois-xml.md create mode 100644 docs/_posts/2022-03-20-vtt.md diff --git a/docs/_includes/header.html b/docs/_includes/header.html index f519692c..7d0de163 100644 --- a/docs/_includes/header.html +++ b/docs/_includes/header.html @@ -23,6 +23,7 @@ About News Connect + Developer manual User manual Quick start diff --git a/docs/_includes/tool.html b/docs/_includes/tool.html deleted file mode 100644 index ba85bedc..00000000 --- a/docs/_includes/tool.html +++ /dev/null @@ -1,12 +0,0 @@ -Test! - -{% for post in site.categories.tools %} -

{{ post.title }}

- | --------- | ----------- | - | Maintenance organization | AES Audio Object | - | Capabilities | AES Audio Object | - | Details | AES Audio Object | - | Formats supported | AES Audio Object | - | More information | AES Audio Object | - {% if page.description %}| Formats supported | AES standard for audio metadata – Audio object structures for preservation and restoration |{% endif %} -{% endfor %} \ No newline at end of file diff --git a/docs/_includes/tool.md b/docs/_includes/tool.md new file mode 100644 index 00000000..6072632b --- /dev/null +++ b/docs/_includes/tool.md @@ -0,0 +1,19 @@ +{% assign sorted_posts = site.categories.tools | sort_natural: 'title' %} + +{% for post in sorted_posts %} + +
+ +#### {{ post.title }} + +| --------- | ----------- | +| Maintenance organization | {% if post.maintenance-organization %} {{ post.maintenance-organization }} {% endif %} | +| Capabilities | {% if post.capabilities %} {{ post.capabilities }} {% endif %} | +| Formats supported | {% if post.formats %} {{ post.formats }} {% endif %} | +| Details | {% if post.details %} {{ post.details }} {% endif %} | +| More information | {% if post.more-info-url %} {% if post.more-info %}{{post.more-info}}

{% endif %}{{ post.more-info-url }}{% else if post.more-info %} {{ post.more-info }} {% endif %}| + + +
+ +{% endfor %} \ No newline at end of file diff --git a/docs/_tools/adl-tool.md b/docs/_posts/2022-03-20-adl-tool.md similarity index 61% rename from docs/_tools/adl-tool.md rename to docs/_posts/2022-03-20-adl-tool.md index 2cca1343..1c0f5eba 100644 --- a/docs/_tools/adl-tool.md +++ b/docs/_posts/2022-03-20-adl-tool.md @@ -1,12 +1,12 @@ --- layout: post -title: ADL Tool categories: tools +title: ADL Tool +# tool-url: tool website maintenance-organization: Harvard Library # capabilities: capabilities -# details: details formats: Audio Decision List files -# url: more information link ---- - -Texty text \ No newline at end of file +# details: details +# more-info: more information to described +# more-info-url: more information link +--- \ No newline at end of file diff --git a/docs/_tools/apache-tika.md b/docs/_posts/2022-03-20-apache-tika.md similarity index 70% rename from docs/_tools/apache-tika.md rename to docs/_posts/2022-03-20-apache-tika.md index df75725b..4ac6a2e4 100644 --- a/docs/_tools/apache-tika.md +++ b/docs/_posts/2022-03-20-apache-tika.md @@ -1,12 +1,14 @@ --- layout: post -title: Apache Tika categories: tools +title: Apache Tika +# tool-url: tools website maintenance-organization: Apache capabilities: Identifies file formats -# details: details formats: See [https://tika.apache.org/1.19/formats.html](https://tika.apache.org/1.19/formats.html) -url: http://tika.apache.org/ +# details: details +# more-info: more information to described +more-info-url: http://tika.apache.org/ --- Texty text \ No newline at end of file diff --git a/docs/_posts/2022-03-20-droid.md b/docs/_posts/2022-03-20-droid.md new file mode 100644 index 00000000..7011b02e --- /dev/null +++ b/docs/_posts/2022-03-20-droid.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: DROID +tool-url: https://www.nationalarchives.gov.uk/information-management/manage-information/policy-process/digital-continuity/file-profiling-tool-droid/ +maintenance-organization: UK National Archives +# capabilities: capabilities +formats: many (> 1,000) - Listed in the DROID signature file +details: DROID is written in Java. The FITS tool wrapper uses the provided API. The output is converted into a simple XML document and then converted to FITS XML using xml/droid/droid_to_fits.xslt. The DROID configuration file and signature file are located in the tools/droid directory. +# more-info: more information to described +more-info-url: https://www.nationalarchives.gov.uk/information-management/manage-information/policy-process/digital-continuity/file-profiling-tool-droid/ +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-embARC.md b/docs/_posts/2022-03-20-embARC.md new file mode 100644 index 00000000..0bc4b8a2 --- /dev/null +++ b/docs/_posts/2022-03-20-embARC.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: embARC +tool-url: https://www.digitizationguidelines.gov/guidelines/embARC.html +maintenance-organization: Library of Congress +capabilities: Identify and extract complete metadata from SMPTE DPX image files. +formats: dpx +details: embARC is written in Java. The FITS tool wrapper uses the provided API. Raw tool output is provided in XML format.

Note - Although the standalone embARC application processes DPX sequences natively, this integration with FITS only supports the processing of DPX files individually and not as a sequence. +more-info: Although the standalone embARC application processes DPX sequences natively, this integration with FITS only supports the processing of DPX files individually and not as a sequence. +more-info-url: https://www.digitizationguidelines.gov/guidelines/embARC.html +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-exifTool.md b/docs/_posts/2022-03-20-exifTool.md new file mode 100644 index 00000000..9569fac1 --- /dev/null +++ b/docs/_posts/2022-03-20-exifTool.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: ExifTool +tool-url: https://exiftool.org/ +maintenance-organization: Phil Harvey +capabilities: Identifies and extracts technical metadata. +formats: jpg,tiff,jp2,gif,bmp,png,psd,dng,wav,mp3,mp4,m4a,aiff,rm,ogg,flac,xml,html,pdf,doc +details: Exiftool is written in Perl. A windows executable is also provided. The Exiftool tool wrapper detects the operating system type and calls the appropriate version of the tool. The tab-delimited output is captured, converted to a simple XML structure, and then converted to FITS XML using xslt. xml/exiftool/exiftool_xslt_map.xml is used to determine which XSLT to apply for the given identified format. +# more-info: more information to described +more-info-url: https://exiftool.org/ +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ffident.md b/docs/_posts/2022-03-20-ffident.md new file mode 100644 index 00000000..7fc40138 --- /dev/null +++ b/docs/_posts/2022-03-20-ffident.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: ffident +# tool-url: tool website +maintenance-organization: no longer maintained +capabilities: Identifies file formats. +formats: Listed in the configuration file tools/ffident/formats.txt +details: FFIdent is written in Java. The FITS tool wrapper uses the provided API. Output is converted into a simple XML document and then converted to FITS XML using xml/ffident/ffident_to_fits.xslt. +more-info: archived site +# more-info-url: http://web.archive.org/web/20061106114156/http://schmidt.devlib.org/ffident/index.html +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-file-utility.md b/docs/_posts/2022-03-20-file-utility.md new file mode 100644 index 00000000..9bc786b0 --- /dev/null +++ b/docs/_posts/2022-03-20-file-utility.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: File utility (windows) +# tool-url: http://unixhelp.ed.ac.uk/CGI/man-cgi?file +# maintenance-organization: maintenance organization +capabilities: Identifies files. +formats: many (> 1,000) +details: File Utility is usually bundled with Linux, UNIX and OS X. The GnuWin32? port is provided for use on Windows. Due to variations in versions this may cause different output when run on different platforms. File Utility is called in its default mode (no arguments), and also with -i to determine the MIME type. The output is converted into a simple XML document and then converted to FITS XML using xml/fileutility/fileutility_to_fits.xslt +more-info: windows port - http://gnuwin32.sourceforge.net/ +# more-info-url: more information link +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-jhove.md b/docs/_posts/2022-03-20-jhove.md new file mode 100644 index 00000000..5eccd04b --- /dev/null +++ b/docs/_posts/2022-03-20-jhove.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: Jhove +# tool-url: https://github.com/openpreserve/jhove +maintenance-organization: Open Preservation Foundation +capabilities: Identifies, extracts technical metadata, and validates files. +formats: jpg,tiff,jp2,gif,wave,aiff,xml,html,ascii,utf-8,pdf. +details: JHOVE is written in Java. The FITS tool wrapper uses the provided API. The JHOVE XML output is converted to FITS XML using XSLT. xml/jhove/jhove_xslt_map.xml is used to determine which XSLT to apply for the given identified format. +more-info: For JP2 files the JHOVE output element Transformation indicates whether the compression is lossy or lossless. The transformation values are described in Table A-20 of the JPEG2000 part 1 specification. A value of 0 maps to the 9-7 irreversible (lossy) filter. A value of 1 maps to 5-3 reversible (lossless) filter. This JHOVE element is used by FITS when it outputs the compressionScheme in the image metadata, writing it as JPEG 2000 Lossy or JPEG 2000 Lossless.

JHOVE does not validate the codestream but it checks the file structure. +more-info-url: https://github.com/openpreserve/jhove +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-mediaInfo.md b/docs/_posts/2022-03-20-mediaInfo.md new file mode 100644 index 00000000..8853a2f5 --- /dev/null +++ b/docs/_posts/2022-03-20-mediaInfo.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: MediaInfo +# tool-url: https://mediaarea.net/en/MediaInfo +maintenance-organization: MediaArea.net +capabilities: Identifies and extracts technical metadata for video files. +formats: Although MediaInfo supports many video formats, FITS will only support the following video formats and wrappers out of the box - avi, mov, mpg, mpeg, mkv, mp4, mxf, ogv, mj2, divx, dv, m4v, m2v, ism. +details: The MediaInfo API is written in C++ and is called via Java by using the JNA library. +# more-info: more information +more-info-url: https://mediaarea.net/en/MediaInfo +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-metadata-extractor.md b/docs/_posts/2022-03-20-metadata-extractor.md new file mode 100644 index 00000000..ac0ba0c1 --- /dev/null +++ b/docs/_posts/2022-03-20-metadata-extractor.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: Metadata Extractor Tool +# tool-url: https://github.com/DIA-NZ/Metadata-Extraction-Tool +maintenance-organization: National Library of New Zealand +capabilities: Identifies and extracts technical metadata. +formats: jpg, tiff, gif, bmp, wav, mp3, xml, html, pdf, doc, wordperfect, msworks, odt +details: The FITS NLNZ tool wrapper uses the provided Java API. The NLNZ native XML output is converted to FITS XML using XSLT. xml/nlnz/fits/nlnz_xslt_map.xml is used to determine which XSLT to apply to the given identified format. +# more-info: more information +more-info-url: https://github.com/DIA-NZ/Metadata-Extraction-Tool +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-audio.md b/docs/_posts/2022-03-20-ois-audio.md new file mode 100644 index 00000000..fb365f39 --- /dev/null +++ b/docs/_posts/2022-03-20-ois-audio.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: OIS Audio Information +# tool-url: more information at website +maintenance-organization: Harvard Library +# capabilities: capabilities +formats: audio +# details: details +# more-info: more information +# more-info-url: more information at website +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-file.md b/docs/_posts/2022-03-20-ois-file.md new file mode 100644 index 00000000..b3bdfa61 --- /dev/null +++ b/docs/_posts/2022-03-20-ois-file.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: OIS File Information +# tool-url: more information at website +maintenance-organization: Harvard Library +capabilities: Extracts technical metadata. +formats: any +details: FileInfo creates FITS XML without further normalization. It determines basic file information like file name, size, file system last modified date, and md5 checksums. It uses the fast md5 jar from http://www.twmacinta.com/myjava/fast_md5.php. +# more-info: more information +# more-info-url: more information at website +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-xml.md b/docs/_posts/2022-03-20-ois-xml.md new file mode 100644 index 00000000..21d5dfc2 --- /dev/null +++ b/docs/_posts/2022-03-20-ois-xml.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: OIS XML Information +# tool-url: more information at website +maintenance-organization: Harvard Library +capabilities: Identifies and extracts technical metadata. +formats: XML +details: XmlMetadata creates FITS XML without further normalization. Its sole purpose is to identify XML and parse out the default namespace and schema location. This is used for FITS text metadata. +# more-info: more information +# more-info-url: more information at website +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-vtt.md b/docs/_posts/2022-03-20-vtt.md new file mode 100644 index 00000000..fa79c551 --- /dev/null +++ b/docs/_posts/2022-03-20-vtt.md @@ -0,0 +1,12 @@ +--- +layout: post +categories: tools +title: VTT Tool +# tool-url: more information at website +maintenance-organization: Harvard Library +capabilities: Identifies and extracts technical metadata. +formats: video +details: VTT Tool creates FITS XML without further normalization. This is used for FITS text metadata. +# more-info: more information +# more-info-url: more information at website +--- \ No newline at end of file diff --git a/docs/css/main.css b/docs/css/main.css index cf85cdab..b6f8c304 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -62,4 +62,14 @@ hr { flex: 0 0 calc(75% - 40px); max-width: calc(75% - 40px); } +} + + +/* Table of Contents styles */ +#markdown-toc { + list-style: none; + margin-left: 0; +} +#markdown-toc > li { + margin: 15px 0; } \ No newline at end of file diff --git a/docs/guides/fits-xml.md b/docs/guides/fits-xml.md index 893c3cf9..dbf9c6b7 100644 --- a/docs/guides/fits-xml.md +++ b/docs/guides/fits-xml.md @@ -5,9 +5,10 @@ FITS converts the raw output of each wrapped tool to a structure called FITS XML #### identification This section contains the file format in one or more identity blocks. If all the tools that processed the file and could identify it came up with the same format, there will only be one identity block. If there were tools that processed the file that came up with an alternative format, there will be multiple identity blocks. The tools that identified the format will be nested within the identity elements. Some examples follow. - -
-**EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION** +##### **EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION** +{:.no_toc} + + In this example, two tools (Jhove 1.5 and file utility 5.04) identified the format as Plain text with a MIME media type of text/plain. @@ -20,9 +21,10 @@ In this example, two tools (Jhove 1.5 and file utility 5.04) identified the form ``` - -
-**EXAMPLE: FORMAT CONFLICT** +##### **EXAMPLE: FORMAT CONFLICT** +{:.no_toc} + + In this example, there is a "format conflict". The tool Exiftool 9.13 identified the format as PCD with MIME media type image/x-photo-cd, but the tool Tika 1.3 identified the format as MPEG-1 Audio Layer 3. Notice in this case that the identification element will carry an attribute status value of CONFLICT. @@ -726,18 +728,23 @@ When the fits.xml file is configured to also output the native tool output, this ``` #### Additional things to understand about the FITS XML schema **(this should be reworded, maybe move above the schema part)** + ##### **STATUS ATTRIBUTE** +{:.no_toc} If multiple tools disagree on a format identity or other metadata values, a status attribute is added to the element with a value of ```CONFLICT```. If only a single tool reports a format identity or other metadata value, a status attribute is added to the element with a value of ```SINGLE_RESULT```. If multiple tools agree on a an identity or value, and none disagree, the status attribute is omitted. A ```PARTIAL``` value is written when the format can only be partially identified, for example a format name is identified but not a MIME media type. ##### **TOOL ORDERING PREFERENCE** +{:.no_toc} The ordering preference of the tools in xml/fits.xml determines the ordering of conflicting values. If the report-conflict configuration option is set to false then only the tool that first reported the element is displayed and the other conflicting values are discarded. ##### **RELATIONSHIP BETWEEN FORMAT IDENTIFICATION AND TECHINICAL METADATA** +{:.no_toc} All tools that agree on a format identity are consolidated into a single `````` section. **Technical metadata is only output (and a part of the consolidation process) for tools that were able to identify the file and that are listed in the first `````` section. All other output is discarded**. ##### **TOOL OUTPUT NORMALIZATION** +{:.no_toc} It’s possible for tools to output conflicting data when they actually mean the same thing. For example, one tool could report the format of a PNG image as “Portable Network Graphics”, while another may report “PNG”. A tool could report a sampling frequency unit of “2”, while another may report the text string “inches”. If left alone, these would cause false positive conflicts to appear in the FITS consolidated output. These differences are converted in the XSLT that converts the native tool output into FITS XML. In general, FITS prefers text strings to numeric values (“inches” instead of “2”), and complete format names to abbreviations (“Portable Network Graphics” instead of “PNG”). If new tools or formats are being added to FITS then thorough testing should be done to ensure that any false positive conflicts are resolved. --- \ No newline at end of file diff --git a/docs/guides/tools.md b/docs/guides/tools.md index 8558862a..24d5cc17 100644 --- a/docs/guides/tools.md +++ b/docs/guides/tools.md @@ -4,27 +4,6 @@ The latest version of FITS is configured to a number of open source projects. [All project licenses are available in our GitHub repository](https://github.com/harvard-lts/fits/tree/dev/Licenses). -#### ADL Tool +{% include tool.md %} -| --------- | ----------- | -| Maintenance organization | AES Audio Object | -{% if page.title %}| Formats supported | AES standard for audio metadata – Audio object structures for preservation and restoration {{ page.title }} |{% endif %} - -**find a way to make a template that can we repeated** - -{% include tool.html %} - ---- - - \ No newline at end of file +--- \ No newline at end of file diff --git a/docs/guides/understanding-the-output.md b/docs/guides/understanding-the-output.md index e43a19d7..aea7f32a 100644 --- a/docs/guides/understanding-the-output.md +++ b/docs/guides/understanding-the-output.md @@ -6,23 +6,28 @@ The output format of FITS is controlled by the options used when executing FITS, The format of the output will include one or more of the following: #### FITS XML +{:.no_toc} - This is the default output described in detail [here](https://projects.iq.harvard.edu/fits/fits-xml) #### Standardized Metadata +{:.no_toc} - This is format genre-specific technical metadata in community-standard XML schemas - When using the command-line, use the -x parameter (to just get the output in standard metadata), or -xc (to get FITS XML in addition to standard metadata) - The specific XML schema used is determined by the format genre - for more information see the [standard metadata schemas](https://projects.iq.harvard.edu/fits/standard-metadata-schemas) #### Raw output +{:.no_toc} - This is the pre-normalized output of each tool run against the file - This is specified by the display-tool-output configuration property in the [fits.xml configuration file](https://projects.iq.harvard.edu/fits/fits-configuration-files#fits_xml_config) ### Output destination #### Terminal +{:.no_toc} - This is the default unless an output file is specified #### File +{:.no_toc} - When using the command-line, use the -o parameter - When using the Java API, use the FitsOutput.saveToDisk method From e754648ece9f3ca7f5e498d194c09883d067d1aa Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 16:59:11 -0400 Subject: [PATCH 13/36] style updates --- docs/_posts/2022-03-20-jhove.md | 2 +- docs/css/main.css | 24 ++++++++++++++++++- docs/guides.md | 8 ++++++- docs/guides/fits-xml.md | 12 +++++----- .../{introduction.md => getting-started.md} | 12 ++++++---- docs/guides/overview-of-fits-processing.md | 2 +- docs/guides/tools.md | 4 +--- docs/guides/understanding-the-output.md | 18 +++++++------- 8 files changed, 56 insertions(+), 26 deletions(-) rename docs/guides/{introduction.md => getting-started.md} (77%) diff --git a/docs/_posts/2022-03-20-jhove.md b/docs/_posts/2022-03-20-jhove.md index 5eccd04b..6adc0962 100644 --- a/docs/_posts/2022-03-20-jhove.md +++ b/docs/_posts/2022-03-20-jhove.md @@ -5,7 +5,7 @@ title: Jhove # tool-url: https://github.com/openpreserve/jhove maintenance-organization: Open Preservation Foundation capabilities: Identifies, extracts technical metadata, and validates files. -formats: jpg,tiff,jp2,gif,wave,aiff,xml,html,ascii,utf-8,pdf. +formats: jpg, tiff, jp2, gif, wave, aiff, xml, html, ascii, utf-8, pdf details: JHOVE is written in Java. The FITS tool wrapper uses the provided API. The JHOVE XML output is converted to FITS XML using XSLT. xml/jhove/jhove_xslt_map.xml is used to determine which XSLT to apply for the given identified format. more-info: For JP2 files the JHOVE output element Transformation indicates whether the compression is lossy or lossless. The transformation values are described in Table A-20 of the JPEG2000 part 1 specification. A value of 0 maps to the 9-7 irreversible (lossy) filter. A value of 1 maps to 5-3 reversible (lossless) filter. This JHOVE element is used by FITS when it outputs the compressionScheme in the image metadata, writing it as JPEG 2000 Lossy or JPEG 2000 Lossless.

JHOVE does not validate the codestream but it checks the file structure. more-info-url: https://github.com/openpreserve/jhove diff --git a/docs/css/main.css b/docs/css/main.css index b6f8c304..112ece25 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -64,12 +64,34 @@ hr { } } +h1, h2, h3, h4, h5, h6 { + font-weight: 600; +} +h5 { + font-size: 16px; +} +.post-content h4, .post-content h5 { + margin-top: 30px; +} /* Table of Contents styles */ -#markdown-toc { +#markdown-toc, +#markdown-toc > li > ul { list-style: none; margin-left: 0; } #markdown-toc > li { margin: 15px 0; +} +#markdown-toc > li > a { + font-size: 18px; + font-weight: 600; + color: #111; +} +#markdown-toc > li > ul { + margin-left: 15px; +} + +#markdown-toc-references + ul > li { + padding: 5px 0; } \ No newline at end of file diff --git a/docs/guides.md b/docs/guides.md index 541b0ccd..17d0adde 100644 --- a/docs/guides.md +++ b/docs/guides.md @@ -10,7 +10,13 @@ permalink: /user-manual
-{% include_relative guides/introduction.md %} + +## Getting Started + +{% include_relative guides/getting-started.md %} + +## Using FITS + {% include_relative guides/overview-of-fits-processing.md %} {% include_relative guides/understanding-the-output.md %} diff --git a/docs/guides/fits-xml.md b/docs/guides/fits-xml.md index dbf9c6b7..b41adb5e 100644 --- a/docs/guides/fits-xml.md +++ b/docs/guides/fits-xml.md @@ -5,7 +5,7 @@ FITS converts the raw output of each wrapped tool to a structure called FITS XML #### identification This section contains the file format in one or more identity blocks. If all the tools that processed the file and could identify it came up with the same format, there will only be one identity block. If there were tools that processed the file that came up with an alternative format, there will be multiple identity blocks. The tools that identified the format will be nested within the identity elements. Some examples follow. -##### **EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION** +##### EXAMPLE: SUCCESSFUL FORMAT IDENTIFICATION {:.no_toc} @@ -21,7 +21,7 @@ In this example, two tools (Jhove 1.5 and file utility 5.04) identified the form ``` -##### **EXAMPLE: FORMAT CONFLICT** +##### EXAMPLE: FORMAT CONFLICT {:.no_toc} @@ -729,21 +729,21 @@ When the fits.xml file is configured to also output the native tool output, this #### Additional things to understand about the FITS XML schema **(this should be reworded, maybe move above the schema part)** -##### **STATUS ATTRIBUTE** +##### STATUS ATTRIBUTE {:.no_toc} If multiple tools disagree on a format identity or other metadata values, a status attribute is added to the element with a value of ```CONFLICT```. If only a single tool reports a format identity or other metadata value, a status attribute is added to the element with a value of ```SINGLE_RESULT```. If multiple tools agree on a an identity or value, and none disagree, the status attribute is omitted. A ```PARTIAL``` value is written when the format can only be partially identified, for example a format name is identified but not a MIME media type. -##### **TOOL ORDERING PREFERENCE** +##### TOOL ORDERING PREFERENCE {:.no_toc} The ordering preference of the tools in xml/fits.xml determines the ordering of conflicting values. If the report-conflict configuration option is set to false then only the tool that first reported the element is displayed and the other conflicting values are discarded. -##### **RELATIONSHIP BETWEEN FORMAT IDENTIFICATION AND TECHINICAL METADATA** +##### RELATIONSHIP BETWEEN FORMAT IDENTIFICATION AND TECHINICAL METADATA {:.no_toc} All tools that agree on a format identity are consolidated into a single `````` section. **Technical metadata is only output (and a part of the consolidation process) for tools that were able to identify the file and that are listed in the first `````` section. All other output is discarded**. -##### **TOOL OUTPUT NORMALIZATION** +##### TOOL OUTPUT NORMALIZATION {:.no_toc} It’s possible for tools to output conflicting data when they actually mean the same thing. For example, one tool could report the format of a PNG image as “Portable Network Graphics”, while another may report “PNG”. A tool could report a sampling frequency unit of “2”, while another may report the text string “inches”. If left alone, these would cause false positive conflicts to appear in the FITS consolidated output. These differences are converted in the XSLT that converts the native tool output into FITS XML. In general, FITS prefers text strings to numeric values (“inches” instead of “2”), and complete format names to abbreviations (“Portable Network Graphics” instead of “PNG”). If new tools or formats are being added to FITS then thorough testing should be done to ensure that any false positive conflicts are resolved. diff --git a/docs/guides/introduction.md b/docs/guides/getting-started.md similarity index 77% rename from docs/guides/introduction.md rename to docs/guides/getting-started.md index 5e64357e..f5399199 100644 --- a/docs/guides/introduction.md +++ b/docs/guides/getting-started.md @@ -1,8 +1,8 @@ -## What is FITS? +### What is FITS? The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is compatible with Java 1.8 or higher. The external tools currently used are: -- [Apache](http://tika.apache.org/) +- [Apache Tika](http://tika.apache.org/) - [Jhove](https://github.com/openpreserve/jhove) - [MediaInfo](https://mediaarea.net/en/MediaInfo) - [Exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/) @@ -11,10 +11,12 @@ The File Information Tool Set (FITS) identifies, validates and extracts technica - [FFIdent](http://schmidt.devlib.org/ffident/index.html) - [File Utility (windows)](http://gnuwin32.sourceforge.net/) ---- +### Why use FITS? -## Why use FITS? +EVERYBODY SHOULD JUST DO IT. -EVERYBODY. +### Installing FITS + +See our Quick Start guide to get started. Then, come back here to learn more about using FITS. --- \ No newline at end of file diff --git a/docs/guides/overview-of-fits-processing.md b/docs/guides/overview-of-fits-processing.md index 2925e5c4..0571bccc 100644 --- a/docs/guides/overview-of-fits-processing.md +++ b/docs/guides/overview-of-fits-processing.md @@ -1,4 +1,4 @@ -## How FITS processes +### How FITS processes FITS works in different stages as shown in the image below. diff --git a/docs/guides/tools.md b/docs/guides/tools.md index 24d5cc17..44d62367 100644 --- a/docs/guides/tools.md +++ b/docs/guides/tools.md @@ -1,8 +1,6 @@ ### Tools & Libraries -The latest version of FITS is configured to a number of open source projects. - -[All project licenses are available in our GitHub repository](https://github.com/harvard-lts/fits/tree/dev/Licenses). +The latest version of FITS is configured to a number of open source projects. [All project licenses are available in our GitHub repository](https://github.com/harvard-lts/fits/tree/dev/Licenses). {% include tool.md %} diff --git a/docs/guides/understanding-the-output.md b/docs/guides/understanding-the-output.md index aea7f32a..35400c97 100644 --- a/docs/guides/understanding-the-output.md +++ b/docs/guides/understanding-the-output.md @@ -1,32 +1,34 @@ -## How to read a FITS output +### Reading the output -### Output format +#### Output format +{:.no_toc} The output format of FITS is controlled by the options used when executing FITS, how FITS is configured and the genre of the format. The format of the output will include one or more of the following: -#### FITS XML +##### FITS XML {:.no_toc} - This is the default output described in detail [here](https://projects.iq.harvard.edu/fits/fits-xml) -#### Standardized Metadata +##### Standardized Metadata {:.no_toc} - This is format genre-specific technical metadata in community-standard XML schemas - When using the command-line, use the -x parameter (to just get the output in standard metadata), or -xc (to get FITS XML in addition to standard metadata) - The specific XML schema used is determined by the format genre - for more information see the [standard metadata schemas](https://projects.iq.harvard.edu/fits/standard-metadata-schemas) -#### Raw output +##### Raw output {:.no_toc} - This is the pre-normalized output of each tool run against the file - This is specified by the display-tool-output configuration property in the [fits.xml configuration file](https://projects.iq.harvard.edu/fits/fits-configuration-files#fits_xml_config) -### Output destination +#### Output destination +{:.no_toc} -#### Terminal +##### Terminal {:.no_toc} - This is the default unless an output file is specified -#### File +##### File {:.no_toc} - When using the command-line, use the -o parameter - When using the Java API, use the FitsOutput.saveToDisk method From 9b3cc0db1e5168547c42198a42ca06dd1d02d51a Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 17:40:45 -0400 Subject: [PATCH 14/36] homepage style updates --- docs/_config.yml | 4 ++-- docs/_includes/header.html | 2 +- docs/css/main.css | 39 ++++++++++++++++++++++++++++++++++++++ docs/index.html | 5 +++-- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index b8f1d9d3..f19c21de 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -18,8 +18,8 @@ # You can create any custom variable you would like, and they will be accessible # in the templates via {{ site.myvariable }}. -title: FITS -email: your-email@example.com +title: File Information Tool Set (FITS) +email: fits-users@googlegroups.com description: >- # this means to ignore newlines until "baseurl:" Documentation and official code release of the FITS and the FITS Web Service projects baseurl: "/fits" # the subpath of your site, e.g. /blog diff --git a/docs/_includes/header.html b/docs/_includes/header.html index 7d0de163..80b83851 100644 --- a/docs/_includes/header.html +++ b/docs/_includes/header.html @@ -4,7 +4,7 @@ {%- assign default_paths = site.pages | map: "path" -%} {%- assign page_paths = site.header_pages | default: default_paths -%} diff --git a/docs/css/main.css b/docs/css/main.css index 112ece25..b48e17a1 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -94,4 +94,43 @@ h5 { #markdown-toc-references + ul > li { padding: 5px 0; +} + +/* Homepage */ +.site-title { + font-size: 30px; + font-weight: 700; + letter-spacing: 2px; +} +.home h1, .home h1 + p { + text-align: center; +} +.home h1 { + font-size: 42px; + letter-spacing: 1.2px; +} +.home h1 + p { + font-size: 19px; + color: #424242; +} + + +.post-title { + letter-spacing: 1.2px; +} +a { + font-weight: 500; +} + +.quick-cards { + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + margin: 40px 0; +} +.quick-cards h2 { + margin-bottom: 0; + min-width: 200px; + text-align: center; + padding: 20px; } \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 8317ab35..7ec56491 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,13 +5,14 @@ layout: home --- -

{{ site.title }}

+

File Information Tool Set

Documentation and official code release of the FITS and FITS Web Service projects

-
+ From fec59b17ac656c9aaf81c58fe81b6d7c0fc44559 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 21 Mar 2022 17:45:38 -0400 Subject: [PATCH 15/36] add link to release notes/downloads on homepage --- docs/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index 7ec56491..2c8bf18f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -12,7 +12,7 @@

File Information Tool Set

Quick Start

User Manual

Developer Manual

-

Code releases

+

Code releases

From 032b7c0cd277c1ad629e5eb6a5dfe8aa8cf451db Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 10:55:35 -0400 Subject: [PATCH 16/36] adjust sidebar height --- docs/css/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/css/main.css b/docs/css/main.css index b48e17a1..bdc1c6a1 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -45,7 +45,7 @@ hr { .sidebar { overflow-y: auto; - height: 100vh; + height: calc(100vh - 80px); flex: 0 0 25%; max-width: 25%; } From a0fad6fd7dd62748a6b5a198ae1efd032937123d Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 12:04:52 -0400 Subject: [PATCH 17/36] adding in more content --- docs/_posts/2009-05-18-fits-poster.md | 3 +- docs/_posts/2009-09-01-new-tool.md | 3 +- .../2010-10-01-fits-bpe-presentation.md | 2 +- .../2011-06-09-fits-tool-belt-presentation.md | 2 +- .../2012-07-25-fits-demo-presentation.md | 2 +- docs/_posts/2013-04-29-fits-webinar.md | 2 +- docs/_posts/2013-11-20-fits-blitz.md | 3 +- docs/_posts/2015-06-01-video-support copy.md | 2 +- docs/about.md | 18 +++++++---- docs/connect.md | 18 +++++------ docs/css/main.css | 32 ++++++++++++++++++- docs/news.md | 13 ++++---- 12 files changed, 67 insertions(+), 33 deletions(-) diff --git a/docs/_posts/2009-05-18-fits-poster.md b/docs/_posts/2009-05-18-fits-poster.md index d27391ab..efc80507 100644 --- a/docs/_posts/2009-05-18-fits-poster.md +++ b/docs/_posts/2009-05-18-fits-poster.md @@ -1,10 +1,9 @@ --- layout: post +categories: blog title: Video support in FITS date: 2015-06-01 -categories: blog # author: author -# author_link: author_link --- Harvard is in the process of integrating the [MediaInfo](https://mediaarea.net/en/MediaInfo) tool into FITS! When complete, the tool will provide format identification and technical metadata extraction for video file formats, allow FITS XML to represent technical metadata for video file formats, and support the creation of [EBUCore](https://tech.ebu.ch/MetadataEbuCore) XML metadata through the use of the embedded OTS package. diff --git a/docs/_posts/2009-09-01-new-tool.md b/docs/_posts/2009-09-01-new-tool.md index c1b5c8b1..dc71a9a5 100644 --- a/docs/_posts/2009-09-01-new-tool.md +++ b/docs/_posts/2009-09-01-new-tool.md @@ -1,10 +1,9 @@ --- layout: post +categories: blog title: A New Tool for Digital Preservation Repositories date: 2009-09-01 -categories: blog # author: author -# author_link: author_link --- It was announced in the [September/October 2009 D-Lib In Brief](http://www.dlib.org/dlib/september09/09inbrief.html) that FITS was made available as an open source tool. \ No newline at end of file diff --git a/docs/_posts/2010-10-01-fits-bpe-presentation.md b/docs/_posts/2010-10-01-fits-bpe-presentation.md index 440d3df3..13b08f8b 100644 --- a/docs/_posts/2010-10-01-fits-bpe-presentation.md +++ b/docs/_posts/2010-10-01-fits-bpe-presentation.md @@ -1,9 +1,9 @@ --- layout: presentation +categories: blog title: FITS - The File Information Tool Set, Presentation date: 2010-10-01 location: Best Practices Exchange, Phoenix, Arizona presentors: Spencer McEwen # link: https://projects.iq.harvard.edu/files/fits/files/fits_poster_final.pdf -categories: blog --- \ No newline at end of file diff --git a/docs/_posts/2011-06-09-fits-tool-belt-presentation.md b/docs/_posts/2011-06-09-fits-tool-belt-presentation.md index e62c2722..89bebc5e 100644 --- a/docs/_posts/2011-06-09-fits-tool-belt-presentation.md +++ b/docs/_posts/2011-06-09-fits-tool-belt-presentation.md @@ -1,9 +1,9 @@ --- layout: presentation +categories: blog title: Free Tools for your Preservation Tool Belt, Presentation date: 2011-06-09 location: Open Repositories 2011, Austin, Texas presentors: Randy Stern link: https://projects.iq.harvard.edu/files/fits/files/drs2_preservation_tools-3.pdf -categories: blog --- \ No newline at end of file diff --git a/docs/_posts/2012-07-25-fits-demo-presentation.md b/docs/_posts/2012-07-25-fits-demo-presentation.md index 5353eb1d..4a18d4f0 100644 --- a/docs/_posts/2012-07-25-fits-demo-presentation.md +++ b/docs/_posts/2012-07-25-fits-demo-presentation.md @@ -1,9 +1,9 @@ --- layout: presentation +categories: blog title: FITS Demo, Presentation date: 2012-07-25 location: Digital Preservation 2012, Washington DC presentors: Andrea Goethals # link: https://projects.iq.harvard.edu/files/fits/files/drs2_preservation_tools-3.pdf -categories: blog --- \ No newline at end of file diff --git a/docs/_posts/2013-04-29-fits-webinar.md b/docs/_posts/2013-04-29-fits-webinar.md index c410d178..aa8d9e77 100644 --- a/docs/_posts/2013-04-29-fits-webinar.md +++ b/docs/_posts/2013-04-29-fits-webinar.md @@ -1,9 +1,9 @@ --- layout: presentation +categories: blog title: Using FITS to Identify File Formats and Extract Metadata, Webinar date: 2013-04-29 location: ASERL-sponsored webinar presentors: Andrea Goethals # link: https://projects.iq.harvard.edu/files/fits/files/drs2_preservation_tools-3.pdf -categories: blog --- \ No newline at end of file diff --git a/docs/_posts/2013-11-20-fits-blitz.md b/docs/_posts/2013-11-20-fits-blitz.md index 6efe32a1..d814874c 100644 --- a/docs/_posts/2013-11-20-fits-blitz.md +++ b/docs/_posts/2013-11-20-fits-blitz.md @@ -1,10 +1,9 @@ --- layout: post +categories: blog title: FITS Blitz date: 2013-11-20 -categories: blog # author: author -# author_link: author_link --- We're almost finished with the 2-week project to merge the different forks of FITS on GitHub and to make it easier for others to contribute code to the FITS test base. This was done as a joint project between Harvard Library and the Open Planets Foundation with funding by the SPRUCE project. Learn more about the FITS blitz at: diff --git a/docs/_posts/2015-06-01-video-support copy.md b/docs/_posts/2015-06-01-video-support copy.md index b88d69bc..1c8a739a 100644 --- a/docs/_posts/2015-06-01-video-support copy.md +++ b/docs/_posts/2015-06-01-video-support copy.md @@ -1,9 +1,9 @@ --- layout: presentation +categories: blog title: FITS – The File Information Tool Set, Poster date: 2009-05-18 location: Open Repositories 2009, Georgia Institute of Technology presentors: Spencer McEwen and Randy Stern link: https://projects.iq.harvard.edu/files/fits/files/fits_poster_final.pdf -categories: blog --- \ No newline at end of file diff --git a/docs/about.md b/docs/about.md index b8830734..523850b7 100644 --- a/docs/about.md +++ b/docs/about.md @@ -4,18 +4,24 @@ title: About permalink: /about --- +

FITS

-The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. +The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. -

Release Notes & Downloads

+Note: FITS is written in Java and is **compatible with Java 1.8 or higher**. -

FITS Web Service

+

Release Notes & Source Code

+
+ +--- -The FITS Web Service is a project that allows FITS to be deployed as a service on either Tomcat or JBoss. The code has been built and test using Java 7 and Java 8 and tested on Tomcat 7, Tomcat 8, and minimally on JBoss 7.1. The path to the service will be the WAR file name plus the service name. E.g. - For release 1.1.1 which provides the release artifact fits-1.1.1.war -- http://localhost:8080/fits-1.1.1/examine/ as the base URL. This can be adjusted by either changing the WAR filename or using server-specific settings. +
+

FITS Web Service

-The source code and further documentation for this project and using GET and POST requests to process input files with this URL is available on GitHub here:FITSservlet +The FITS Web Service is a project that allows FITS to be deployed as a service on either Tomcat or JBoss. The code has been built and test using Java 7 and Java 8 and tested on Tomcat 7, Tomcat 8, and minimally on JBoss 7.1. The path to the service will be the WAR file name plus the service name. (E.g. - For release 1.1.1 which provides the release artifact fits-1.1.1.war, use http://localhost:8080/fits-1.1.1/examine/ as the base URL). This can be adjusted by either changing the WAR filename or using server-specific settings. Note: The latest and future versions of this project are built and tested using Java 8. -

Release Notes & Source Code

\ No newline at end of file +

Release Notes & Source Code

+
\ No newline at end of file diff --git a/docs/connect.md b/docs/connect.md index a7e6d73a..d0596303 100644 --- a/docs/connect.md +++ b/docs/connect.md @@ -5,21 +5,21 @@ subtitle: Connect with the FITS community permalink: /connect --- -
+
-

Join the Google Group

-

Description

+

Join the Google Group

+

Join the FITS Google Group to follow general project discussions and feature announcements.

-

Chat on Slack

-

Description

+

Chat on Slack

+

Join the FITS Slack channel #fits-community-sprint in the code4lib workspace to chat with others in the community.

-

Participate in a Community Sprint

-

Description

+

Participate in a Community Sprint

+

Sign up to get involved the community's next 2-week sprint (date TBD).

-

Discuss on GitHub

-

Description

+

Discuss on GitHub

+

Report bugs, suggest feature enhancements, or request documentation updates by creating an issue on FITS's GitHub issue tracker.

\ No newline at end of file diff --git a/docs/css/main.css b/docs/css/main.css index bdc1c6a1..299a5db0 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -109,7 +109,7 @@ h5 { font-size: 42px; letter-spacing: 1.2px; } -.home h1 + p { +.home h1 + p, h1.post-title + p { font-size: 19px; color: #424242; } @@ -133,4 +133,34 @@ a { min-width: 200px; text-align: center; padding: 20px; +} + + +.connect-cards > div { + margin-bottom: 30px; +} +.connect-cards h2 { + font-size: 24px; + line-height: 32px; + margin-bottom: 5px; +} +@media(min-width:620px){ + .connect-cards { + display: grid; + grid-template-columns: calc(50% - 15px) calc(50% - 15px); + grid-gap: 30px; + } + .connect-cards > div { + margin-bottom: 0; + } +} + + +.news-grid { + list-style: none; + margin-left: 0; +} +.news-grid h2 { + font-size: 20px; + line-height: 30px; } \ No newline at end of file diff --git a/docs/news.md b/docs/news.md index 03fb33f3..8a242585 100644 --- a/docs/news.md +++ b/docs/news.md @@ -1,21 +1,22 @@ --- layout: page title: News -subtitle: News, presentations, and blog posts go here +subtitle: The lastest news, presentations, and blog posts permalink: /news --- -
    +
      {% for post in site.categories.blog %}
    • -

      +

      {{ post.title }} -

      +

      {{ post.snippet }}


    • From f69ff571b95cb24f44c23df9b32e34b4ddaeb565 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 12:11:28 -0400 Subject: [PATCH 18/36] updating user-manual link --- docs/quick-start.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quick-start.md b/docs/quick-start.md index b21cea7c..419b3fe1 100644 --- a/docs/quick-start.md +++ b/docs/quick-start.md @@ -70,6 +70,6 @@ See the [Developer Manual](https://github.com/harvard-lts/fits/wiki/Developer-Ma ## 6. Next steps -After you are up and running see the [User Manual]() for more documentation. +After you are up and running see the [User Manual](/fits/user-manual) for more documentation.
\ No newline at end of file From 87e0c081db855b8878b2760243f95fa9ea3ca9e3 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 12:21:19 -0400 Subject: [PATCH 19/36] content updates --- docs/_includes/tool.md | 1 - docs/guides/getting-started.md | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/_includes/tool.md b/docs/_includes/tool.md index 6072632b..4a9f1320 100644 --- a/docs/_includes/tool.md +++ b/docs/_includes/tool.md @@ -13,7 +13,6 @@ | Details | {% if post.details %} {{ post.details }} {% endif %} | | More information | {% if post.more-info-url %} {% if post.more-info %}{{post.more-info}}

{% endif %}{{ post.more-info-url }}{% else if post.more-info %} {{ post.more-info }} {% endif %}| - {% endfor %} \ No newline at end of file diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md index f5399199..5437daeb 100644 --- a/docs/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -1,6 +1,8 @@ ### What is FITS? -The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is compatible with Java 1.8 or higher. The external tools currently used are: +The File Information Tool Set (FITS) identifies, validates and extracts technical metadata for a wide range of file formats. It acts as a wrapper, invoking and managing the output from several other open source tools. Output from these tools are converted into a common format, compared to one another and consolidated into a single XML output file. FITS is written in Java and is **compatible with Java 1.8 or higher**. + +The external tools currently used are: - [Apache Tika](http://tika.apache.org/) - [Jhove](https://github.com/openpreserve/jhove) From 852dddf341e8af97a8d29f0b02839e87aefb29db Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 15:29:38 -0400 Subject: [PATCH 20/36] tool table cleanup --- docs/_includes/tool.md | 5 +++-- docs/_posts/2022-03-20-adl-tool.md | 7 +++---- docs/_posts/2022-03-20-apache-tika.md | 9 +++------ docs/_posts/2022-03-20-droid.md | 5 ++--- docs/_posts/2022-03-20-embARC.md | 5 ++--- docs/_posts/2022-03-20-exifTool.md | 5 ++--- docs/_posts/2022-03-20-ffident.md | 7 +++---- docs/_posts/2022-03-20-file-utility.md | 7 +++---- docs/_posts/2022-03-20-jhove.md | 5 ++--- docs/_posts/2022-03-20-mediaInfo.md | 7 +++---- docs/_posts/2022-03-20-metadata-extractor.md | 5 ++--- docs/_posts/2022-03-20-ois-audio.md | 5 ++--- docs/_posts/2022-03-20-ois-file.md | 5 ++--- docs/_posts/2022-03-20-ois-xml.md | 5 ++--- docs/_posts/2022-03-20-vtt.md | 5 ++--- docs/connect.md | 4 ++-- docs/guides/getting-started.md | 2 +- docs/index.html | 2 -- 18 files changed, 39 insertions(+), 56 deletions(-) diff --git a/docs/_includes/tool.md b/docs/_includes/tool.md index 4a9f1320..3cd9babb 100644 --- a/docs/_includes/tool.md +++ b/docs/_includes/tool.md @@ -10,8 +10,9 @@ | Maintenance organization | {% if post.maintenance-organization %} {{ post.maintenance-organization }} {% endif %} | | Capabilities | {% if post.capabilities %} {{ post.capabilities }} {% endif %} | | Formats supported | {% if post.formats %} {{ post.formats }} {% endif %} | -| Details | {% if post.details %} {{ post.details }} {% endif %} | -| More information | {% if post.more-info-url %} {% if post.more-info %}{{post.more-info}}

{% endif %}{{ post.more-info-url }}{% else if post.more-info %} {{ post.more-info }} {% endif %}| +| Description | {% if post.description %} {{ post.description }} {% endif %} | +| Usage notes | {% if post.usage-note %}{{post.usage-note}}{% endif %} | +| More information | {% if post.more-info-url %}{{ post.more-info-url }}{% endif %} | diff --git a/docs/_posts/2022-03-20-adl-tool.md b/docs/_posts/2022-03-20-adl-tool.md index 1c0f5eba..ba12da73 100644 --- a/docs/_posts/2022-03-20-adl-tool.md +++ b/docs/_posts/2022-03-20-adl-tool.md @@ -2,11 +2,10 @@ layout: post categories: tools title: ADL Tool -# tool-url: tool website maintenance-organization: Harvard Library # capabilities: capabilities formats: Audio Decision List files -# details: details -# more-info: more information to described -# more-info-url: more information link +# description: description +# usage-note: usage note +# more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-apache-tika.md b/docs/_posts/2022-03-20-apache-tika.md index 4ac6a2e4..20063c2c 100644 --- a/docs/_posts/2022-03-20-apache-tika.md +++ b/docs/_posts/2022-03-20-apache-tika.md @@ -2,13 +2,10 @@ layout: post categories: tools title: Apache Tika -# tool-url: tools website maintenance-organization: Apache capabilities: Identifies file formats formats: See [https://tika.apache.org/1.19/formats.html](https://tika.apache.org/1.19/formats.html) -# details: details -# more-info: more information to described +# description: description +# usage-note: usage note more-info-url: http://tika.apache.org/ ---- - -Texty text \ No newline at end of file +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-droid.md b/docs/_posts/2022-03-20-droid.md index 7011b02e..0d7b1c71 100644 --- a/docs/_posts/2022-03-20-droid.md +++ b/docs/_posts/2022-03-20-droid.md @@ -2,11 +2,10 @@ layout: post categories: tools title: DROID -tool-url: https://www.nationalarchives.gov.uk/information-management/manage-information/policy-process/digital-continuity/file-profiling-tool-droid/ maintenance-organization: UK National Archives # capabilities: capabilities formats: many (> 1,000) - Listed in the DROID signature file -details: DROID is written in Java. The FITS tool wrapper uses the provided API. The output is converted into a simple XML document and then converted to FITS XML using xml/droid/droid_to_fits.xslt. The DROID configuration file and signature file are located in the tools/droid directory. -# more-info: more information to described +description: DROID is written in Java. The FITS tool wrapper uses the provided API. The output is converted into a simple XML document and then converted to FITS XML using xml/droid/droid_to_fits.xslt. The DROID configuration file and signature file are located in the tools/droid directory. +# usage-note: usage note more-info-url: https://www.nationalarchives.gov.uk/information-management/manage-information/policy-process/digital-continuity/file-profiling-tool-droid/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-embARC.md b/docs/_posts/2022-03-20-embARC.md index 0bc4b8a2..7b2d0c65 100644 --- a/docs/_posts/2022-03-20-embARC.md +++ b/docs/_posts/2022-03-20-embARC.md @@ -2,11 +2,10 @@ layout: post categories: tools title: embARC -tool-url: https://www.digitizationguidelines.gov/guidelines/embARC.html maintenance-organization: Library of Congress capabilities: Identify and extract complete metadata from SMPTE DPX image files. formats: dpx -details: embARC is written in Java. The FITS tool wrapper uses the provided API. Raw tool output is provided in XML format.

Note - Although the standalone embARC application processes DPX sequences natively, this integration with FITS only supports the processing of DPX files individually and not as a sequence. -more-info: Although the standalone embARC application processes DPX sequences natively, this integration with FITS only supports the processing of DPX files individually and not as a sequence. +description: embARC is written in Java. The FITS tool wrapper uses the provided API. Raw tool output is provided in XML format. +usage-note: Although the standalone embARC application processes DPX sequences natively, this integration with FITS only supports the processing of DPX files individually and not as a sequence. more-info-url: https://www.digitizationguidelines.gov/guidelines/embARC.html --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-exifTool.md b/docs/_posts/2022-03-20-exifTool.md index 9569fac1..324e2463 100644 --- a/docs/_posts/2022-03-20-exifTool.md +++ b/docs/_posts/2022-03-20-exifTool.md @@ -2,11 +2,10 @@ layout: post categories: tools title: ExifTool -tool-url: https://exiftool.org/ maintenance-organization: Phil Harvey capabilities: Identifies and extracts technical metadata. formats: jpg,tiff,jp2,gif,bmp,png,psd,dng,wav,mp3,mp4,m4a,aiff,rm,ogg,flac,xml,html,pdf,doc -details: Exiftool is written in Perl. A windows executable is also provided. The Exiftool tool wrapper detects the operating system type and calls the appropriate version of the tool. The tab-delimited output is captured, converted to a simple XML structure, and then converted to FITS XML using xslt. xml/exiftool/exiftool_xslt_map.xml is used to determine which XSLT to apply for the given identified format. -# more-info: more information to described +description: Exiftool is written in Perl. A windows executable is also provided. The Exiftool tool wrapper detects the operating system type and calls the appropriate version of the tool. The tab-delimited output is captured, converted to a simple XML structure, and then converted to FITS XML using xslt. xml/exiftool/exiftool_xslt_map.xml is used to determine which XSLT to apply for the given identified format. +# usage-note: usage note more-info-url: https://exiftool.org/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ffident.md b/docs/_posts/2022-03-20-ffident.md index 7fc40138..88477012 100644 --- a/docs/_posts/2022-03-20-ffident.md +++ b/docs/_posts/2022-03-20-ffident.md @@ -2,11 +2,10 @@ layout: post categories: tools title: ffident -# tool-url: tool website maintenance-organization: no longer maintained capabilities: Identifies file formats. formats: Listed in the configuration file tools/ffident/formats.txt -details: FFIdent is written in Java. The FITS tool wrapper uses the provided API. Output is converted into a simple XML document and then converted to FITS XML using xml/ffident/ffident_to_fits.xslt. -more-info: archived site -# more-info-url: http://web.archive.org/web/20061106114156/http://schmidt.devlib.org/ffident/index.html +description: FFIdent is written in Java. The FITS tool wrapper uses the provided API. Output is converted into a simple XML document and then converted to FITS XML using xml/ffident/ffident_to_fits.xslt. +usage-note: archived site +# more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-file-utility.md b/docs/_posts/2022-03-20-file-utility.md index 9bc786b0..2c92a9d5 100644 --- a/docs/_posts/2022-03-20-file-utility.md +++ b/docs/_posts/2022-03-20-file-utility.md @@ -2,11 +2,10 @@ layout: post categories: tools title: File utility (windows) -# tool-url: http://unixhelp.ed.ac.uk/CGI/man-cgi?file # maintenance-organization: maintenance organization capabilities: Identifies files. formats: many (> 1,000) -details: File Utility is usually bundled with Linux, UNIX and OS X. The GnuWin32? port is provided for use on Windows. Due to variations in versions this may cause different output when run on different platforms. File Utility is called in its default mode (no arguments), and also with -i to determine the MIME type. The output is converted into a simple XML document and then converted to FITS XML using xml/fileutility/fileutility_to_fits.xslt -more-info: windows port - http://gnuwin32.sourceforge.net/ -# more-info-url: more information link +description: File Utility is usually bundled with Linux, UNIX and OS X. The GnuWin32? port is provided for use on Windows. Due to variations in versions this may cause different output when run on different platforms. File Utility is called in its default mode (no arguments), and also with -i to determine the MIME type. The output is converted into a simple XML document and then converted to FITS XML using xml/fileutility/fileutility_to_fits.xslt +usage-note: windows port - http://gnuwin32.sourceforge.net/ +more-info-url: http://darwinsys.com/file/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-jhove.md b/docs/_posts/2022-03-20-jhove.md index 6adc0962..cecc2366 100644 --- a/docs/_posts/2022-03-20-jhove.md +++ b/docs/_posts/2022-03-20-jhove.md @@ -2,11 +2,10 @@ layout: post categories: tools title: Jhove -# tool-url: https://github.com/openpreserve/jhove maintenance-organization: Open Preservation Foundation capabilities: Identifies, extracts technical metadata, and validates files. formats: jpg, tiff, jp2, gif, wave, aiff, xml, html, ascii, utf-8, pdf -details: JHOVE is written in Java. The FITS tool wrapper uses the provided API. The JHOVE XML output is converted to FITS XML using XSLT. xml/jhove/jhove_xslt_map.xml is used to determine which XSLT to apply for the given identified format. -more-info: For JP2 files the JHOVE output element Transformation indicates whether the compression is lossy or lossless. The transformation values are described in Table A-20 of the JPEG2000 part 1 specification. A value of 0 maps to the 9-7 irreversible (lossy) filter. A value of 1 maps to 5-3 reversible (lossless) filter. This JHOVE element is used by FITS when it outputs the compressionScheme in the image metadata, writing it as JPEG 2000 Lossy or JPEG 2000 Lossless.

JHOVE does not validate the codestream but it checks the file structure. +description: JHOVE is written in Java. The FITS tool wrapper uses the provided API. The JHOVE XML output is converted to FITS XML using XSLT. xml/jhove/jhove_xslt_map.xml is used to determine which XSLT to apply for the given identified format. +usage-note: For JP2 files the JHOVE output element Transformation indicates whether the compression is lossy or lossless. The transformation values are described in Table A-20 of the JPEG2000 part 1 specification. A value of 0 maps to the 9-7 irreversible (lossy) filter. A value of 1 maps to 5-3 reversible (lossless) filter. This JHOVE element is used by FITS when it outputs the compressionScheme in the image metadata, writing it as JPEG 2000 Lossy or JPEG 2000 Lossless.

JHOVE does not validate the codestream but it checks the file structure. more-info-url: https://github.com/openpreserve/jhove --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-mediaInfo.md b/docs/_posts/2022-03-20-mediaInfo.md index 8853a2f5..b889a425 100644 --- a/docs/_posts/2022-03-20-mediaInfo.md +++ b/docs/_posts/2022-03-20-mediaInfo.md @@ -2,11 +2,10 @@ layout: post categories: tools title: MediaInfo -# tool-url: https://mediaarea.net/en/MediaInfo maintenance-organization: MediaArea.net capabilities: Identifies and extracts technical metadata for video files. -formats: Although MediaInfo supports many video formats, FITS will only support the following video formats and wrappers out of the box - avi, mov, mpg, mpeg, mkv, mp4, mxf, ogv, mj2, divx, dv, m4v, m2v, ism. -details: The MediaInfo API is written in C++ and is called via Java by using the JNA library. -# more-info: more information +formats: FITS only supports the following video formats and wrappers out of the box -- avi, mov, mpg, mpeg, mkv, mp4, mxf, ogv, mj2, divx, dv, m4v, m2v, ism. +description: The MediaInfo API is written in C++ and is called via Java by using the JNA library. +# usage-note: usage note more-info-url: https://mediaarea.net/en/MediaInfo --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-metadata-extractor.md b/docs/_posts/2022-03-20-metadata-extractor.md index ac0ba0c1..f7c845fc 100644 --- a/docs/_posts/2022-03-20-metadata-extractor.md +++ b/docs/_posts/2022-03-20-metadata-extractor.md @@ -2,11 +2,10 @@ layout: post categories: tools title: Metadata Extractor Tool -# tool-url: https://github.com/DIA-NZ/Metadata-Extraction-Tool maintenance-organization: National Library of New Zealand capabilities: Identifies and extracts technical metadata. formats: jpg, tiff, gif, bmp, wav, mp3, xml, html, pdf, doc, wordperfect, msworks, odt -details: The FITS NLNZ tool wrapper uses the provided Java API. The NLNZ native XML output is converted to FITS XML using XSLT. xml/nlnz/fits/nlnz_xslt_map.xml is used to determine which XSLT to apply to the given identified format. -# more-info: more information +description: The FITS NLNZ tool wrapper uses the provided Java API. The NLNZ native XML output is converted to FITS XML using XSLT. xml/nlnz/fits/nlnz_xslt_map.xml is used to determine which XSLT to apply to the given identified format. +# usage-note: usage note more-info-url: https://github.com/DIA-NZ/Metadata-Extraction-Tool --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-audio.md b/docs/_posts/2022-03-20-ois-audio.md index fb365f39..3e9be33c 100644 --- a/docs/_posts/2022-03-20-ois-audio.md +++ b/docs/_posts/2022-03-20-ois-audio.md @@ -2,11 +2,10 @@ layout: post categories: tools title: OIS Audio Information -# tool-url: more information at website maintenance-organization: Harvard Library # capabilities: capabilities formats: audio -# details: details -# more-info: more information +# description: description +# usage-note: usage note # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-file.md b/docs/_posts/2022-03-20-ois-file.md index b3bdfa61..c224fa99 100644 --- a/docs/_posts/2022-03-20-ois-file.md +++ b/docs/_posts/2022-03-20-ois-file.md @@ -2,11 +2,10 @@ layout: post categories: tools title: OIS File Information -# tool-url: more information at website maintenance-organization: Harvard Library capabilities: Extracts technical metadata. formats: any -details: FileInfo creates FITS XML without further normalization. It determines basic file information like file name, size, file system last modified date, and md5 checksums. It uses the fast md5 jar from http://www.twmacinta.com/myjava/fast_md5.php. -# more-info: more information +description: FileInfo creates FITS XML without further normalization. It determines basic file information like file name, size, file system last modified date, and md5 checksums. It uses the fast md5 jar from http://www.twmacinta.com/myjava/fast_md5.php. +# usage-note: usage note # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-xml.md b/docs/_posts/2022-03-20-ois-xml.md index 21d5dfc2..de53a3ea 100644 --- a/docs/_posts/2022-03-20-ois-xml.md +++ b/docs/_posts/2022-03-20-ois-xml.md @@ -2,11 +2,10 @@ layout: post categories: tools title: OIS XML Information -# tool-url: more information at website maintenance-organization: Harvard Library capabilities: Identifies and extracts technical metadata. formats: XML -details: XmlMetadata creates FITS XML without further normalization. Its sole purpose is to identify XML and parse out the default namespace and schema location. This is used for FITS text metadata. -# more-info: more information +description: XmlMetadata creates FITS XML without further normalization. Its sole purpose is to identify XML and parse out the default namespace and schema location. This is used for FITS text metadata. +# usage-note: usage note # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-vtt.md b/docs/_posts/2022-03-20-vtt.md index fa79c551..bb407b9e 100644 --- a/docs/_posts/2022-03-20-vtt.md +++ b/docs/_posts/2022-03-20-vtt.md @@ -2,11 +2,10 @@ layout: post categories: tools title: VTT Tool -# tool-url: more information at website maintenance-organization: Harvard Library capabilities: Identifies and extracts technical metadata. formats: video -details: VTT Tool creates FITS XML without further normalization. This is used for FITS text metadata. -# more-info: more information +description: VTT Tool creates FITS XML without further normalization. This is used for FITS text metadata. +# usage-note: usage note # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/connect.md b/docs/connect.md index d0596303..fca1a92b 100644 --- a/docs/connect.md +++ b/docs/connect.md @@ -15,8 +15,8 @@ permalink: /connect

Join the FITS Slack channel #fits-community-sprint in the code4lib workspace to chat with others in the community.

-

Participate in a Community Sprint

-

Sign up to get involved the community's next 2-week sprint (date TBD).

+

Participate in a Community Sprint>

+

Get involved the community's next 2-week sprint (date TBD). Sign up for the FITS Google Group to learn when the next sprint will be.

Discuss on GitHub

diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md index 5437daeb..70a40704 100644 --- a/docs/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -15,7 +15,7 @@ The external tools currently used are: ### Why use FITS? -EVERYBODY SHOULD JUST DO IT. +Preservationists and digital curators who are concerned with long-term access and use of digital files might extract technical metadata from digital files to troubleshoot problems and to create a record of the file’s properties. A number of tools can reliably extract technical metadata, but the File Information Tool Set combines these tools and compares the results of their output; this saves time and effort. ### Installing FITS diff --git a/docs/index.html b/docs/index.html index 2c8bf18f..575de5bb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -15,8 +15,6 @@

Develope

Code releases

- -

FITS Contributors

  • Contributor 1
  • From b2f25c76760854c5e1b9a2299d4b04f5150c6b99 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 17:43:12 -0400 Subject: [PATCH 21/36] reworking content sections --- docs/_includes/data-dictionary-unit.md | 26 ++++++++++++ docs/_includes/tool.md | 4 +- docs/_posts/2022-03-20-file-utility.md | 2 +- docs/_posts/2022-03-20-mediaInfo.md | 4 +- docs/_posts/2022-03-20-ois-file.md | 2 +- docs/_posts/2022-03-22-audio.md | 16 ++++++++ docs/_posts/2022-03-22-container.md | 16 ++++++++ docs/_posts/2022-03-22-fileInfo.md | 28 +++++++++++++ docs/_posts/2022-03-22-fileStatus.md | 21 ++++++++++ docs/_posts/2022-03-22-identification.md | 40 +++++++++++++++++++ docs/_posts/2022-03-22-image.md | 16 ++++++++ docs/_posts/2022-03-22-metadata.md | 34 ++++++++++++++++ docs/_posts/2022-03-22-text.md | 16 ++++++++ docs/_posts/2022-03-22-video.md | 16 ++++++++ docs/connect.md | 2 +- docs/guides.md | 3 +- docs/guides/data-dictionary.md | 9 +++++ .../fits-config_fits_format_tree_xml.md | 1 + docs/guides/fits-config_fits_xml.md | 1 + docs/guides/fits-config_fits_xml_map_xml.md | 1 + docs/guides/fits-config_format_map_txt.md | 1 + docs/guides/fits-config_mime_map_txt.md | 1 + .../fits-config_mime_to_format_map_txt.md | 1 + docs/guides/fits-configuration-files.md | 12 +++--- 24 files changed, 258 insertions(+), 15 deletions(-) create mode 100644 docs/_includes/data-dictionary-unit.md create mode 100644 docs/_posts/2022-03-22-audio.md create mode 100644 docs/_posts/2022-03-22-container.md create mode 100644 docs/_posts/2022-03-22-fileInfo.md create mode 100644 docs/_posts/2022-03-22-fileStatus.md create mode 100644 docs/_posts/2022-03-22-identification.md create mode 100644 docs/_posts/2022-03-22-image.md create mode 100644 docs/_posts/2022-03-22-metadata.md create mode 100644 docs/_posts/2022-03-22-text.md create mode 100644 docs/_posts/2022-03-22-video.md create mode 100644 docs/guides/data-dictionary.md create mode 100644 docs/guides/fits-config_fits_format_tree_xml.md create mode 100644 docs/guides/fits-config_fits_xml.md create mode 100644 docs/guides/fits-config_fits_xml_map_xml.md create mode 100644 docs/guides/fits-config_format_map_txt.md create mode 100644 docs/guides/fits-config_mime_map_txt.md create mode 100644 docs/guides/fits-config_mime_to_format_map_txt.md diff --git a/docs/_includes/data-dictionary-unit.md b/docs/_includes/data-dictionary-unit.md new file mode 100644 index 00000000..42f17691 --- /dev/null +++ b/docs/_includes/data-dictionary-unit.md @@ -0,0 +1,26 @@ +{% assign sorted_posts = site.categories.data-dictionary | sort_natural: 'semantic-unit' %} + +{% for post in sorted_posts %} + +
    + +#### {{ post.semantic-unit }} + +| --------- | ----------- | +| Semantic unit | {% if post.semantic-unit %} {{ post.semantic-unit }} {% endif %} | +| Semantic components | {% if post.semantic-components %} {{ post.semantic-components }} {% endif %} | +| Definition | {% if post.definition %} {{ post.definition }} {% endif %} | +| Rationale | {% if post.rationale %} {{ post.rationale }} {% endif %} | +| Data constraint | {% if post.data-constraint %} {{ post.data-constraint }} {% endif %} | +| Obligation | {% if post.obligation %} {{ post.obligation }} {% endif %} | +| Usage notes | {% if post.usage-notes %}{{ post.usage-notes }}{% endif %} | +{% if post.metadata-standard %}| Metadata standard | {{ post.metadata-standard }} | +| Short name | {{ post.short-name }} | +| Maintenance organization | {{ post.maintenance-organization }} | +| Website | [{{ post.website }}]({{ post.website }}) |{% endif %} + +{% if post.content %}{{ post.content }}{% endif %} + +
    + +{% endfor %} \ No newline at end of file diff --git a/docs/_includes/tool.md b/docs/_includes/tool.md index 3cd9babb..b54f087d 100644 --- a/docs/_includes/tool.md +++ b/docs/_includes/tool.md @@ -2,7 +2,7 @@ {% for post in sorted_posts %} -
    +
    #### {{ post.title }} @@ -12,7 +12,7 @@ | Formats supported | {% if post.formats %} {{ post.formats }} {% endif %} | | Description | {% if post.description %} {{ post.description }} {% endif %} | | Usage notes | {% if post.usage-note %}{{post.usage-note}}{% endif %} | -| More information | {% if post.more-info-url %}{{ post.more-info-url }}{% endif %} | +| More information | {% if post.more-info-url %} [{{ post.more-info-url }}]({{ post.more-info-url }}) {% endif %} |
    diff --git a/docs/_posts/2022-03-20-file-utility.md b/docs/_posts/2022-03-20-file-utility.md index 2c92a9d5..47725298 100644 --- a/docs/_posts/2022-03-20-file-utility.md +++ b/docs/_posts/2022-03-20-file-utility.md @@ -6,6 +6,6 @@ title: File utility (windows) capabilities: Identifies files. formats: many (> 1,000) description: File Utility is usually bundled with Linux, UNIX and OS X. The GnuWin32? port is provided for use on Windows. Due to variations in versions this may cause different output when run on different platforms. File Utility is called in its default mode (no arguments), and also with -i to determine the MIME type. The output is converted into a simple XML document and then converted to FITS XML using xml/fileutility/fileutility_to_fits.xslt -usage-note: windows port - http://gnuwin32.sourceforge.net/ +usage-note: windows port - [http://gnuwin32.sourceforge.net/](http://gnuwin32.sourceforge.net/) more-info-url: http://darwinsys.com/file/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-mediaInfo.md b/docs/_posts/2022-03-20-mediaInfo.md index b889a425..87b78e6f 100644 --- a/docs/_posts/2022-03-20-mediaInfo.md +++ b/docs/_posts/2022-03-20-mediaInfo.md @@ -2,10 +2,10 @@ layout: post categories: tools title: MediaInfo -maintenance-organization: MediaArea.net +maintenance-organization: MediaArea.net capabilities: Identifies and extracts technical metadata for video files. formats: FITS only supports the following video formats and wrappers out of the box -- avi, mov, mpg, mpeg, mkv, mp4, mxf, ogv, mj2, divx, dv, m4v, m2v, ism. -description: The MediaInfo API is written in C++ and is called via Java by using the JNA library. +description: The MediaInfo API is written in C++ and is called via Java by using the [JNA library](https://github.com/java-native-access/jna). # usage-note: usage note more-info-url: https://mediaarea.net/en/MediaInfo --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-file.md b/docs/_posts/2022-03-20-ois-file.md index c224fa99..8dd6672f 100644 --- a/docs/_posts/2022-03-20-ois-file.md +++ b/docs/_posts/2022-03-20-ois-file.md @@ -5,7 +5,7 @@ title: OIS File Information maintenance-organization: Harvard Library capabilities: Extracts technical metadata. formats: any -description: FileInfo creates FITS XML without further normalization. It determines basic file information like file name, size, file system last modified date, and md5 checksums. It uses the fast md5 jar from http://www.twmacinta.com/myjava/fast_md5.php. +description: FileInfo creates FITS XML without further normalization. It determines basic file information like file name, size, file system last modified date, and md5 checksums. It uses the fast md5 jar from [http://www.twmacinta.com/myjava/fast_md5.php](http://www.twmacinta.com/myjava/fast_md5.php). # usage-note: usage note # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-22-audio.md b/docs/_posts/2022-03-22-audio.md new file mode 100644 index 00000000..4e8ab413 --- /dev/null +++ b/docs/_posts/2022-03-22-audio.md @@ -0,0 +1,16 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.01 Audio elements +semantic-components: Include accordion with list of audio elements +definition: This section contains technical metadata for audio files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. +rationale: Each file processed with FITS should have unique technical properties to support use and rendering. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: The list of audio elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. +metadata-standard: AES standard for audio metadata – Audio object structures for preservation and restoration +short-name: AES Audio Object +maintenance-organization: Audio Engineering Society, Inc. (AES) +website: http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-22-container.md b/docs/_posts/2022-03-22-container.md new file mode 100644 index 00000000..22e557b7 --- /dev/null +++ b/docs/_posts/2022-03-22-container.md @@ -0,0 +1,16 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.05 Container elements +semantic-components: N/A +definition: This section identifies the standard used to wrap file-specific sections. +rationale: The container element can extend established schemas or wrap the output of a characterization tool. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: The containerMD standard contains a description of the container and two levels of verbosity. it can be used to extend certain container formats, and the container element can include format-specific technical metadata. +metadata-standard: ContainerMD +short-name: ContainerMD +maintenance-organization: Bibliothèque Nationale de France +website: http://bibnum.bnf.fr/containerMD-v1_1/index.html +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-22-fileInfo.md b/docs/_posts/2022-03-22-fileInfo.md new file mode 100644 index 00000000..6360b4b3 --- /dev/null +++ b/docs/_posts/2022-03-22-fileInfo.md @@ -0,0 +1,28 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 2.0 fileInfo +semantic-components: 2.01 filepath; 2.02 filename; 2.03 size; 2.04 md5checksum; 2.05 lastmodified; 2.06 fslastmodified; 2.07 created; 2.08 creatingApplicationName; 2.09 creatingApplicationversion; 2.10 inhibitorType; 2.11 rightsBasis 2.12 copyrightBasis; 2.13 copyrightNote; 2.14 creatingos +definition: This section contains basic technical metadata not specific to any format +rationale: Each file processed with FITS should have unique file properties to support use and rendering. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: Each of the above elements will carry toolname and toolversion attributes to record the name of the tool that is the source of the information. In most cases there will also be a status attribute value equal to SINGLE_RESULT which means that there wasn't any conflicting information output by a tool. In some cases, for example if tools reported different file creation dates there will be a status value of CONFLICT. +--- + +##### Example + +``` + + 43152124 + Adobe Photoshop CS6 (Windows) + 2013:12:16 13:24:36 + 2013-12-16T07:24:36 + 2013:12:16 13:23:37-06:00 + /Users/UserID/Desktop/Sample_0001.tif + 0010_Adams_0001-006-1857-02-21_001.tif + 0c8c66bcc9614cd280f44a0ab8181811 + 1387221878000 + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-fileStatus.md b/docs/_posts/2022-03-22-fileStatus.md new file mode 100644 index 00000000..eb8a2ae7 --- /dev/null +++ b/docs/_posts/2022-03-22-fileStatus.md @@ -0,0 +1,21 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 3.0 fileStatus +semantic-components: 3.01 messageElements; 3.01.1 well-formed; 3.01.2 valid; 3.01.3 message +definition: This section contains validity information if the tools are able to identify a valid format. +rationale: Each file processed with FITS should have a declaration of validity. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: Well-formed and valid elements will indicate a boolean value (true or false) depending on the validation status of the file. +--- + +##### Example + +``` + + true + true + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-identification.md b/docs/_posts/2022-03-22-identification.md new file mode 100644 index 00000000..920ab18f --- /dev/null +++ b/docs/_posts/2022-03-22-identification.md @@ -0,0 +1,40 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 1.0 identification +semantic-components: 1.1 identity; 1.2 tool; 1.3 version; 1.4 externalIdentifier +definition: This section contains the file format in one or more identity blocks. +rationale: Each file processed with FITS should have a unique format to support use and rendering. +data-constraint: Container +repeatability: Not repeatable +obligation: Automatic +usage-notes: If all the tools that processed the file and could identify it came up with the same format, there will only be one identity block. If there were tools that processed the file that came up with an alternative format, there will be multiple identity blocks. The tools that identified the format will be nested within the identity elements.

    If multiple tools disagree on a format identity or other metadata values, a status attribute is added to the element with a value of "CONFLICT". If only a single tool reports a format identity or other metadata value, a status attribute is added to the element with a value of "SINGLE_RESULT". If multiple tools agree on an identity or value, and none disagree, the status attribute is omitted. A "PARTIAL" value is written when the format can only be partially identified, for example a format name is identified but not a MIME media type. +--- + +##### Example 1: Successful format identification + +In this example, two tools (Jhove 1.5 and file utility 5.04) identified the format as Plain text with a MIME media type of text/plain. + +``` + + + + + + +``` + +##### Example 2: Format conflict + +In this example, there is a "format conflict". The tool Exiftool 9.13 identified the format as PCD with MIME media type image/x-photo-cd, but the tool Tika 1.3 identified the format as MPEG-1 Audio Layer 3. Notice in this case that the identification element will carry an attribute status value of CONFLICT. + +``` + + + + + + + + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-image.md b/docs/_posts/2022-03-22-image.md new file mode 100644 index 00000000..f20ab91e --- /dev/null +++ b/docs/_posts/2022-03-22-image.md @@ -0,0 +1,16 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.03 Image elements +semantic-components: Include accordion with list of image elements +definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. +rationale: Each file processed with FITS should have unique technical properties to support use and rendering. +data-constraint: Container +repeatability: Not repeatable +obligation: Automatic +usage-notes: The list of image elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. +metadata-standard: NISO Metadata for Images in XML Schema +short-name: MIX +maintenance-organization: Library of Congress (for NISO) +website: http://www.loc.gov/standards/mix/ +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-22-metadata.md b/docs/_posts/2022-03-22-metadata.md new file mode 100644 index 00000000..0f41b3d6 --- /dev/null +++ b/docs/_posts/2022-03-22-metadata.md @@ -0,0 +1,34 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.0 metadata +semantic-components: 4.01 Audio, 4.02 Text, 4.03 Image, 4.04 Video, 4.05 Container +definition: This section contains the format-specific technical metadata after normalization and consolidation of each tool's raw output. +rationale: Each file processed with FITS should have unique technical properties to support use and rendering. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: The elements in this section differ depending on the type of the file format (audio, document, image, text, video). Each type-specific section lists the potential elements that can appear. The actual elements depend on what the tools are able to determine for the file. +--- + +##### Example + +``` + + little endian + Uncompressed + 2982 + 4821 + RGB + 0 255 0 255 0 255 + EPSON Standard RGB - Gamma 1.8 + normal* + in. + 600 + 600 + 8 8 8 + 3 + Adobe Photoshop CS6 (Windows) + 2.2.0 + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-text.md b/docs/_posts/2022-03-22-text.md new file mode 100644 index 00000000..ae899dce --- /dev/null +++ b/docs/_posts/2022-03-22-text.md @@ -0,0 +1,16 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.02 Text elements +semantic-components: Include accordion with list of text elements +definition: This section contains technical metadata for text files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. +rationale: Each file processed with FITS should have unique technical properties to support use and rendering. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: The list of text elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. +metadata-standard: Technical Metadata for Text +short-name: TextMD +maintenance-organization: Library of Congress +website: http://www.loc.gov/standards/textMD/ +--- \ No newline at end of file diff --git a/docs/_posts/2022-03-22-video.md b/docs/_posts/2022-03-22-video.md new file mode 100644 index 00000000..90c1b5e1 --- /dev/null +++ b/docs/_posts/2022-03-22-video.md @@ -0,0 +1,16 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.04 Video elements +semantic-components: Include accordion with list of video elements +definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. +rationale: Each file processed with FITS should have unique technical properties to support use and rendering. +data-constraint: Container +repeatability: Repeatable +obligation: Automatic +usage-notes: The list of video elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. +metadata-standard: EBUCore metadata +short-name: EBUCore +maintenance-organization: European Broadcasting Union +website: https://tech.ebu.ch/MetadataEbuCore +--- \ No newline at end of file diff --git a/docs/connect.md b/docs/connect.md index fca1a92b..9a105a58 100644 --- a/docs/connect.md +++ b/docs/connect.md @@ -15,7 +15,7 @@ permalink: /connect

    Join the FITS Slack channel #fits-community-sprint in the code4lib workspace to chat with others in the community.

    -

    Participate in a Community Sprint>

    +

    Participate in a Community Sprint

    Get involved the community's next 2-week sprint (date TBD). Sign up for the FITS Google Group to learn when the next sprint will be.

    diff --git a/docs/guides.md b/docs/guides.md index 17d0adde..8e3f4d6c 100644 --- a/docs/guides.md +++ b/docs/guides.md @@ -23,8 +23,7 @@ permalink: /user-manual ## References {% include_relative guides/command-line-options.md %} -{% include_relative guides/fits-xml.md %} -{% include_relative guides/standard-metadata-schemas.md %} +{% include_relative guides/data-dictionary.md %} {% include_relative guides/fits-configuration-files.md %} {% include_relative guides/tools.md %} diff --git a/docs/guides/data-dictionary.md b/docs/guides/data-dictionary.md new file mode 100644 index 00000000..a681da8b --- /dev/null +++ b/docs/guides/data-dictionary.md @@ -0,0 +1,9 @@ +### Data dictionary + +FITS converts the raw output of each wrapped tool to a structure called FITS XML. [FITS XML schema](http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd) is maintained by Harvard Library. + +
    + +{% include data-dictionary-unit.md %} + +--- \ No newline at end of file diff --git a/docs/guides/fits-config_fits_format_tree_xml.md b/docs/guides/fits-config_fits_format_tree_xml.md new file mode 100644 index 00000000..8c4d91aa --- /dev/null +++ b/docs/guides/fits-config_fits_format_tree_xml.md @@ -0,0 +1 @@ +#### fits_format_tree.xml \ No newline at end of file diff --git a/docs/guides/fits-config_fits_xml.md b/docs/guides/fits-config_fits_xml.md new file mode 100644 index 00000000..031cd925 --- /dev/null +++ b/docs/guides/fits-config_fits_xml.md @@ -0,0 +1 @@ +#### fits.xml \ No newline at end of file diff --git a/docs/guides/fits-config_fits_xml_map_xml.md b/docs/guides/fits-config_fits_xml_map_xml.md new file mode 100644 index 00000000..39adfa70 --- /dev/null +++ b/docs/guides/fits-config_fits_xml_map_xml.md @@ -0,0 +1 @@ +#### fits_xml_map.xml \ No newline at end of file diff --git a/docs/guides/fits-config_format_map_txt.md b/docs/guides/fits-config_format_map_txt.md new file mode 100644 index 00000000..91f86fd5 --- /dev/null +++ b/docs/guides/fits-config_format_map_txt.md @@ -0,0 +1 @@ +#### format_map.txt \ No newline at end of file diff --git a/docs/guides/fits-config_mime_map_txt.md b/docs/guides/fits-config_mime_map_txt.md new file mode 100644 index 00000000..a38a7b0a --- /dev/null +++ b/docs/guides/fits-config_mime_map_txt.md @@ -0,0 +1 @@ +#### mime_map.txt \ No newline at end of file diff --git a/docs/guides/fits-config_mime_to_format_map_txt.md b/docs/guides/fits-config_mime_to_format_map_txt.md new file mode 100644 index 00000000..bb99aeb9 --- /dev/null +++ b/docs/guides/fits-config_mime_to_format_map_txt.md @@ -0,0 +1 @@ +#### mime_to_format_map.txt \ No newline at end of file diff --git a/docs/guides/fits-configuration-files.md b/docs/guides/fits-configuration-files.md index e199e791..4898c269 100644 --- a/docs/guides/fits-configuration-files.md +++ b/docs/guides/fits-configuration-files.md @@ -4,11 +4,11 @@ The FITS configuration files are located in the xml directory. **The FITS XML output is highly affected by how FITS is configured. In particular, the order of tools near the top of the fits.xml configuration file specifies which tools FITS should prefer when they give conflicting information and if FITS should ignore tool output for particular formats. FITS comes pre-configured based on testing different tools with different formats and the default configuration should only be changed with a great deal of care and testing.** -#### fits.xml -#### fits_format_tree.xml -#### fits_xml_map.xml -#### format_map.txt -#### mime_map.txt -#### mime_to_format_map.txt +{% include_relative guides/fits-config_fits_xml.md %} +{% include_relative guides/fits-config_fits_format_tree_xml.md %} +{% include_relative guides/fits-config_fits_xml_map_xml.md %} +{% include_relative guides/fits-config_format_map_txt.md %} +{% include_relative guides/fits-config_mime_map_txt.md %} +{% include_relative guides/fits-config_mime_to_format_map_txt.md %} --- \ No newline at end of file From 01ee61a354fb83a4b214ab1ac3e3149242f7685b Mon Sep 17 00:00:00 2001 From: mferrarini Date: Tue, 22 Mar 2022 17:46:31 -0400 Subject: [PATCH 22/36] config files content now back on same page --- docs/guides/fits-config_fits_format_tree_xml.md | 1 - docs/guides/fits-config_fits_xml.md | 1 - docs/guides/fits-config_fits_xml_map_xml.md | 1 - docs/guides/fits-config_format_map_txt.md | 1 - docs/guides/fits-config_mime_map_txt.md | 1 - docs/guides/fits-config_mime_to_format_map_txt.md | 1 - docs/guides/fits-configuration-files.md | 12 ++++++------ 7 files changed, 6 insertions(+), 12 deletions(-) delete mode 100644 docs/guides/fits-config_fits_format_tree_xml.md delete mode 100644 docs/guides/fits-config_fits_xml.md delete mode 100644 docs/guides/fits-config_fits_xml_map_xml.md delete mode 100644 docs/guides/fits-config_format_map_txt.md delete mode 100644 docs/guides/fits-config_mime_map_txt.md delete mode 100644 docs/guides/fits-config_mime_to_format_map_txt.md diff --git a/docs/guides/fits-config_fits_format_tree_xml.md b/docs/guides/fits-config_fits_format_tree_xml.md deleted file mode 100644 index 8c4d91aa..00000000 --- a/docs/guides/fits-config_fits_format_tree_xml.md +++ /dev/null @@ -1 +0,0 @@ -#### fits_format_tree.xml \ No newline at end of file diff --git a/docs/guides/fits-config_fits_xml.md b/docs/guides/fits-config_fits_xml.md deleted file mode 100644 index 031cd925..00000000 --- a/docs/guides/fits-config_fits_xml.md +++ /dev/null @@ -1 +0,0 @@ -#### fits.xml \ No newline at end of file diff --git a/docs/guides/fits-config_fits_xml_map_xml.md b/docs/guides/fits-config_fits_xml_map_xml.md deleted file mode 100644 index 39adfa70..00000000 --- a/docs/guides/fits-config_fits_xml_map_xml.md +++ /dev/null @@ -1 +0,0 @@ -#### fits_xml_map.xml \ No newline at end of file diff --git a/docs/guides/fits-config_format_map_txt.md b/docs/guides/fits-config_format_map_txt.md deleted file mode 100644 index 91f86fd5..00000000 --- a/docs/guides/fits-config_format_map_txt.md +++ /dev/null @@ -1 +0,0 @@ -#### format_map.txt \ No newline at end of file diff --git a/docs/guides/fits-config_mime_map_txt.md b/docs/guides/fits-config_mime_map_txt.md deleted file mode 100644 index a38a7b0a..00000000 --- a/docs/guides/fits-config_mime_map_txt.md +++ /dev/null @@ -1 +0,0 @@ -#### mime_map.txt \ No newline at end of file diff --git a/docs/guides/fits-config_mime_to_format_map_txt.md b/docs/guides/fits-config_mime_to_format_map_txt.md deleted file mode 100644 index bb99aeb9..00000000 --- a/docs/guides/fits-config_mime_to_format_map_txt.md +++ /dev/null @@ -1 +0,0 @@ -#### mime_to_format_map.txt \ No newline at end of file diff --git a/docs/guides/fits-configuration-files.md b/docs/guides/fits-configuration-files.md index 4898c269..e199e791 100644 --- a/docs/guides/fits-configuration-files.md +++ b/docs/guides/fits-configuration-files.md @@ -4,11 +4,11 @@ The FITS configuration files are located in the xml directory. **The FITS XML output is highly affected by how FITS is configured. In particular, the order of tools near the top of the fits.xml configuration file specifies which tools FITS should prefer when they give conflicting information and if FITS should ignore tool output for particular formats. FITS comes pre-configured based on testing different tools with different formats and the default configuration should only be changed with a great deal of care and testing.** -{% include_relative guides/fits-config_fits_xml.md %} -{% include_relative guides/fits-config_fits_format_tree_xml.md %} -{% include_relative guides/fits-config_fits_xml_map_xml.md %} -{% include_relative guides/fits-config_format_map_txt.md %} -{% include_relative guides/fits-config_mime_map_txt.md %} -{% include_relative guides/fits-config_mime_to_format_map_txt.md %} +#### fits.xml +#### fits_format_tree.xml +#### fits_xml_map.xml +#### format_map.txt +#### mime_map.txt +#### mime_to_format_map.txt --- \ No newline at end of file From 2034f3d02cab24ec9b538ab20a84097523ecf4b2 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 23 Mar 2022 11:58:57 -0400 Subject: [PATCH 23/36] adding config-files content --- docs/_includes/tool.md | 9 ++- docs/guides/data-dictionary.md | 2 - docs/guides/fits-configuration-files.md | 103 ++++++++++++++++++++++-- 3 files changed, 104 insertions(+), 10 deletions(-) diff --git a/docs/_includes/tool.md b/docs/_includes/tool.md index b54f087d..150b596b 100644 --- a/docs/_includes/tool.md +++ b/docs/_includes/tool.md @@ -4,15 +4,22 @@
    +{% if post.more-info-url %} + +#### [{{ post.title }}]({{ post.more-info-url }}) + +{% else %} + #### {{ post.title }} +{% endif %} + | --------- | ----------- | | Maintenance organization | {% if post.maintenance-organization %} {{ post.maintenance-organization }} {% endif %} | | Capabilities | {% if post.capabilities %} {{ post.capabilities }} {% endif %} | | Formats supported | {% if post.formats %} {{ post.formats }} {% endif %} | | Description | {% if post.description %} {{ post.description }} {% endif %} | | Usage notes | {% if post.usage-note %}{{post.usage-note}}{% endif %} | -| More information | {% if post.more-info-url %} [{{ post.more-info-url }}]({{ post.more-info-url }}) {% endif %} |
    diff --git a/docs/guides/data-dictionary.md b/docs/guides/data-dictionary.md index a681da8b..ff41b083 100644 --- a/docs/guides/data-dictionary.md +++ b/docs/guides/data-dictionary.md @@ -2,8 +2,6 @@ FITS converts the raw output of each wrapped tool to a structure called FITS XML. [FITS XML schema](http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd) is maintained by Harvard Library. -
    - {% include data-dictionary-unit.md %} --- \ No newline at end of file diff --git a/docs/guides/fits-configuration-files.md b/docs/guides/fits-configuration-files.md index e199e791..79dae797 100644 --- a/docs/guides/fits-configuration-files.md +++ b/docs/guides/fits-configuration-files.md @@ -1,14 +1,103 @@ ### FITS configuration files -The FITS configuration files are located in the xml directory. +The FITS configuration files are located in the [xml directory](https://github.com/harvard-lts/fits/tree/dev/xml). **The FITS XML output is highly affected by how FITS is configured. In particular, the order of tools near the top of the fits.xml configuration file specifies which tools FITS should prefer when they give conflicting information and if FITS should ignore tool output for particular formats. FITS comes pre-configured based on testing different tools with different formats and the default configuration should only be changed with a great deal of care and testing.** -#### fits.xml -#### fits_format_tree.xml -#### fits_xml_map.xml -#### format_map.txt -#### mime_map.txt -#### mime_to_format_map.txt +#### [fits.xml](https://github.com/harvard-lts/fits/blob/dev/xml/fits.xml) +This is the main configuration file for FITS. The key pieces are described here: + +##### tool element +{:.no_toc} + +Lists all the tools that FITS should know about. The order of these elements determines the preference in favoring one tool over another, for example when there are multiple tools reporting formats or technical metadata for a file. + +The following are attributes of the tool element: +- **class** (required) - specifies the fully qualified name of the Java class that implements the Tool interface +- **exclude-exts** (optional) - specifies by file extension files that the tool should not process. This is useful if you know a tool misidentifies or generates inaccurate metadata for specific types of files +- **include-exts** (optional) - indicates to FITS to use the information reported by the tool for particular file extensions +- **classpath-dirs** (optional) - for Java-based tools when there is a need to provide class isolation via a custom class loader. By convention, any tool-specific JAR files, including any 3rd-party dependencies, should be put into a ```lib/``` directory. Additional directories can be added for configuration files that need to be discovered via the tool’s class loader. These files might go in, for example, ```xml/```. This custom class loader will load classes from the bottom up (rather than the standard Java top down scheme). The value for this attribute is the name of the sub-directory containing any JAR files for this tool. + +##### output element +{:.no_toc} + +Contains elements that control FITS metadata output: +- **data-consolidator** - specifies the class to use for consolidating the tool output. It's possible to use custom logic to control the tool output consolidation processes by creating a class implementing the ToolOutputConsolidator interface. +- **display-tool-output** - whether or not to append the output of the native tool output for each tool to the final consolidated FITS XML output, can be set to either true or false +- **report-conflicts** - whether or not to report when there is conflicting tool information about formats or metadata, can be set to either true or false. If set to true, conflicts will be shown in the final FITS XML output. If set to false, only the output from the most preferred tool (controlled by the ordering of the tool elements) will be displayed. +- **validate-tool-outpu**t - whether or not to validate tool output, can be set to either true or false. Generally this should be set to true. Setting it to false will disable schema validation of the output from each tool. + - NOTE: The local copy provided with FITS is used for validation during the file processing. As each tool has its output converted to the FITS format it is validated using the local schema. This can be disabled by setting `````` in xml/fits.xml to false. +- **internal-output-schema** - the location of the local copy of the XML schema specifying the FITS XML output, used during FITS execution +- **external-output-schema** - the location of the remote XML schema controlling the FITS XML output, written to the output file +- **fits-xml-namespace** - the XML namespace to use in the FITS XML output +- **enable-statistics** - whether or not to output the statistics block containing performance metrics about each tool that processed the file, can be set to either true or false enable-checksum - whether or not to compute the MD5 checksum for the file, can be set to either true or false +- **checksum­-exclusions** - ­file extensions to be excluded in the checksum calculation. + - NOTE: This configuration parameter will only be enforced if the above enable­-checksum is set to true. + + +##### process/maxThreads element +{:.no_toc} + +The maximum number of threads to use + +##### droid_sigfile element +{:.no_toc} + +The signature file to use with the Droid tool. [Get the list of all previously released signature files](https://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm) + + +##### droid_read_limit element +{:.no_toc} + +This allows for limiting the amount of a file (from its beginning) that is to be examined by the DROID tool (in order to increase processing speed). For example, for some types of large video and audio files, only the first 64K bytes need to be examined to extract relevant metadata. The attribute **include-exts** sets the file extension that this limiter should be applied to, and the attribute **read-limit-kb** sets the limit, in kilobytes, of how much of the beginning of the designated file types should be examined. The default behavior (when this element remains commented-out) is for DROID to examine all files in their entirety. + + +#### [fits_format_tree.xml](https://github.com/harvard-lts/fits/blob/dev/xml/fits_format_tree.xml) +Certain formats are a more specific subset of a more general format. The format tree in this file specifies these relationships. Nested formats are more specific versions of the formats they are nested under. FITS uses this to know when to report format conflicts and when it should report a more specific format. + +During output consolidation the format tree is consulted, and any less specific format identities are thrown out. For example, OpenOffice text document formats are ZIP-based. Some tools identify these files as ZIP, and others as ODT. Any tools identifying the file as a ZIP would be discarded according to the rules set by the format tree. + +An example follows using a snippet of the format tree: + +``` + + + + + + +``` + +The above snippet of the format tree should be interpreted as: JPEG 2000 JP2 and JPEG 2000 JPX are more specific forms of the JPEG 2000 format. If one FITS-wrapped tool were to report the format of a file as JPEG 2000 and another reported it as JPEG 2000 JP2, FITS would report the more specific format (JPEG 2000 JP2) and would not report that there was a format conflict (because both tools were technically correct). + + +#### [fits_output.xsd](https://github.com/harvard-lts/fits/blob/dev/xml/fits_output.xsd) +**Not listed on site, but located in xml directory - should we expand on this?** + + +#### [fits_xml_map.xml](https://github.com/harvard-lts/fits/blob/dev/xml/fits_xml_map.xml) +This mapping file is used to normalize the values output by some of the tools that FITS wraps, for example to change Jhove's Greyscale value to Grayscale. It allows substitution of one value for another on a tool by tool, element by element basis. + +For example, if a tool outputs the value "2" as the sampling frequency unit for an image, but you want to use the text string "inches" instead, you could add an entry to fits_xml_map.xml. Mappings are applied automatically when a tool creates its FITS output, prior to output consolidation. You must specify the tool name, version, and element name that you want mapped. Currently all mapping-related needs are handled in the tool's XSLT. + + +#### [format_map.txt](https://github.com/harvard-lts/fits/blob/dev/xml/format_map.txt) +The file is used to normalize format names output by some of the tools that FITS wraps. + + +#### [mime_map.txt](https://github.com/harvard-lts/fits/blob/dev/xml/mime_map.txt) +The file is used to normalize MIME media type values output by some of the tools that FITS wraps. + + +#### [mime_to_format_map.txt](https://github.com/harvard-lts/fits/blob/dev/xml/mime_to_format_map.txt) +Used to map format names to MIME media types for some of the tools that FITS wraps. + + +#### [prettyprint.xslt](https://github.com/harvard-lts/fits/blob/dev/xml/prettyprint.xslt) +**Not listed on site, but located in xml directory - should we expand on this?** + + +#### [xslt_map.xsd](https://github.com/harvard-lts/fits/blob/dev/xml/xslt_map.xsd) +**Not listed on site, but located in xml directory - should we expand on this?** --- \ No newline at end of file From 081e462999c28ad2a8096e30ea525f1ac091a77a Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 23 Mar 2022 14:46:56 -0400 Subject: [PATCH 24/36] data dictionary updates and code styling --- docs/_posts/2022-03-22-audio.md | 24 +++++++++++- docs/_posts/2022-03-22-container.md | 33 +++++++++++++++- docs/_posts/2022-03-22-document.md | 40 +++++++++++++++++++ docs/_posts/2022-03-22-image.md | 2 +- docs/_posts/2022-03-22-metadata.md | 2 +- docs/_posts/2022-03-22-text.md | 23 ++++++++++- docs/_posts/2022-03-22-video.md | 61 ++++++++++++++++++++++++++++- docs/css/main.css | 12 ++++++ docs/guides/data-dictionary.md | 2 + 9 files changed, 190 insertions(+), 9 deletions(-) create mode 100644 docs/_posts/2022-03-22-document.md diff --git a/docs/_posts/2022-03-22-audio.md b/docs/_posts/2022-03-22-audio.md index 4e8ab413..24ad3412 100644 --- a/docs/_posts/2022-03-22-audio.md +++ b/docs/_posts/2022-03-22-audio.md @@ -13,4 +13,26 @@ metadata-standard: AES standard for audio metadata – Audio object structures f short-name: AES Audio Object maintenance-organization: Audio Engineering Society, Inc. (AES) website: http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object ---- \ No newline at end of file +--- + +##### Example + +``` + + + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-container.md b/docs/_posts/2022-03-22-container.md index 22e557b7..991c42e1 100644 --- a/docs/_posts/2022-03-22-container.md +++ b/docs/_posts/2022-03-22-container.md @@ -1,7 +1,7 @@ --- layout: post categories: data-dictionary -semantic-unit: 4.05 Container elements +semantic-unit: 4.06 Container elements semantic-components: N/A definition: This section identifies the standard used to wrap file-specific sections. rationale: The container element can extend established schemas or wrap the output of a characterization tool. @@ -13,4 +13,33 @@ metadata-standard: ContainerMD short-name: ContainerMD maintenance-organization: Bibliothèque Nationale de France website: http://bibnum.bnf.fr/containerMD-v1_1/index.html ---- \ No newline at end of file +--- + +##### Example + +``` + + + 34318329 + deflate + + + + + + + + + + + + + + + + + + + + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-document.md b/docs/_posts/2022-03-22-document.md new file mode 100644 index 00000000..2a619fd8 --- /dev/null +++ b/docs/_posts/2022-03-22-document.md @@ -0,0 +1,40 @@ +--- +layout: post +categories: data-dictionary +semantic-unit: 4.02 Document elements +semantic-components: Include accordion with list of image elements +definition: This section contains technical metadata for document files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. +rationale: Each file processed with FITS should have unique technical properties to support use and rendering. +data-constraint: Container +repeatability: Not repeatable +obligation: Automatic +usage-notes: The list of document elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. +metadata-standard: Document Metadata - document technical metadata for digital preservation +short-name: DocumentMD +maintenance-organization: Florida Virtual Campus and Harvard Library +website: http://www.fcla.edu/dls/md/docmd +--- + +##### Example + +``` + + + 2 + 141 + 805 + Zakuta, Vitaly + 6 + 1 + + + 2 + 141 + 805 + 1 + 6 + + + + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-image.md b/docs/_posts/2022-03-22-image.md index f20ab91e..81671121 100644 --- a/docs/_posts/2022-03-22-image.md +++ b/docs/_posts/2022-03-22-image.md @@ -1,7 +1,7 @@ --- layout: post categories: data-dictionary -semantic-unit: 4.03 Image elements +semantic-unit: 4.04 Image elements semantic-components: Include accordion with list of image elements definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. diff --git a/docs/_posts/2022-03-22-metadata.md b/docs/_posts/2022-03-22-metadata.md index 0f41b3d6..b8595124 100644 --- a/docs/_posts/2022-03-22-metadata.md +++ b/docs/_posts/2022-03-22-metadata.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 4.0 metadata -semantic-components: 4.01 Audio, 4.02 Text, 4.03 Image, 4.04 Video, 4.05 Container +semantic-components: 4.01 Audio, 4.02 Document, 4.03 Text, 4.04 Image, 4.05 Video, 4.06 Container definition: This section contains the format-specific technical metadata after normalization and consolidation of each tool's raw output. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container diff --git a/docs/_posts/2022-03-22-text.md b/docs/_posts/2022-03-22-text.md index ae899dce..ef342955 100644 --- a/docs/_posts/2022-03-22-text.md +++ b/docs/_posts/2022-03-22-text.md @@ -1,7 +1,7 @@ --- layout: post categories: data-dictionary -semantic-unit: 4.02 Text elements +semantic-unit: 4.03 Text elements semantic-components: Include accordion with list of text elements definition: This section contains technical metadata for text files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. @@ -13,4 +13,23 @@ metadata-standard: Technical Metadata for Text short-name: TextMD maintenance-organization: Library of Congress website: http://www.loc.gov/standards/textMD/ ---- \ No newline at end of file +--- + +##### Example + +``` + + + us-ascii + CR + + + + US-ASCII + CR + + + + + +``` \ No newline at end of file diff --git a/docs/_posts/2022-03-22-video.md b/docs/_posts/2022-03-22-video.md index 90c1b5e1..6d18ca00 100644 --- a/docs/_posts/2022-03-22-video.md +++ b/docs/_posts/2022-03-22-video.md @@ -1,7 +1,7 @@ --- layout: post categories: data-dictionary -semantic-unit: 4.04 Video elements +semantic-unit: 4.05 Video elements semantic-components: Include accordion with list of video elements definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. @@ -13,4 +13,61 @@ metadata-standard: EBUCore metadata short-name: EBUCore maintenance-organization: European Broadcasting Union website: https://tech.ebu.ch/MetadataEbuCore ---- \ No newline at end of file +--- + +##### Example + +``` + + + +``` \ No newline at end of file diff --git a/docs/css/main.css b/docs/css/main.css index 299a5db0..c5ea2571 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -163,4 +163,16 @@ a { .news-grid h2 { font-size: 20px; line-height: 30px; +} + +/* styling code boxes */ +code { + font-size: 90%; +} +.highlighter-rouge .highlight { + background: #f5f5f5; + border-left: 3px solid #426ea8; +} +.highlight code { + background: #f5f5f5; } \ No newline at end of file diff --git a/docs/guides/data-dictionary.md b/docs/guides/data-dictionary.md index ff41b083..4fe9517c 100644 --- a/docs/guides/data-dictionary.md +++ b/docs/guides/data-dictionary.md @@ -2,6 +2,8 @@ FITS converts the raw output of each wrapped tool to a structure called FITS XML. [FITS XML schema](http://hul.harvard.edu/ois/xml/xsd/fits/fits_output.xsd) is maintained by Harvard Library. +The FITS Schema also includes additional top-level elements: technicalMetadata, toolOutputType, and statistics. + {% include data-dictionary-unit.md %} --- \ No newline at end of file From 7f4149b140d4717636430b29890bfe428d29cd62 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 23 Mar 2022 15:10:39 -0400 Subject: [PATCH 25/36] updated tool table content --- docs/_posts/2022-03-20-adl-tool.md | 6 +++--- docs/_posts/2022-03-20-apache-tika.md | 6 +++--- docs/_posts/2022-03-20-droid.md | 8 ++++---- docs/_posts/2022-03-20-exifTool.md | 4 ++-- docs/_posts/2022-03-20-ffident.md | 6 +++--- docs/_posts/2022-03-20-file-utility.md | 10 +++++----- docs/_posts/2022-03-20-jhove.md | 4 ++-- docs/_posts/2022-03-20-mediaInfo.md | 4 ++-- docs/_posts/2022-03-20-metadata-extractor.md | 4 ++-- docs/_posts/2022-03-20-ois-audio.md | 6 +++--- docs/_posts/2022-03-20-ois-file.md | 2 +- docs/_posts/2022-03-20-ois-xml.md | 4 ++-- docs/_posts/2022-03-20-vtt.md | 6 +++--- 13 files changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/_posts/2022-03-20-adl-tool.md b/docs/_posts/2022-03-20-adl-tool.md index ba12da73..9d3a0dfd 100644 --- a/docs/_posts/2022-03-20-adl-tool.md +++ b/docs/_posts/2022-03-20-adl-tool.md @@ -3,9 +3,9 @@ layout: post categories: tools title: ADL Tool maintenance-organization: Harvard Library -# capabilities: capabilities +capabilities: Identifies and extracts edit decision lists from audio files. formats: Audio Decision List files -# description: description -# usage-note: usage note +description: The ADL tool acts on ADL files and applies the Audio Engineering Society (AES) standard for transfer and exchange of edit data. +usage-note: Audio Decision List files support interchange of audio files and projects and the ADL Tool extracts this data from audio files. # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-apache-tika.md b/docs/_posts/2022-03-20-apache-tika.md index 20063c2c..39b40831 100644 --- a/docs/_posts/2022-03-20-apache-tika.md +++ b/docs/_posts/2022-03-20-apache-tika.md @@ -4,8 +4,8 @@ categories: tools title: Apache Tika maintenance-organization: Apache capabilities: Identifies file formats -formats: See [https://tika.apache.org/1.19/formats.html](https://tika.apache.org/1.19/formats.html) -# description: description -# usage-note: usage note +formats: See full list of [supported formats](https://tika.apache.org/1.19/formats.html) +description: Tika extracts text and metadata from hundreds of file formats. +usage-note: While Tika can parse hundreds of formats, FITS uses Tika primarily to extract technical metadata from document-type files. more-info-url: http://tika.apache.org/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-droid.md b/docs/_posts/2022-03-20-droid.md index 0d7b1c71..f0a8048a 100644 --- a/docs/_posts/2022-03-20-droid.md +++ b/docs/_posts/2022-03-20-droid.md @@ -3,9 +3,9 @@ layout: post categories: tools title: DROID maintenance-organization: UK National Archives -# capabilities: capabilities -formats: many (> 1,000) - Listed in the DROID signature file -description: DROID is written in Java. The FITS tool wrapper uses the provided API. The output is converted into a simple XML document and then converted to FITS XML using xml/droid/droid_to_fits.xslt. The DROID configuration file and signature file are located in the tools/droid directory. -# usage-note: usage note +capabilities: Profiles a range of file formats and identifies version, age, size, and date of last modification. +formats: Supports over 1,000 formats, which are listed in the DROID signature file +description: The core function of DROID is accurate file format identification, even if the files are missing extensions or if they are in a container file. DROID is written in Java. +usage-note: The FITS tool wrapper uses the provided API. The output is converted into a simple XML document and then converted to FITS XML using xml/droid/droid_to_fits.xslt. The DROID configuration file and signature file are located in the tools/droid directory. more-info-url: https://www.nationalarchives.gov.uk/information-management/manage-information/policy-process/digital-continuity/file-profiling-tool-droid/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-exifTool.md b/docs/_posts/2022-03-20-exifTool.md index 324e2463..6ec34718 100644 --- a/docs/_posts/2022-03-20-exifTool.md +++ b/docs/_posts/2022-03-20-exifTool.md @@ -5,7 +5,7 @@ title: ExifTool maintenance-organization: Phil Harvey capabilities: Identifies and extracts technical metadata. formats: jpg,tiff,jp2,gif,bmp,png,psd,dng,wav,mp3,mp4,m4a,aiff,rm,ogg,flac,xml,html,pdf,doc -description: Exiftool is written in Perl. A windows executable is also provided. The Exiftool tool wrapper detects the operating system type and calls the appropriate version of the tool. The tab-delimited output is captured, converted to a simple XML structure, and then converted to FITS XML using xslt. xml/exiftool/exiftool_xslt_map.xml is used to determine which XSLT to apply for the given identified format. -# usage-note: usage note +description: Exiftool is written in Perl. A windows executable is also provided. The Exiftool tool wrapper detects the operating system type and calls the appropriate version of the tool. +usage-note: The tab-delimited output is captured, converted to a simple XML structure, and then converted to FITS XML using xslt. xml/exiftool/exiftool_xslt_map.xml is used to determine which XSLT to apply for the given identified format. more-info-url: https://exiftool.org/ --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ffident.md b/docs/_posts/2022-03-20-ffident.md index 88477012..ee95b411 100644 --- a/docs/_posts/2022-03-20-ffident.md +++ b/docs/_posts/2022-03-20-ffident.md @@ -1,11 +1,11 @@ --- layout: post categories: tools -title: ffident +title: ffident ([archived site](http://web.archive.org/web/20061106114156/http://schmidt.devlib.org/ffident/index.html)) maintenance-organization: no longer maintained capabilities: Identifies file formats. formats: Listed in the configuration file tools/ffident/formats.txt -description: FFIdent is written in Java. The FITS tool wrapper uses the provided API. Output is converted into a simple XML document and then converted to FITS XML using xml/ffident/ffident_to_fits.xslt. -usage-note: archived site +description: FFIdent is written in Java. +usage-note: The FITS tool wrapper uses the provided API. Output is converted into a simple XML document and then converted to FITS XML using xml/ffident/ffident_to_fits.xslt. # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-file-utility.md b/docs/_posts/2022-03-20-file-utility.md index 47725298..5b5ce33b 100644 --- a/docs/_posts/2022-03-20-file-utility.md +++ b/docs/_posts/2022-03-20-file-utility.md @@ -1,11 +1,11 @@ --- layout: post categories: tools -title: File utility (windows) -# maintenance-organization: maintenance organization +title: File utility ([windows port](http://gnuwin32.sourceforge.net/)) +maintenance-organization: GnuWin project capabilities: Identifies files. formats: many (> 1,000) -description: File Utility is usually bundled with Linux, UNIX and OS X. The GnuWin32? port is provided for use on Windows. Due to variations in versions this may cause different output when run on different platforms. File Utility is called in its default mode (no arguments), and also with -i to determine the MIME type. The output is converted into a simple XML document and then converted to FITS XML using xml/fileutility/fileutility_to_fits.xslt -usage-note: windows port - [http://gnuwin32.sourceforge.net/](http://gnuwin32.sourceforge.net/) -more-info-url: http://darwinsys.com/file/ +description: File Utility is a package that is usually bundled with Linux, UNIX and OS X. The GnuWin32? port is provided for use on Windows. Due to variations in versions this may cause different output when run on different platforms. File Utility is called in its default mode (no arguments), and also with -i to determine the MIME type. +usage-note: The output is converted into a simple XML document and then converted to FITS XML using xml/fileutility/fileutility_to_fits.xslt +# more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-jhove.md b/docs/_posts/2022-03-20-jhove.md index cecc2366..80342fe4 100644 --- a/docs/_posts/2022-03-20-jhove.md +++ b/docs/_posts/2022-03-20-jhove.md @@ -5,7 +5,7 @@ title: Jhove maintenance-organization: Open Preservation Foundation capabilities: Identifies, extracts technical metadata, and validates files. formats: jpg, tiff, jp2, gif, wave, aiff, xml, html, ascii, utf-8, pdf -description: JHOVE is written in Java. The FITS tool wrapper uses the provided API. The JHOVE XML output is converted to FITS XML using XSLT. xml/jhove/jhove_xslt_map.xml is used to determine which XSLT to apply for the given identified format. -usage-note: For JP2 files the JHOVE output element Transformation indicates whether the compression is lossy or lossless. The transformation values are described in Table A-20 of the JPEG2000 part 1 specification. A value of 0 maps to the 9-7 irreversible (lossy) filter. A value of 1 maps to 5-3 reversible (lossless) filter. This JHOVE element is used by FITS when it outputs the compressionScheme in the image metadata, writing it as JPEG 2000 Lossy or JPEG 2000 Lossless.

    JHOVE does not validate the codestream but it checks the file structure. +description: JHOVE is a software framework for format identification, validation, and characterization of digital objects. JHOVE is written in Java. JHOVE does not validate the codestream but it checks the file structure. +usage-note: The FITS tool wrapper uses the provided API. The JHOVE XML output is converted to FITS XML using XSLT. xml/jhove/jhove_xslt_map.xml is used to determine which XSLT to apply for the given identified format.

    Note - For JP2 files the JHOVE output element Transformation indicates whether the compression is lossy or lossless. The transformation values are described in Table A-20 of the JPEG2000 part 1 specification. A value of 0 maps to the 9-7 irreversible (lossy) filter. A value of 1 maps to 5-3 reversible (lossless) filter. This JHOVE element is used by FITS when it outputs the compressionScheme in the image metadata, writing it as JPEG 2000 Lossy or JPEG 2000 Lossless. more-info-url: https://github.com/openpreserve/jhove --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-mediaInfo.md b/docs/_posts/2022-03-20-mediaInfo.md index 87b78e6f..c5b94ab0 100644 --- a/docs/_posts/2022-03-20-mediaInfo.md +++ b/docs/_posts/2022-03-20-mediaInfo.md @@ -4,8 +4,8 @@ categories: tools title: MediaInfo maintenance-organization: MediaArea.net capabilities: Identifies and extracts technical metadata for video files. -formats: FITS only supports the following video formats and wrappers out of the box -- avi, mov, mpg, mpeg, mkv, mp4, mxf, ogv, mj2, divx, dv, m4v, m2v, ism. +formats: Although MediaInfo supports many video formats, FITS will only support the following video formats and wrappers out of the box - avi, mov, mpg, mpeg, mkv, mp4, mxf, ogv, mj2, divx, dv, m4v, m2v, ism. description: The MediaInfo API is written in C++ and is called via Java by using the [JNA library](https://github.com/java-native-access/jna). -# usage-note: usage note +usage-note: The FITS tool wrapper uses the MediaInfo API. The MediaInfo XML output is converted to FITS XML using XSLT. more-info-url: https://mediaarea.net/en/MediaInfo --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-metadata-extractor.md b/docs/_posts/2022-03-20-metadata-extractor.md index f7c845fc..9d79a168 100644 --- a/docs/_posts/2022-03-20-metadata-extractor.md +++ b/docs/_posts/2022-03-20-metadata-extractor.md @@ -5,7 +5,7 @@ title: Metadata Extractor Tool maintenance-organization: National Library of New Zealand capabilities: Identifies and extracts technical metadata. formats: jpg, tiff, gif, bmp, wav, mp3, xml, html, pdf, doc, wordperfect, msworks, odt -description: The FITS NLNZ tool wrapper uses the provided Java API. The NLNZ native XML output is converted to FITS XML using XSLT. xml/nlnz/fits/nlnz_xslt_map.xml is used to determine which XSLT to apply to the given identified format. -# usage-note: usage note +description: The FITS NLNZ tool wrapper uses the provided Java API. +usage-note: The NLNZ native XML output is converted to FITS XML using XSLT. xml/nlnz/fits/nlnz_xslt_map.xml is used to determine which XSLT to apply to the given identified format. more-info-url: https://github.com/DIA-NZ/Metadata-Extraction-Tool --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-audio.md b/docs/_posts/2022-03-20-ois-audio.md index 3e9be33c..040cd974 100644 --- a/docs/_posts/2022-03-20-ois-audio.md +++ b/docs/_posts/2022-03-20-ois-audio.md @@ -3,9 +3,9 @@ layout: post categories: tools title: OIS Audio Information maintenance-organization: Harvard Library -# capabilities: capabilities +capabilities: Identifies and extracts technical metadata formats: audio -# description: description -# usage-note: usage note +description: The OIS Audio Information tool identifies audio formats and applies AES metadata standards to extracted technical metadata. +usage-note: OIS Audio Information creates FITS XML without further normalization. # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-file.md b/docs/_posts/2022-03-20-ois-file.md index 8dd6672f..1d31ce6f 100644 --- a/docs/_posts/2022-03-20-ois-file.md +++ b/docs/_posts/2022-03-20-ois-file.md @@ -6,6 +6,6 @@ maintenance-organization: Harvard Library capabilities: Extracts technical metadata. formats: any description: FileInfo creates FITS XML without further normalization. It determines basic file information like file name, size, file system last modified date, and md5 checksums. It uses the fast md5 jar from [http://www.twmacinta.com/myjava/fast_md5.php](http://www.twmacinta.com/myjava/fast_md5.php). -# usage-note: usage note +usage-note: OIS FileInfo creates FITS XML without further normalization. # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-ois-xml.md b/docs/_posts/2022-03-20-ois-xml.md index de53a3ea..268dfef8 100644 --- a/docs/_posts/2022-03-20-ois-xml.md +++ b/docs/_posts/2022-03-20-ois-xml.md @@ -5,7 +5,7 @@ title: OIS XML Information maintenance-organization: Harvard Library capabilities: Identifies and extracts technical metadata. formats: XML -description: XmlMetadata creates FITS XML without further normalization. Its sole purpose is to identify XML and parse out the default namespace and schema location. This is used for FITS text metadata. -# usage-note: usage note +description: The OIS XML Information tool identifies XML and parses out the default namespace and schema location. +usage-note: XmlMetadata creates FITS XML without further normalization. Used for FITS text metadata. # more-info-url: more information at website --- \ No newline at end of file diff --git a/docs/_posts/2022-03-20-vtt.md b/docs/_posts/2022-03-20-vtt.md index bb407b9e..a527f127 100644 --- a/docs/_posts/2022-03-20-vtt.md +++ b/docs/_posts/2022-03-20-vtt.md @@ -3,9 +3,9 @@ layout: post categories: tools title: VTT Tool maintenance-organization: Harvard Library -capabilities: Identifies and extracts technical metadata. +capabilities: Extracts and validates VTT video caption files formats: video -description: VTT Tool creates FITS XML without further normalization. This is used for FITS text metadata. -# usage-note: usage note +description: VTT Tool is written in Java. +usage-note: VTT Tool creates FITS XML without further normalization. # more-info-url: more information at website --- \ No newline at end of file From 87e22fdc0c2b1cdb4800bd4bc197098600c7eb9b Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 23 Mar 2022 16:20:14 -0400 Subject: [PATCH 26/36] table style updates --- docs/_includes/data-dictionary-unit.md | 22 +++++++++++----------- docs/_includes/tool.md | 10 +++++----- docs/_posts/2022-03-22-fileInfo.md | 2 +- docs/_posts/2022-03-22-fileStatus.md | 2 +- docs/_posts/2022-03-22-identification.md | 2 +- docs/_posts/2022-03-22-metadata.md | 2 +- docs/css/main.css | 1 + 7 files changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/_includes/data-dictionary-unit.md b/docs/_includes/data-dictionary-unit.md index 42f17691..310bc265 100644 --- a/docs/_includes/data-dictionary-unit.md +++ b/docs/_includes/data-dictionary-unit.md @@ -7,17 +7,17 @@ #### {{ post.semantic-unit }} | --------- | ----------- | -| Semantic unit | {% if post.semantic-unit %} {{ post.semantic-unit }} {% endif %} | -| Semantic components | {% if post.semantic-components %} {{ post.semantic-components }} {% endif %} | -| Definition | {% if post.definition %} {{ post.definition }} {% endif %} | -| Rationale | {% if post.rationale %} {{ post.rationale }} {% endif %} | -| Data constraint | {% if post.data-constraint %} {{ post.data-constraint }} {% endif %} | -| Obligation | {% if post.obligation %} {{ post.obligation }} {% endif %} | -| Usage notes | {% if post.usage-notes %}{{ post.usage-notes }}{% endif %} | -{% if post.metadata-standard %}| Metadata standard | {{ post.metadata-standard }} | -| Short name | {{ post.short-name }} | -| Maintenance organization | {{ post.maintenance-organization }} | -| Website | [{{ post.website }}]({{ post.website }}) |{% endif %} +| **Semantic unit** | {% if post.semantic-unit %} {{ post.semantic-unit }} {% endif %} | +| **Semantic components** | {% if post.semantic-components %} {{ post.semantic-components }} {% endif %} | +| **Definition** | {% if post.definition %} {{ post.definition }} {% endif %} | +| **Rationale** | {% if post.rationale %} {{ post.rationale }} {% endif %} | +| **Data constraint** | {% if post.data-constraint %} {{ post.data-constraint }} {% endif %} | +| **Obligation** | {% if post.obligation %} {{ post.obligation }} {% endif %} | +| **Usage notes** | {% if post.usage-notes %}{{ post.usage-notes }}{% endif %} | +{% if post.metadata-standard %}| **Metadata standard** | {{ post.metadata-standard }} | +| **Short name** | {{ post.short-name }} | +| **Maintenance organization** | {{ post.maintenance-organization }} | +| **Website** | [{{ post.website }}]({{ post.website }}) |{% endif %} {% if post.content %}{{ post.content }}{% endif %} diff --git a/docs/_includes/tool.md b/docs/_includes/tool.md index 150b596b..f0a068f6 100644 --- a/docs/_includes/tool.md +++ b/docs/_includes/tool.md @@ -15,11 +15,11 @@ {% endif %} | --------- | ----------- | -| Maintenance organization | {% if post.maintenance-organization %} {{ post.maintenance-organization }} {% endif %} | -| Capabilities | {% if post.capabilities %} {{ post.capabilities }} {% endif %} | -| Formats supported | {% if post.formats %} {{ post.formats }} {% endif %} | -| Description | {% if post.description %} {{ post.description }} {% endif %} | -| Usage notes | {% if post.usage-note %}{{post.usage-note}}{% endif %} | +| **Maintenance organization** | {% if post.maintenance-organization %} {{ post.maintenance-organization }} {% endif %} | +| **Capabilities** | {% if post.capabilities %} {{ post.capabilities }} {% endif %} | +| **Formats supported** | {% if post.formats %} {{ post.formats }} {% endif %} | +| **Description** | {% if post.description %} {{ post.description }} {% endif %} | +| **Usage notes** | {% if post.usage-note %}{{post.usage-note}}{% endif %} |
    diff --git a/docs/_posts/2022-03-22-fileInfo.md b/docs/_posts/2022-03-22-fileInfo.md index 6360b4b3..257b0e62 100644 --- a/docs/_posts/2022-03-22-fileInfo.md +++ b/docs/_posts/2022-03-22-fileInfo.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 2.0 fileInfo -semantic-components: 2.01 filepath; 2.02 filename; 2.03 size; 2.04 md5checksum; 2.05 lastmodified; 2.06 fslastmodified; 2.07 created; 2.08 creatingApplicationName; 2.09 creatingApplicationversion; 2.10 inhibitorType; 2.11 rightsBasis 2.12 copyrightBasis; 2.13 copyrightNote; 2.14 creatingos +semantic-components: 2.01 filepath
    2.02 filename
    2.03 size
    2.04 md5checksum
    2.05 lastmodified
    2.06 fslastmodified
    2.07 created
    2.08 creatingApplicationName
    2.09 creatingApplicationversion
    2.10 inhibitorType
    2.11 rightsBasis 2.12 copyrightBasis
    2.13 copyrightNote
    2.14 creatingos definition: This section contains basic technical metadata not specific to any format rationale: Each file processed with FITS should have unique file properties to support use and rendering. data-constraint: Container diff --git a/docs/_posts/2022-03-22-fileStatus.md b/docs/_posts/2022-03-22-fileStatus.md index eb8a2ae7..b5343ea0 100644 --- a/docs/_posts/2022-03-22-fileStatus.md +++ b/docs/_posts/2022-03-22-fileStatus.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 3.0 fileStatus -semantic-components: 3.01 messageElements; 3.01.1 well-formed; 3.01.2 valid; 3.01.3 message +semantic-components: 3.01 messageElements
    3.01.1 well-formed
    3.01.2 valid
    3.01.3 message definition: This section contains validity information if the tools are able to identify a valid format. rationale: Each file processed with FITS should have a declaration of validity. data-constraint: Container diff --git a/docs/_posts/2022-03-22-identification.md b/docs/_posts/2022-03-22-identification.md index 920ab18f..85d61efa 100644 --- a/docs/_posts/2022-03-22-identification.md +++ b/docs/_posts/2022-03-22-identification.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 1.0 identification -semantic-components: 1.1 identity; 1.2 tool; 1.3 version; 1.4 externalIdentifier +semantic-components: 1.1 identity
    1.2 tool
    1.3 version
    1.4 externalIdentifier definition: This section contains the file format in one or more identity blocks. rationale: Each file processed with FITS should have a unique format to support use and rendering. data-constraint: Container diff --git a/docs/_posts/2022-03-22-metadata.md b/docs/_posts/2022-03-22-metadata.md index b8595124..780bc3d3 100644 --- a/docs/_posts/2022-03-22-metadata.md +++ b/docs/_posts/2022-03-22-metadata.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 4.0 metadata -semantic-components: 4.01 Audio, 4.02 Document, 4.03 Text, 4.04 Image, 4.05 Video, 4.06 Container +semantic-components: 4.01 Audio
    4.02 Document
    4.03 Text
    4.04 Image
    4.05 Video
    4.06 Container definition: This section contains the format-specific technical metadata after normalization and consolidation of each tool's raw output. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container diff --git a/docs/css/main.css b/docs/css/main.css index c5ea2571..f73efbfe 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -172,6 +172,7 @@ code { .highlighter-rouge .highlight { background: #f5f5f5; border-left: 3px solid #426ea8; + border-radius: 0; } .highlight code { background: #f5f5f5; From b669752575d3fe324f98b6ed58571204f35b7012 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Wed, 23 Mar 2022 16:25:17 -0400 Subject: [PATCH 27/36] Update 2022-03-22-fileInfo.md --- docs/_posts/2022-03-22-fileInfo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_posts/2022-03-22-fileInfo.md b/docs/_posts/2022-03-22-fileInfo.md index 257b0e62..4953247d 100644 --- a/docs/_posts/2022-03-22-fileInfo.md +++ b/docs/_posts/2022-03-22-fileInfo.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 2.0 fileInfo -semantic-components: 2.01 filepath
    2.02 filename
    2.03 size
    2.04 md5checksum
    2.05 lastmodified
    2.06 fslastmodified
    2.07 created
    2.08 creatingApplicationName
    2.09 creatingApplicationversion
    2.10 inhibitorType
    2.11 rightsBasis 2.12 copyrightBasis
    2.13 copyrightNote
    2.14 creatingos +semantic-components: 2.01 filepath
    2.02 filename
    2.03 size
    2.04 md5checksum
    2.05 lastmodified
    2.06 fslastmodified
    2.07 created
    2.08 creatingApplicationName
    2.09 creatingApplicationversion
    2.10 inhibitorType
    2.11 rightsBasis
    2.12 copyrightBasis
    2.13 copyrightNote
    2.14 creatingos definition: This section contains basic technical metadata not specific to any format rationale: Each file processed with FITS should have unique file properties to support use and rendering. data-constraint: Container From fb645d4d0b6e043187a46fb45be2544fbd9b2647 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Fri, 25 Mar 2022 11:35:34 -0400 Subject: [PATCH 28/36] adding metadata semantic components dropdowns + styles --- docs/_posts/2022-03-20-exifTool.md | 2 +- docs/_posts/2022-03-20-ffident.md | 2 +- docs/_posts/2022-03-22-audio.md | 70 +++++- docs/_posts/2022-03-22-document.md | 34 ++- docs/_posts/2022-03-22-fileInfo.md | 4 +- docs/_posts/2022-03-22-fileStatus.md | 2 +- docs/_posts/2022-03-22-identification.md | 2 +- docs/_posts/2022-03-22-image.md | 299 ++++++++++++++++++++++- docs/_posts/2022-03-22-metadata.md | 2 +- docs/_posts/2022-03-22-text.md | 24 +- docs/_posts/2022-03-22-video.md | 178 +++++++++++++- docs/css/main.css | 81 +++++- 12 files changed, 682 insertions(+), 18 deletions(-) diff --git a/docs/_posts/2022-03-20-exifTool.md b/docs/_posts/2022-03-20-exifTool.md index 6ec34718..c1b3f501 100644 --- a/docs/_posts/2022-03-20-exifTool.md +++ b/docs/_posts/2022-03-20-exifTool.md @@ -4,7 +4,7 @@ categories: tools title: ExifTool maintenance-organization: Phil Harvey capabilities: Identifies and extracts technical metadata. -formats: jpg,tiff,jp2,gif,bmp,png,psd,dng,wav,mp3,mp4,m4a,aiff,rm,ogg,flac,xml,html,pdf,doc +formats: jpg, tiff, jp2, gif, bmp, png, psd, dng, wav, mp3, mp4, m4a, aiff, rm, ogg, flac, xml, html, pdf, doc description: Exiftool is written in Perl. A windows executable is also provided. The Exiftool tool wrapper detects the operating system type and calls the appropriate version of the tool. usage-note: The tab-delimited output is captured, converted to a simple XML structure, and then converted to FITS XML using xslt. xml/exiftool/exiftool_xslt_map.xml is used to determine which XSLT to apply for the given identified format. more-info-url: https://exiftool.org/ diff --git a/docs/_posts/2022-03-20-ffident.md b/docs/_posts/2022-03-20-ffident.md index ee95b411..c9f1bbf8 100644 --- a/docs/_posts/2022-03-20-ffident.md +++ b/docs/_posts/2022-03-20-ffident.md @@ -4,7 +4,7 @@ categories: tools title: ffident ([archived site](http://web.archive.org/web/20061106114156/http://schmidt.devlib.org/ffident/index.html)) maintenance-organization: no longer maintained capabilities: Identifies file formats. -formats: Listed in the configuration file tools/ffident/formats.txt +formats: Listed in the configuration file [tools/ffident/formats.txt](https://github.com/harvard-lts/fits/blob/dev/tools/ffident/formats.txt) description: FFIdent is written in Java. usage-note: The FITS tool wrapper uses the provided API. Output is converted into a simple XML document and then converted to FITS XML using xml/ffident/ffident_to_fits.xslt. # more-info-url: more information at website diff --git a/docs/_posts/2022-03-22-audio.md b/docs/_posts/2022-03-22-audio.md index 24ad3412..c57ad85f 100644 --- a/docs/_posts/2022-03-22-audio.md +++ b/docs/_posts/2022-03-22-audio.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 4.01 Audio elements -semantic-components: Include accordion with list of audio elements +semantic-components: See [dropdown](#semantic-audio) below table for list of components definition: This section contains technical metadata for audio files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container @@ -15,6 +15,74 @@ maintenance-organization: Audio Engineering Society, Inc. (AES) website: http://www.aes.org/standards/blog/2011/9/aes57-2011-metadata-audio-object --- +
    +4.01 Audio semantic components + +4.01.01 +: audioDataEncoding + +4.01.02 +: avgBitRate + +4.01.03 +: avgPacketSize + +4.01.04 +: bitDepth + +4.01.05 +: bitRate + +4.01.06 +: blockAlign + +4.01.07 +: blockSizeMax + +4.01.08 +: blockSizeMin + +4.01.09 +: byteOrder + +4.01.10 +: channels + +4.01.11 +: duration + +4.01.12 +: maxBitRate + +4.01.13 +: maxPacketSize + +4.01.14 +: numPackets + +4.01.15 +: numSamples + +4.01.16 +: offset + +4.01.17 +: sampleRate + +4.01.18 +: software + +4.01.19 +: soundField + +4.01.20 +: time + +4.01.21 +: wordSize + +
    + ##### Example ``` diff --git a/docs/_posts/2022-03-22-document.md b/docs/_posts/2022-03-22-document.md index 2a619fd8..757a35c1 100644 --- a/docs/_posts/2022-03-22-document.md +++ b/docs/_posts/2022-03-22-document.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 4.02 Document elements -semantic-components: Include accordion with list of image elements +semantic-components: See [dropdown](#semantic-document) below table for list of components definition: This section contains technical metadata for document files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container @@ -15,6 +15,38 @@ maintenance-organization: Florida Virtual Campus and Harvard Library website: http://www.fcla.edu/dls/md/docmd --- +
    +4.02 Document semantic components + +4.02.01 +: author + +4.02.02 +: hasAnnotations + +4.02.03 +: hasOutline + +4.02.04 +: isProtected + +4.02.05 +: isRightsManaged + +4.02.06 +: isTagged + +4.02.07 +: language + +4.02.08 +: pageCount + +4.02.09 +: title + +
    + ##### Example ``` diff --git a/docs/_posts/2022-03-22-fileInfo.md b/docs/_posts/2022-03-22-fileInfo.md index 4953247d..f4396f6e 100644 --- a/docs/_posts/2022-03-22-fileInfo.md +++ b/docs/_posts/2022-03-22-fileInfo.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 2.0 fileInfo -semantic-components: 2.01 filepath
    2.02 filename
    2.03 size
    2.04 md5checksum
    2.05 lastmodified
    2.06 fslastmodified
    2.07 created
    2.08 creatingApplicationName
    2.09 creatingApplicationversion
    2.10 inhibitorType
    2.11 rightsBasis
    2.12 copyrightBasis
    2.13 copyrightNote
    2.14 creatingos +semantic-components: 2.01filepath
    2.02filename
    2.03size
    2.04md5checksum
    2.05lastmodified
    2.06fslastmodified
    2.07created
    2.08creatingApplicationName
    2.09creatingApplicationversion
    2.10inhibitorType
    2.11rightsBasis
    2.12copyrightBasis
    2.13copyrightNote
    2.14creatingos definition: This section contains basic technical metadata not specific to any format rationale: Each file processed with FITS should have unique file properties to support use and rendering. data-constraint: Container @@ -11,6 +11,8 @@ obligation: Automatic usage-notes: Each of the above elements will carry toolname and toolversion attributes to record the name of the tool that is the source of the information. In most cases there will also be a status attribute value equal to SINGLE_RESULT which means that there wasn't any conflicting information output by a tool. In some cases, for example if tools reported different file creation dates there will be a status value of CONFLICT. --- + + ##### Example ``` diff --git a/docs/_posts/2022-03-22-fileStatus.md b/docs/_posts/2022-03-22-fileStatus.md index b5343ea0..33dfc621 100644 --- a/docs/_posts/2022-03-22-fileStatus.md +++ b/docs/_posts/2022-03-22-fileStatus.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 3.0 fileStatus -semantic-components: 3.01 messageElements
    3.01.1 well-formed
    3.01.2 valid
    3.01.3 message +semantic-components: 3.01messageElements
    3.01.1well-formed
    3.01.2valid
    3.01.3message definition: This section contains validity information if the tools are able to identify a valid format. rationale: Each file processed with FITS should have a declaration of validity. data-constraint: Container diff --git a/docs/_posts/2022-03-22-identification.md b/docs/_posts/2022-03-22-identification.md index 85d61efa..4c480f21 100644 --- a/docs/_posts/2022-03-22-identification.md +++ b/docs/_posts/2022-03-22-identification.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 1.0 identification -semantic-components: 1.1 identity
    1.2 tool
    1.3 version
    1.4 externalIdentifier +semantic-components: 1.1identity
    1.2tool
    1.3version
    1.4externalIdentifier definition: This section contains the file format in one or more identity blocks. rationale: Each file processed with FITS should have a unique format to support use and rendering. data-constraint: Container diff --git a/docs/_posts/2022-03-22-image.md b/docs/_posts/2022-03-22-image.md index 81671121..9e666cda 100644 --- a/docs/_posts/2022-03-22-image.md +++ b/docs/_posts/2022-03-22-image.md @@ -1,8 +1,8 @@ --- layout: post categories: data-dictionary -semantic-unit: 4.04 Image elements -semantic-components: Include accordion with list of image elements +semantic-unit: 4.03 Image elements +semantic-components: See [dropdown](#semantic-image) below table for list of components definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container @@ -13,4 +13,297 @@ metadata-standard: NISO Metadata for Images in XML Schema short-name: MIX maintenance-organization: Library of Congress (for NISO) website: http://www.loc.gov/standards/mix/ ---- \ No newline at end of file +--- + +
    +4.03 Image semantic components + +4.03.01 +: apertureValue + +4.03.02 +: bitsPerSample + +4.03.03 +: brightnessValue + +4.03.04 +: byteOrder + +4.03.05 +: captureDevice + +4.03.06 +: cfaPattern + +4.03.07 +: cfaPattern2 + +4.03.08 +: colorMap + +4.03.09 +: colorSpace + +4.03.10 +: compressionScheme + +4.03.11 +: digitalCameraManufacturer + +4.03.12 +: digitalCameraModelName + +4.03.13 +: digitalCameraSerialNo + +4.03.14 +: exifVersion + +4.03.15 +: exposureBiasValue + +4.03.16 +: exposureIndex + +4.03.17 +: exposureProgram + +4.03.18 +: exposureTime + +4.03.19 +: extraSamples + +4.03.20 +: flash + +4.03.21 +: flashEnergy + +4.03.22 +: fNumber + +4.03.23 +: focalLength + +4.03.24 +: gpsAltitudeRef + +4.03.25 +: gpsAltitude + +4.03.26 +: gpsAreaInformation + +4.03.27 +: gpsDateStamp + +4.03.28 +: gpsDestBearing + +4.03.29 +: gpsDestBearingRef + +4.03.30 +: gpsDestDistance + +4.03.31 +: gpsDestDistanceRef + +4.03.32 +: gpsDestLatitude + +4.03.33 +: gpsDestLatitudeRef + +4.03.34 +: gpsDestLongitude + +4.03.35 +: gpsDestLongitudeRef + +4.03.36 +: gpsDifferential + +4.03.37 +: gpsDOP + +4.03.38 +: gpsImgDirection + +4.03.39 +: gpsImgDirectionRef + +4.03.40 +: gpsLatitude + +4.03.41 +: gpsLatitudeRef + +4.03.42 +: gpsLongitude + +4.03.43 +: gpsLongitudeRef + +4.03.44 +: gpsMapDatum + +4.03.45 +: gpsMeasureMode + +4.03.46 +: gpsProcessingMethod + +4.03.47 +: gpsSatellites + +4.03.48 +: gpsSpeed + +4.03.49 +: gpsSpeedRef + +4.03.50 +: gpsStatus + +4.03.51 +: gpsTimeStamp + +4.03.52 +: gpsTrack + +4.03.53 +: gpsTrackRef + +4.03.54 +: gpsVersionID + +4.03.55 +: grayResponseUnit + +4.03.56 +: iccProfileName + +4.03.57 +: iccProfileVersion + +4.03.58 +: imageHeight + +4.03.59 +: imageProducer + +4.03.60 +: imageWidth + +4.03.61 +: isoSpeedRating + +4.03.62 +: lightSource + +4.03.63 +: maxApertureValue + +4.03.64 +: meteringMode + +4.03.65 +: oECF + +4.03.66 +: orientation + +4.03.67 +: primaryChromaticitiesBlueX + +4.03.68 +: primaryChromaticitiesBlueY + +4.03.69 +: primaryChromaticitiesGreenX + +4.03.70 +: primaryChromaticitiesGreenY + +4.03.71 +: primaryChromaticitiesRedX + +4.03.72 +: primaryChromaticitiesRedY + +4.03.73 +: qualityLayers + +4.03.74 +: referenceBlackWhite + +4.03.75 +: resolutionLevels + +4.03.76 +: samplesPerPixel + +4.03.77 +: samplingFrequencyUnit + +4.03.78 +: scannerManufacturer + +4.03.79 +: scannerModelName + +4.03.80 +: scannerModelNumber + +4.03.81 +: scannerModelSerialNo + +4.03.82 +: scanningSoftwareName + +4.03.83 +: scanningSoftwareVersionNo + +4.03.84 +: sensingMethod + +4.03.85 +: shutterSpeedValue + +4.03.86 +: spectralSensitivity + +4.03.87 +: subjectDistance + +4.03.88 +: tileHeight + +4.03.89 +: tileWidth + +4.03.90 +: whitePointXValue + +4.03.91 +: whitePointYValue + +4.03.92 +: xSamplingFrequency + +4.03.93 +: ySamplingFrequency + +4.03.94 +: YCbCrCoefficients + +4.03.95 +: YCbCrPositioning + +4.03.96 +: YCbCrSubSampling + +
    \ No newline at end of file diff --git a/docs/_posts/2022-03-22-metadata.md b/docs/_posts/2022-03-22-metadata.md index 780bc3d3..d8f5e09f 100644 --- a/docs/_posts/2022-03-22-metadata.md +++ b/docs/_posts/2022-03-22-metadata.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 4.0 metadata -semantic-components: 4.01 Audio
    4.02 Document
    4.03 Text
    4.04 Image
    4.05 Video
    4.06 Container +semantic-components: 4.01Audio
    4.02Document
    4.03Image
    4.04Text
    4.05Video
    4.06Container definition: This section contains the format-specific technical metadata after normalization and consolidation of each tool's raw output. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container diff --git a/docs/_posts/2022-03-22-text.md b/docs/_posts/2022-03-22-text.md index ef342955..2a79e2ed 100644 --- a/docs/_posts/2022-03-22-text.md +++ b/docs/_posts/2022-03-22-text.md @@ -1,8 +1,8 @@ --- layout: post categories: data-dictionary -semantic-unit: 4.03 Text elements -semantic-components: Include accordion with list of text elements +semantic-unit: 4.04 Text elements +semantic-components: See [dropdown](#semantic-text) below table for list of components definition: This section contains technical metadata for text files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container @@ -15,6 +15,26 @@ maintenance-organization: Library of Congress website: http://www.loc.gov/standards/textMD/ --- +
    +4.04 Text semantic components + +4.04.01 +: charset + +4.04.02 +: linebreak + +4.04.03 +: markupBasis + +4.04.04 +: markupBasisVersion + +4.04.05 +: markupLanguage + +
    + ##### Example ``` diff --git a/docs/_posts/2022-03-22-video.md b/docs/_posts/2022-03-22-video.md index 6d18ca00..56a7c026 100644 --- a/docs/_posts/2022-03-22-video.md +++ b/docs/_posts/2022-03-22-video.md @@ -2,7 +2,7 @@ layout: post categories: data-dictionary semantic-unit: 4.05 Video elements -semantic-components: Include accordion with list of video elements +semantic-components: See [dropdown](#semantic-video) below table for list of components definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container @@ -15,6 +15,182 @@ maintenance-organization: European Broadcasting Union website: https://tech.ebu.ch/MetadataEbuCore --- +
    +4.05 Video semantic components + +4.05.01 +: apertureSetting + +4.05.02 +: bitDepth + +4.05.03 +: bitRate + +4.05.04 +: blockSizeMax + +4.05.05 +: blockSizeMin + +4.05.06 +: channels + +4.05.07 +: creatingApplicationName + +4.05.08 +: dataFormatType + +4.05.09 +: digitalCameraManufacturer + +4.05.10 +: digitalCameraModelName + +4.05.11 +: duration + +4.05.12 +: exposureTime + +4.05.13 +: exposureProgram + +4.05.14 +: fNumber + +4.05.15 +: focus + +4.05.16 +: frameRate + +4.05.17 +: gain + +4.05.18 +: gpsAltitude + +4.05.19 +: gpsAltitudeRef + +4.05.20 +: gpsAreaInformation + +4.05.21 +: gpsDateStamp + +4.05.22 +: gpsDestBearing + +4.05.23 +: gpsDestBearingRef + +4.05.24 +: gpsDestDistance + +4.05.25 +: gpsDestDistanceRef + +4.05.26 +: gpsDestLatitude + +4.05.27 +: gpsDestLatitudeRef + +4.05.28 +: gpsDestLongitude + +4.05.29 +: gpsDestLongitudeRef + +4.05.30 +: gpsDifferential + +4.05.31 +: gpsDOP + +4.05.32 +: gpsImgDirection + +4.05.33 +: gpsImgDirectionRef + +4.05.34 +: gpsLatitude + +4.05.35 +: gpsLatitudeRef + +4.05.36 +: gpsLongitude + +4.05.37 +: gpsLongitudeRef + +4.05.38 +: gpsMapDatum + +4.05.39 +: gpsMeasureMode + +4.05.40 +: gpsProcessingMethod + +4.05.41 +: gpsSatellites + +4.05.42 +: gpsSpeed + +4.05.43 +: gpsSpeedRef + +4.05.44 +: gpsStatus + +4.05.45 +: gpsTimeStamp + +4.05.46 +: gpsTrack + +4.05.47 +: gpsTrackRef + +4.05.48 +: gpsVersionID + +4.05.49 +: imageHeight + +4.05.50 +: imageStabilization + +4.05.51 +: imageWidth + +4.05.52 +: sampleRate + +4.05.53 +: shutterSpeedValue + +4.05.54 +: videoStreamType + +4.05.55 +: whiteBalance + +4.05.56 +: xSamplingFrequency + +4.05.57 +: ySamplingFrequency + +
    + ##### Example ``` diff --git a/docs/css/main.css b/docs/css/main.css index f73efbfe..c8daf1a4 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -46,8 +46,10 @@ hr { .sidebar { overflow-y: auto; height: calc(100vh - 80px); - flex: 0 0 25%; - max-width: 25%; + /* flex: 0 0 25%; + max-width: 25%; */ + flex: 0 0 250px; + max-width: 250px; } .sidebar { border-right: 1px solid black; @@ -59,8 +61,10 @@ hr { .main { padding-left: 20px; - flex: 0 0 calc(75% - 40px); - max-width: calc(75% - 40px); + /* flex: 0 0 calc(75% - 40px); + max-width: calc(75% - 40px); */ + flex: 0 0 calc(100% - 290px); + max-width: calc(100% - 290px); } } @@ -176,4 +180,73 @@ code { } .highlight code { background: #f5f5f5; +} + + +/* semantic components within table */ +table td span { + display: inline-block; + min-width: 43px; +} +#identification + table td span { + min-width: 30px; +} +#filestatus + table td span { + min-width: 55px; +} + +/* semantic components dropdowns */ +#audio-elements + table, #document-elements + table, #text-elements + table, #image-elements + table, #video-elements + table { + margin-bottom: -50px; +} +#semantic-audio, #semantic-document, #semantic-text, #semantic-image, #semantic-video { + padding-top: 80px; +} + +summary { + font-weight: 600; + padding: 10px; + background: #f5f5f5; +} +summary::marker { + color: #426ea8 +} +summary:hover { + cursor: pointer; +} +details dl { + font-size: 90%; + column-count: 3; + column-gap: 40px; + column-rule: 2px solid #426ea8; + padding: 5px 15px 15px; + background: #f5f5f5; + +} +details dt { + display: inline-block; + width: 60px; +} +details dd { + display: inline-block; + width: calc(100% - 65px); +} +@media(max-width:1170px){ + details dl { + column-count: 2; + } +} +@media(max-width:480px){ + details dl { + column-count: 1; + } +} + +/* noramlize table rows */ +table tr td:first-child { + width: 150px; +} +/* excluse command line table */ +#command-line-options + p + table tr td:first-child { + width: auto; } \ No newline at end of file From b2cee6a7fc46000ec83d3901d5009c5452615da0 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 28 Mar 2022 14:30:23 -0400 Subject: [PATCH 29/36] Update data-dictionary-unit.md --- docs/_includes/data-dictionary-unit.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_includes/data-dictionary-unit.md b/docs/_includes/data-dictionary-unit.md index 310bc265..8395fa0a 100644 --- a/docs/_includes/data-dictionary-unit.md +++ b/docs/_includes/data-dictionary-unit.md @@ -12,6 +12,7 @@ | **Definition** | {% if post.definition %} {{ post.definition }} {% endif %} | | **Rationale** | {% if post.rationale %} {{ post.rationale }} {% endif %} | | **Data constraint** | {% if post.data-constraint %} {{ post.data-constraint }} {% endif %} | +| **Repeatability** | {% if post.repeatability %} {{ post.drepeatability }} {% endif %} | | **Obligation** | {% if post.obligation %} {{ post.obligation }} {% endif %} | | **Usage notes** | {% if post.usage-notes %}{{ post.usage-notes }}{% endif %} | {% if post.metadata-standard %}| **Metadata standard** | {{ post.metadata-standard }} | From 2ad61bd0e24c5ecd7a0b41af4589959b38cdea96 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 28 Mar 2022 15:09:24 -0400 Subject: [PATCH 30/36] Update data-dictionary-unit.md --- docs/_includes/data-dictionary-unit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_includes/data-dictionary-unit.md b/docs/_includes/data-dictionary-unit.md index 8395fa0a..0e777c9a 100644 --- a/docs/_includes/data-dictionary-unit.md +++ b/docs/_includes/data-dictionary-unit.md @@ -12,7 +12,7 @@ | **Definition** | {% if post.definition %} {{ post.definition }} {% endif %} | | **Rationale** | {% if post.rationale %} {{ post.rationale }} {% endif %} | | **Data constraint** | {% if post.data-constraint %} {{ post.data-constraint }} {% endif %} | -| **Repeatability** | {% if post.repeatability %} {{ post.drepeatability }} {% endif %} | +| **Repeatability** | {% if post.repeatability %} {{ post.repeatability }} {% endif %} | | **Obligation** | {% if post.obligation %} {{ post.obligation }} {% endif %} | | **Usage notes** | {% if post.usage-notes %}{{ post.usage-notes }}{% endif %} | {% if post.metadata-standard %}| **Metadata standard** | {{ post.metadata-standard }} | From dc27087ee57a767812fe634173139c16feac6084 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Mon, 28 Mar 2022 15:12:50 -0400 Subject: [PATCH 31/36] updated repeatability row in data dictionary --- docs/_posts/2022-03-22-audio.md | 2 +- docs/_posts/2022-03-22-fileStatus.md | 2 +- docs/_posts/2022-03-22-image.md | 2 +- docs/_posts/2022-03-22-metadata.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/_posts/2022-03-22-audio.md b/docs/_posts/2022-03-22-audio.md index c57ad85f..6593ba75 100644 --- a/docs/_posts/2022-03-22-audio.md +++ b/docs/_posts/2022-03-22-audio.md @@ -6,7 +6,7 @@ semantic-components: See [dropdown](#semantic-audio) below table for list of com definition: This section contains technical metadata for audio files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container -repeatability: Repeatable +repeatability: Not repeatable obligation: Automatic usage-notes: The list of audio elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. metadata-standard: AES standard for audio metadata – Audio object structures for preservation and restoration diff --git a/docs/_posts/2022-03-22-fileStatus.md b/docs/_posts/2022-03-22-fileStatus.md index 33dfc621..49514e24 100644 --- a/docs/_posts/2022-03-22-fileStatus.md +++ b/docs/_posts/2022-03-22-fileStatus.md @@ -6,7 +6,7 @@ semantic-components: 3.01messageElements
    3.01.1well definition: This section contains validity information if the tools are able to identify a valid format. rationale: Each file processed with FITS should have a declaration of validity. data-constraint: Container -repeatability: Repeatable +repeatability: Not repeatable obligation: Automatic usage-notes: Well-formed and valid elements will indicate a boolean value (true or false) depending on the validation status of the file. --- diff --git a/docs/_posts/2022-03-22-image.md b/docs/_posts/2022-03-22-image.md index 9e666cda..be9831b2 100644 --- a/docs/_posts/2022-03-22-image.md +++ b/docs/_posts/2022-03-22-image.md @@ -6,7 +6,7 @@ semantic-components: See [dropdown](#semantic-image) below table for list of com definition: This section contains technical metadata for image files. The tools will extract the raw output of the file, and FITS normalizes and consolidates the output into the standard elements. rationale: Each file processed with FITS should have unique technical properties to support use and rendering. data-constraint: Container -repeatability: Not repeatable +repeatability: Repeatable obligation: Automatic usage-notes: The list of image elements represents the potential properties of a given file. The actual elements depend on what the tools are able to determine for the file. metadata-standard: NISO Metadata for Images in XML Schema diff --git a/docs/_posts/2022-03-22-metadata.md b/docs/_posts/2022-03-22-metadata.md index d8f5e09f..86c43902 100644 --- a/docs/_posts/2022-03-22-metadata.md +++ b/docs/_posts/2022-03-22-metadata.md @@ -6,7 +6,7 @@ semantic-components: 4.01Audio
    4.02Document
    Date: Mon, 28 Mar 2022 17:15:31 -0400 Subject: [PATCH 32/36] homepage and style updates; sprint recap news post (placeholder) --- docs/_includes/footer.html | 4 +- docs/_includes/header.html | 1 - docs/_posts/2022-03-28-community-sprint.md | 17 +++++++ docs/css/main.css | 57 ++++++++++++++++++++-- docs/index.html | 38 +++++++++++++-- 5 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 docs/_posts/2022-03-28-community-sprint.md diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html index 1cbb9398..8b0f92fb 100644 --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -4,14 +4,16 @@
    - +
diff --git a/docs/css/main.css b/docs/css/main.css index 123c14cd..409fc14a 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -144,15 +144,18 @@ a { justify-content: space-between; flex-wrap: wrap; margin: 40px 0; + gap: 40px; } .quick-cards a { + flex: 1 1 200px; background: #f5f5f5; border: 1px solid #e8e8e8; color: black; + display: flex; + justify-content: center; + align-items: center; } .quick-cards a > div { - margin-bottom: 0; - min-width: 200px; text-align: center; padding: 20px; } diff --git a/docs/index.html b/docs/index.html index 804024b0..9a721cd8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -13,25 +13,25 @@

File Information Tool Set

Quick Start

-

Short description here

+

Install & run FITS for the first time

- +
-

Developer manual

-

Short description here

+

User manual

+

How to get the most out of using FITS

- +
-

User manual

-

Short description here

+

Developer manual

+

Developer-focused software documentation

Code releases

-

Short description here

+

Download the latest FITS code

From 8cad03edb66463a044e0c380cc7f9c1964286f78 Mon Sep 17 00:00:00 2001 From: David Neiman Date: Thu, 30 Jun 2022 09:38:09 -0400 Subject: [PATCH 34/36] Add missing config file descriptions. --- docs/guides/fits-configuration-files.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guides/fits-configuration-files.md b/docs/guides/fits-configuration-files.md index 79dae797..1eb42c87 100644 --- a/docs/guides/fits-configuration-files.md +++ b/docs/guides/fits-configuration-files.md @@ -72,7 +72,7 @@ The above snippet of the format tree should be interpreted as: JPEG 2000 JP2 and #### [fits_output.xsd](https://github.com/harvard-lts/fits/blob/dev/xml/fits_output.xsd) -**Not listed on site, but located in xml directory - should we expand on this?** +Schema for the output of FITS XML files. #### [fits_xml_map.xml](https://github.com/harvard-lts/fits/blob/dev/xml/fits_xml_map.xml) @@ -94,10 +94,10 @@ Used to map format names to MIME media types for some of the tools that FITS wra #### [prettyprint.xslt](https://github.com/harvard-lts/fits/blob/dev/xml/prettyprint.xslt) -**Not listed on site, but located in xml directory - should we expand on this?** +Transforms the standard FITS output into “pretty print” XML formatting for easier human readability. #### [xslt_map.xsd](https://github.com/harvard-lts/fits/blob/dev/xml/xslt_map.xsd) -**Not listed on site, but located in xml directory - should we expand on this?** +Schema for transformation maps for these tools: exiftool_xslt_map.xml, jhove_xslt_map.xml, nlnx_xslt_map.xml. --- \ No newline at end of file From e45c98554394855d81eafa4b57ce0e7eaa36dab5 Mon Sep 17 00:00:00 2001 From: mferrarini Date: Thu, 7 Jul 2022 13:35:01 -0400 Subject: [PATCH 35/36] new graphic and contributors list --- docs/css/main.css | 14 ++++++++++++++ docs/guides/overview-of-fits-processing.md | 2 +- docs/images/fits_process_current.jpg | Bin 0 -> 124289 bytes .../{fits_process.jpg => fits_process_old.jpg} | Bin docs/index.html | 16 ++++++++++++---- 5 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 docs/images/fits_process_current.jpg rename docs/images/{fits_process.jpg => fits_process_old.jpg} (100%) diff --git a/docs/css/main.css b/docs/css/main.css index 409fc14a..a7d57e83 100644 --- a/docs/css/main.css +++ b/docs/css/main.css @@ -163,6 +163,20 @@ a { margin-bottom: 0; } +.fits-contributors { + column-gap: 20px; +} +@media(min-width:480px){ + .fits-contributors { + column-count: 2; + } +} +@media(min-width:780px){ + .fits-contributors { + column-count: 4; + } +} + .connect-cards > div { margin-bottom: 30px; diff --git a/docs/guides/overview-of-fits-processing.md b/docs/guides/overview-of-fits-processing.md index 0571bccc..ae007323 100644 --- a/docs/guides/overview-of-fits-processing.md +++ b/docs/guides/overview-of-fits-processing.md @@ -2,7 +2,7 @@ FITS works in different stages as shown in the image below. - + The steps are described in more detail here. diff --git a/docs/images/fits_process_current.jpg b/docs/images/fits_process_current.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb18405005fa1592d65cbf278223779f0f1a847d GIT binary patch literal 124289 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%0Dk&+$r{+w4sCG-e~bkF&rtk7?=ds66NC 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 releases

FITS Contributors

-