You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ma...@apache.org on 2015/05/01 10:00:21 UTC

svn commit: r1677100 - in /tika/trunk: ./ tika-bundle/ tika-core/src/main/resources/org/apache/tika/mime/ tika-parsers/ tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/ tika-parsers/src/main/resources/META-INF/services/ tika-parsers/src/test/...

Author: mattmann
Date: Fri May  1 08:00:21 2015
New Revision: 1677100

URL: http://svn.apache.org/r1677100
Log:
Fix for TIKA-443 Geographic Information Parser contributed by unknown <ga...@gmail.com> this closes #47.

Added:
    tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/
    tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java
    tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/geoinfo/
    tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/geoinfo/GeographicInformationParserTest.java
    tika/trunk/tika-parsers/src/test/resources/test-documents/sampleFile.iso19139
Modified:
    tika/trunk/CHANGES.txt
    tika/trunk/tika-bundle/pom.xml
    tika/trunk/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml
    tika/trunk/tika-parsers/pom.xml
    tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser

Modified: tika/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/tika/trunk/CHANGES.txt?rev=1677100&r1=1677099&r2=1677100&view=diff
==============================================================================
--- tika/trunk/CHANGES.txt (original)
+++ tika/trunk/CHANGES.txt Fri May  1 08:00:21 2015
@@ -1,5 +1,10 @@
 Release 1.9 - Current Development
 
+  * Tika now incorporates the Apache Spatial Information
+    System capability of parsing Geographic ISO 19139 
+    files (TIKA-443). It can also detect those files as
+    well.
+
   * Update the MimeTypes code to support inheritance
     (TIKA-1535).
 

Modified: tika/trunk/tika-bundle/pom.xml
URL: http://svn.apache.org/viewvc/tika/trunk/tika-bundle/pom.xml?rev=1677100&r1=1677099&r2=1677100&view=diff
==============================================================================
--- tika/trunk/tika-bundle/pom.xml (original)
+++ tika/trunk/tika-bundle/pom.xml Fri May  1 08:00:21 2015
@@ -119,6 +119,7 @@
         <extensions>true</extensions>
         <configuration>
           <instructions>
+	    <_runsystempackages>com.sun.xml.bind.marshaller, com.sun.xml.internal.bind.marshaller</_runsystempackages> 
             <Bundle-Activator>
               org.apache.tika.parser.internal.Activator
             </Bundle-Activator>
@@ -135,8 +136,9 @@
               isoparser, aspectjrt,
               metadata-extractor, xmpcore,
               boilerpipe, rome,
-              apache-mime4j-core, apache-mime4j-dom,
-              jhighlight, java-libpst,
+              geoapi, sis-metadata, sis-netcdf, sis-utility, 
+              sis-storage, apache-mime4j-core, apache-mime4j-dom,
+              jsr-275, jhighlight, java-libpst,
               netcdf4, grib, cdm, httpservices, jcip-annotations, 
               jmatio, guava
             </Embed-Dependency>
@@ -145,7 +147,7 @@
             <Export-Package>
               !org.apache.tika.parser,
               !org.apache.tika.parser.external,
-              org.apache.tika.parser.*
+              org.apache.tika.parser.*,
             </Export-Package>
             <Import-Package>
               !org.junit,
@@ -158,6 +160,8 @@
               com.ibm.icu.text;resolution:=optional,
               com.sleepycat.je;resolution:=optional,
               com.sun.javadoc;resolution:=optional,
+	      com.sun.xml.bind.marshaller;resolution:=optional,
+	      com.sun.xml.internal.bind.marshaller;resolution:=optional,
               com.sun.msv.datatype;resolution:=optional,
               com.sun.msv.datatype.xsd;resolution:=optional,
               com.sun.tools.javadoc;resolution:=optional,
@@ -166,9 +170,10 @@
               javax.activation;resolution:=optional,
               javax.mail;resolution:=optional,
               javax.mail.internet;resolution:=optional,
+	      javax.servlet.annotation;resolution:=optional,
               javax.servlet;resolution:=optional,
               javax.servlet.http;resolution:=optional,
-              javax.xml.bind;resolution:=optional,
+	      javax.measure.converter;resolution:=optional,
               javax.xml.stream;version="[1.0,2)";resolution:=optional,
               javax.xml.stream.events;version="[1.0,2)";resolution:=optional,
               javax.xml.stream.util;version="[1.0,2)";resolution:=optional,
@@ -190,6 +195,9 @@
               org.apache.commons.vfs2.util;resolution:=optional,
               org.apache.crimson.jaxp;resolution:=optional,
               org.apache.jcp.xml.dsig.internal.dom;resolution:=optional,
+	      org.apache.sis;resolution:=optional,
+	      org.apache.sis.distance;resolution:=optional,
+	      org.apache.sis.geometry;resolution:=optional,
               org.apache.tools.ant;resolution:=optional,
               org.apache.tools.ant.taskdefs;resolution:=optional,
               org.apache.tools.ant.types;resolution:=optional,

Modified: tika/trunk/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml?rev=1677100&r1=1677099&r2=1677100&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml (original)
+++ tika/trunk/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml Fri May  1 08:00:21 2015
@@ -47,6 +47,14 @@
     <glob pattern="*.aw"/>
   </mime-type>
 
+  <mime-type type="text/iso19139+xml">
+	  <root-XML localName="MD_metadata"/>
+	  <root-XML localName="MD_metadata" namespaceURI="http://www.isotc211.org/2005/gmd"/>
+	  <glob pattern="*.iso19139"/>
+	  <sub-class-of type="application/xml"/>
+   </mime-type>
+
+  
   <mime-type type="application/atom+xml">
     <root-XML localName="feed" namespaceURI="http://purl.org/atom/ns#"/>
     <root-XML localName="feed" namespaceURI="http://www.w3.org/2005/Atom"/>

Modified: tika/trunk/tika-parsers/pom.xml
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/pom.xml?rev=1677100&r1=1677099&r2=1677100&view=diff
==============================================================================
--- tika/trunk/tika-parsers/pom.xml (original)
+++ tika/trunk/tika-parsers/pom.xml Fri May  1 08:00:21 2015
@@ -279,6 +279,27 @@
       <artifactId>commons-csv</artifactId>
       <version>1.0</version>
     </dependency>
+	
+	<dependency>
+		<groupId>org.apache.sis.core</groupId>
+		<artifactId>sis-utility</artifactId>
+		<version>0.5</version>
+	</dependency>
+	<dependency>
+		<groupId>org.apache.sis.storage</groupId>
+		<artifactId>sis-netcdf</artifactId>
+		<version>0.5</version>
+	</dependency>
+	<dependency>
+		<groupId>org.apache.sis.core</groupId>
+		<artifactId>sis-metadata</artifactId>
+		<version>0.5</version>
+	</dependency>
+	<dependency>
+		<groupId>org.opengis</groupId>
+		<artifactId>geoapi</artifactId>
+		<version>3.0.0</version>
+	</dependency>
   </dependencies>
 
   <build>

Added: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java?rev=1677100&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java (added)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java Fri May  1 08:00:21 2015
@@ -0,0 +1,391 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.geoinfo;
+
+import org.apache.sis.internal.util.CheckedArrayList;
+import org.apache.sis.internal.util.CheckedHashSet;
+import org.apache.sis.metadata.iso.DefaultMetadata;
+import org.apache.sis.metadata.iso.DefaultMetadataScope;
+import org.apache.sis.metadata.iso.constraint.DefaultLegalConstraints;
+import org.apache.sis.metadata.iso.extent.DefaultGeographicBoundingBox;
+import org.apache.sis.metadata.iso.extent.DefaultGeographicDescription;
+import org.apache.sis.metadata.iso.identification.DefaultDataIdentification;
+import org.apache.sis.storage.DataStore;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.DataStores;
+import org.apache.sis.storage.UnsupportedStorageException;
+import org.apache.sis.util.collection.CodeListSet;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.io.TemporaryResources;
+import org.apache.tika.io.TikaInputStream;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MediaType;
+import org.apache.tika.parser.AbstractParser;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.opengis.metadata.Identifier;
+import org.opengis.metadata.citation.Citation;
+import org.opengis.metadata.citation.CitationDate;
+import org.opengis.metadata.citation.OnlineResource;
+import org.opengis.metadata.citation.ResponsibleParty;
+import org.opengis.metadata.constraint.Restriction;
+import org.opengis.metadata.distribution.DigitalTransferOptions;
+import org.opengis.metadata.distribution.Distribution;
+import org.opengis.metadata.distribution.Distributor;
+import org.opengis.metadata.distribution.Format;
+import org.opengis.metadata.extent.Extent;
+import org.opengis.metadata.extent.GeographicExtent;
+import org.opengis.metadata.identification.Identification;
+import org.opengis.metadata.identification.Keywords;
+import org.opengis.metadata.identification.Progress;
+import org.opengis.metadata.identification.TopicCategory;
+import org.opengis.util.InternationalString;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.*;
+
+
+public class GeographicInformationParser extends AbstractParser{
+
+    public static final String geoInfoType="text/iso19139+xml";
+    private final Set<MediaType> SUPPORTED_TYPES =
+            Collections.singleton(MediaType.text("iso19139+xml"));
+
+
+    @Override
+    public Set<MediaType> getSupportedTypes(ParseContext parseContext) {
+        return SUPPORTED_TYPES;
+    }
+
+    @Override
+    public void parse(InputStream inputStream, ContentHandler contentHandler, Metadata metadata, ParseContext parseContext) throws IOException, SAXException, TikaException {
+        metadata.set(Metadata.CONTENT_TYPE,geoInfoType);
+        DataStore dataStore= null;
+        DefaultMetadata defaultMetadata=null;
+        XHTMLContentHandler xhtmlContentHandler=new XHTMLContentHandler(contentHandler,metadata);
+
+        try {
+            TemporaryResources tmp = new TemporaryResources();
+            TikaInputStream tikaInputStream=TikaInputStream.get(inputStream,tmp);
+            File file= tikaInputStream.getFile();
+            dataStore = DataStores.open(file);
+            defaultMetadata=new DefaultMetadata(dataStore.getMetadata());
+            if(defaultMetadata!=null)
+                extract(xhtmlContentHandler, metadata, defaultMetadata);
+
+        }catch (UnsupportedStorageException e) {
+            throw new TikaException("UnsupportedStorageException",e);
+        }
+        catch (DataStoreException e) {
+            throw new TikaException("DataStoreException",e);
+        }
+    }
+
+    private void extract(XHTMLContentHandler xhtmlContentHandler,Metadata metadata, DefaultMetadata defaultMetadata) throws SAXException{
+        try {
+            getMetaDataCharacterSet(metadata, defaultMetadata);
+            getMetaDataContact(metadata, defaultMetadata);
+            getMetaDataIdentificationInfo(metadata, defaultMetadata);
+            getMetaDataDistributionInfo(metadata, defaultMetadata);
+            getMetaDataDateInfo(metadata, defaultMetadata);
+            getMetaDataResourceScope(metadata, defaultMetadata);
+            getMetaDataParentMetaDataTitle(metadata, defaultMetadata);
+            getMetaDataIdetifierCode(metadata, defaultMetadata);
+            getMetaDataStandard(metadata, defaultMetadata);
+            extractContent(xhtmlContentHandler, defaultMetadata);
+        }
+        catch(Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private void extractContent(XHTMLContentHandler xhtmlContentHandler, DefaultMetadata defaultMetadata) throws SAXException{
+        xhtmlContentHandler.startDocument();
+        xhtmlContentHandler.newline();
+
+        xhtmlContentHandler.newline();
+        ArrayList<Identification> identifications= (ArrayList<Identification>) defaultMetadata.getIdentificationInfo();
+        for(Identification i:identifications) {
+            xhtmlContentHandler.startElement("h1");
+            xhtmlContentHandler.characters(i.getCitation().getTitle().toString());
+            xhtmlContentHandler.endElement("h1");
+            xhtmlContentHandler.newline();
+
+            ArrayList<ResponsibleParty> responsiblePartyArrayList = (ArrayList<ResponsibleParty>) i.getCitation().getCitedResponsibleParties();
+            for (ResponsibleParty r : responsiblePartyArrayList) {
+                xhtmlContentHandler.startElement("h3");
+                xhtmlContentHandler.newline();
+                xhtmlContentHandler.characters("CitedResponsiblePartyRole " + r.getRole().toString());
+                xhtmlContentHandler.characters("CitedResponsiblePartyName " + r.getIndividualName().toString());
+                xhtmlContentHandler.endElement("h3");
+                xhtmlContentHandler.newline();
+            }
+
+            xhtmlContentHandler.startElement("p");
+            xhtmlContentHandler.newline();
+            xhtmlContentHandler.characters("IdentificationInfoAbstract " + i.getAbstract().toString());
+            xhtmlContentHandler.endElement("p");
+            xhtmlContentHandler.newline();
+            Collection<Extent> extentList=((DefaultDataIdentification) i).getExtents();
+            for(Extent e:extentList){
+                ArrayList<GeographicExtent> geoElements= (ArrayList<GeographicExtent>) e.getGeographicElements();
+                for(GeographicExtent g:geoElements) {
+
+                    if (g instanceof DefaultGeographicBoundingBox) {
+                        xhtmlContentHandler.startElement("tr");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters("GeographicElementWestBoundLatitude");
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters(String.valueOf(((DefaultGeographicBoundingBox) g).getWestBoundLongitude()));
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.endElement("tr");
+                        xhtmlContentHandler.startElement("tr");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters("GeographicElementEastBoundLatitude");
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters(String.valueOf(((DefaultGeographicBoundingBox) g).getEastBoundLongitude()));
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.endElement("tr");
+                        xhtmlContentHandler.startElement("tr");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters("GeographicElementNorthBoundLatitude");
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters(String.valueOf(((DefaultGeographicBoundingBox) g).getNorthBoundLatitude()));
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.endElement("tr");
+                        xhtmlContentHandler.startElement("tr");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters("GeographicElementSouthBoundLatitude");
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.startElement("td");
+                        xhtmlContentHandler.characters(String.valueOf(((DefaultGeographicBoundingBox) g).getSouthBoundLatitude()));
+                        xhtmlContentHandler.endElement("td");
+                        xhtmlContentHandler.endElement("tr");
+                    }
+                }
+            }
+        }
+        xhtmlContentHandler.newline();
+        xhtmlContentHandler.endDocument();
+    }
+
+    private void getMetaDataCharacterSet(Metadata metadata, DefaultMetadata defaultMetaData){
+        CheckedHashSet<Charset> charSetList= (CheckedHashSet<Charset>) defaultMetaData.getCharacterSets();
+        for(Charset c:charSetList){
+            metadata.add("CharacterSet",c.name());
+        }
+    }
+
+
+    private void getMetaDataContact(Metadata metadata, DefaultMetadata defaultMetaData){
+        CheckedArrayList<ResponsibleParty> contactSet= (CheckedArrayList<ResponsibleParty>) defaultMetaData.getContacts();
+        for(ResponsibleParty rparty:contactSet){
+           if(rparty.getRole()!=null)
+                metadata.add("ContactRole",rparty.getRole().name());
+           if(rparty.getOrganisationName()!=null)
+                metadata.add("ContactPartyName-",rparty.getOrganisationName().toString());
+        }
+    }
+
+    private void getMetaDataIdentificationInfo(Metadata metadata, DefaultMetadata defaultMetaData){
+        ArrayList<Identification> identifications= (ArrayList<Identification>) defaultMetaData.getIdentificationInfo();
+        for(Identification i:identifications){
+            DefaultDataIdentification defaultDataIdentification= (DefaultDataIdentification) i;
+            if(i.getCitation()!=null && i.getCitation().getTitle()!=null)
+                metadata.add("IdentificationInfoCitationTitle ",i.getCitation().getTitle().toString());
+
+            ArrayList<CitationDate> dateArrayList= (ArrayList<CitationDate>) i.getCitation().getDates();
+            for (CitationDate d:dateArrayList){
+                if(d.getDateType()!=null)
+                    metadata.add("CitationDate ",d.getDateType().name()+"-->"+d.getDate());
+            }
+            ArrayList<ResponsibleParty> responsiblePartyArrayList= (ArrayList<ResponsibleParty>) i.getCitation().getCitedResponsibleParties();
+            for(ResponsibleParty r:responsiblePartyArrayList){
+                if(r.getRole()!=null)
+                    metadata.add("CitedResponsiblePartyRole ",r.getRole().toString());
+                if(r.getIndividualName()!=null)
+                    metadata.add("CitedResponsiblePartyName ",r.getIndividualName().toString());
+                if(r.getOrganisationName()!=null)
+                    metadata.add("CitedResponsiblePartyOrganizationName ", r.getOrganisationName().toString());
+                if(r.getPositionName()!=null)
+                    metadata.add("CitedResponsiblePartyPositionName ",r.getPositionName().toString());
+
+                if(r.getContactInfo()!=null){
+                    for(String s:r.getContactInfo().getAddress().getElectronicMailAddresses()) {
+                        metadata.add("CitedResponsiblePartyEMail ",s.toString());
+                    }
+                }
+            }
+            if(i.getAbstract()!=null)
+                metadata.add("IdentificationInfoAbstract ",i.getAbstract().toString());
+            for(Progress p:i.getStatus()) {
+                metadata.add("IdentificationInfoStatus ",p.name());
+            }
+            ArrayList<Format> formatArrayList= (ArrayList<Format>) i.getResourceFormats();
+            for(Format f:formatArrayList){
+                if(f.getName()!=null)
+                    metadata.add("ResourceFormatSpecificationAlternativeTitle ",f.getName().toString());
+            }
+            CheckedHashSet<Locale> localeCheckedHashSet= (CheckedHashSet<Locale>) defaultDataIdentification.getLanguages();
+            for(Locale l:localeCheckedHashSet){
+                metadata.add("IdentificationInfoLanguage-->",l.getDisplayLanguage(Locale.ENGLISH));
+            }
+            CodeListSet<TopicCategory> categoryList= (CodeListSet<TopicCategory>) defaultDataIdentification.getTopicCategories();
+            for(TopicCategory t:categoryList){
+                metadata.add("IdentificationInfoTopicCategory-->",t.name());
+            }
+            ArrayList<Keywords> keywordList= (ArrayList<Keywords>) i.getDescriptiveKeywords();
+            int j=1;
+            for(Keywords k:keywordList){
+                j++;
+                ArrayList<InternationalString> stringList= (ArrayList<InternationalString>) k.getKeywords();
+                for(InternationalString s:stringList){
+                    metadata.add("Keywords "+j ,s.toString());
+                }
+                if(k.getType()!=null)
+                    metadata.add("KeywordsType "+j,k.getType().name());
+                if(k.getThesaurusName()!=null && k.getThesaurusName().getTitle()!=null)
+                    metadata.add("ThesaurusNameTitle "+j,k.getThesaurusName().getTitle().toString());
+                if(k.getThesaurusName()!=null && k.getThesaurusName().getAlternateTitles()!=null)
+                    metadata.add("ThesaurusNameAlternativeTitle "+j,k.getThesaurusName().getAlternateTitles().toString());
+
+                ArrayList<CitationDate>citationDates= (ArrayList<CitationDate>) k.getThesaurusName().getDates();
+                for(CitationDate cd:citationDates) {
+                   if(cd.getDateType()!=null)
+                        metadata.add("ThesaurusNameDate ",cd.getDateType().name() +"-->" + cd.getDate());
+                }
+            }
+            ArrayList<DefaultLegalConstraints> constraintList= (ArrayList<DefaultLegalConstraints>) i.getResourceConstraints();
+
+            for(DefaultLegalConstraints c:constraintList){
+                for(Restriction r:c.getAccessConstraints()){
+                    metadata.add("AccessContraints ",r.name());
+                }
+                for(InternationalString s:c.getOtherConstraints()){
+                    metadata.add("OtherConstraints ",s.toString());
+                }
+                for(Restriction r:c.getUseConstraints()) {
+                    metadata.add("UserConstraints ",r.name());
+                }
+              
+            }
+            Collection<Extent> extentList=((DefaultDataIdentification) i).getExtents();
+            for(Extent e:extentList){
+                ArrayList<GeographicExtent> geoElements= (ArrayList<GeographicExtent>) e.getGeographicElements();
+                for(GeographicExtent g:geoElements){
+
+                    if(g instanceof DefaultGeographicDescription){
+                        if(((DefaultGeographicDescription) g).getGeographicIdentifier()!=null && ((DefaultGeographicDescription) g).getGeographicIdentifier().getCode()!=null )
+                            metadata.add("GeographicIdentifierCode ",((DefaultGeographicDescription) g).getGeographicIdentifier().getCode().toString());
+                        if(((DefaultGeographicDescription) g).getGeographicIdentifier()!=null && ((DefaultGeographicDescription) g).getGeographicIdentifier().getAuthority()!=null && ((DefaultGeographicDescription) g).getGeographicIdentifier().getAuthority().getTitle()!=null )
+                        metadata.add("GeographicIdentifierAuthorityTitle ",((DefaultGeographicDescription) g).getGeographicIdentifier().getAuthority().getTitle().toString());
+
+                        for(InternationalString s:((DefaultGeographicDescription) g).getGeographicIdentifier().getAuthority().getAlternateTitles()) {
+                            metadata.add("GeographicIdentifierAuthorityAlternativeTitle ",s.toString());
+                        }
+                        for(CitationDate cd:((DefaultGeographicDescription) g).getGeographicIdentifier().getAuthority().getDates()){
+                            if(cd.getDateType()!=null && cd.getDate()!=null)
+                                metadata.add("GeographicIdentifierAuthorityDate ",cd.getDateType().name()+" "+cd.getDate().toString());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void getMetaDataDistributionInfo(Metadata metadata, DefaultMetadata defaultMetaData){
+        Distribution distribution=defaultMetaData.getDistributionInfo();
+        ArrayList<Format> distributionFormat= (ArrayList<Format>) distribution.getDistributionFormats();
+        for(Format f:distributionFormat){
+            if(f.getName()!=null)
+                metadata.add("DistributionFormatSpecificationAlternativeTitle ",f.getName().toString());
+        }
+        ArrayList<Distributor> distributorList= (ArrayList<Distributor>) distribution.getDistributors();
+        for(Distributor d:distributorList){
+            if(d!=null && d.getDistributorContact()!=null && d.getDistributorContact().getRole()!=null)
+                metadata.add("Distributor Contact ",d.getDistributorContact().getRole().name());
+            if(d!=null && d.getDistributorContact()!=null && d.getDistributorContact().getOrganisationName()!=null)
+                metadata.add("Distributor Organization Name ",d.getDistributorContact().getOrganisationName().toString());
+        }
+        ArrayList<DigitalTransferOptions> transferOptionsList= (ArrayList<DigitalTransferOptions>) distribution.getTransferOptions();
+        for(DigitalTransferOptions d:transferOptionsList){
+            ArrayList<OnlineResource> onlineResourceList= (ArrayList<OnlineResource>) d.getOnLines();
+            for(OnlineResource or:onlineResourceList){
+                if(or.getLinkage()!=null)
+                    metadata.add("TransferOptionsOnlineLinkage ",or.getLinkage().toString());
+                if(or.getProtocol()!=null)
+                    metadata.add("TransferOptionsOnlineProtocol ",or.getProtocol());
+                if(or.getApplicationProfile()!=null)
+                    metadata.add("TransferOptionsOnlineProfile ",or.getApplicationProfile());
+                if(or.getName()!=null)
+                    metadata.add("TransferOptionsOnlineName ",or.getName());
+                if(or.getDescription()!=null)
+                    metadata.add("TransferOptionsOnlineDescription ",or.getDescription().toString());
+                if(or.getFunction()!=null)
+                    metadata.add("TransferOptionsOnlineFunction ",or.getFunction().name());
+
+            }
+        }
+    }
+
+    private void getMetaDataDateInfo(Metadata metadata, DefaultMetadata defaultMetaData){
+        ArrayList<CitationDate> citationDateList= (ArrayList<CitationDate>) defaultMetaData.getDateInfo();
+        for(CitationDate c:citationDateList){
+            if(c.getDateType()!=null)
+                metadata.add("DateInfo ",c.getDateType().name()+" "+c.getDate());
+        }
+    }
+
+    private void getMetaDataResourceScope(Metadata metadata, DefaultMetadata defaultMetaData){
+        ArrayList<DefaultMetadataScope> scopeList= (ArrayList<DefaultMetadataScope>) defaultMetaData.getMetadataScopes();
+        for(DefaultMetadataScope d:scopeList){
+            if(d.getResourceScope()!=null)
+                metadata.add("MetaDataResourceScope ",d.getResourceScope().name());
+        }
+    }
+
+    private void getMetaDataParentMetaDataTitle(Metadata metadata, DefaultMetadata defaultMetaData){
+        Citation parentMetaData=defaultMetaData.getParentMetadata();
+        if(parentMetaData!=null && parentMetaData.getTitle()!=null)
+            metadata.add("ParentMetaDataTitle",parentMetaData.getTitle().toString());
+    }
+
+    private void getMetaDataIdetifierCode(Metadata metadata, DefaultMetadata defaultMetaData){
+        Identifier identifier= defaultMetaData.getMetadataIdentifier();
+        if(identifier!=null)
+            metadata.add("MetaDataIdentifierCode",identifier.getCode());
+    }
+
+    private void getMetaDataStandard(Metadata metadata, DefaultMetadata defaultMetaData){
+        ArrayList<Citation> citationList= (ArrayList<Citation>) defaultMetaData.getMetadataStandards();
+        for(Citation c:citationList){
+            if(c.getTitle()!=null)
+                metadata.add("MetaDataStandardTitle ",c.getTitle().toString());
+            if(c.getEdition()!=null)
+                metadata.add("MetaDataStandardEdition ",c.getEdition().toString());
+        }
+    }
+}

Modified: tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser?rev=1677100&r1=1677099&r2=1677100&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser (original)
+++ tika/trunk/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser Fri May  1 08:00:21 2015
@@ -62,3 +62,4 @@ org.apache.tika.parser.gdal.GDALParser
 org.apache.tika.parser.grib.GribParser
 org.apache.tika.parser.jdbc.SQLite3Parser
 org.apache.tika.parser.isatab.ISArchiveParser
+org.apache.tika.parser.geoinfo.GeographicInformationParser

Added: tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/geoinfo/GeographicInformationParserTest.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/geoinfo/GeographicInformationParserTest.java?rev=1677100&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/geoinfo/GeographicInformationParserTest.java (added)
+++ tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/geoinfo/GeographicInformationParserTest.java Fri May  1 08:00:21 2015
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.geoinfo;
+
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
+import org.apache.tika.parser.geoinfo.GeographicInformationParser;
+import org.apache.tika.sax.BodyContentHandler;
+import org.junit.Test;
+import org.xml.sax.ContentHandler;
+import java.io.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class GeographicInformationParserTest {
+
+    @Test
+    public void testISO19139() throws Exception{
+        String path ="/test-documents/sampleFile.iso19139";
+		
+        Metadata metadata = new Metadata();
+        Parser parser=new org.apache.tika.parser.geoinfo.GeographicInformationParser();
+        ContentHandler contentHandler=new BodyContentHandler();
+        ParseContext parseContext=new ParseContext();
+        
+        InputStream inputStream = GeographicInformationParser.class.getResourceAsStream(path);
+       
+        parser.parse(inputStream, contentHandler, metadata, parseContext);
+
+        assertEquals("text/iso19139+xml", metadata.get(Metadata.CONTENT_TYPE));
+        assertEquals("UTF-8", metadata.get("CharacterSet"));
+        assertEquals("https", metadata.get("TransferOptionsOnlineProtocol "));
+        assertEquals("browser", metadata.get("TransferOptionsOnlineProfile "));
+        assertEquals("Barrow Atqasuk ARCSS Plant", metadata.get("TransferOptionsOnlineName "));
+
+        String content = contentHandler.toString();
+        assertTrue(content.contains("Barrow Atqasuk ARCSS Plant"));
+        assertTrue(content.contains("GeographicElementWestBoundLatitude	-157.24"));
+        assertTrue(content.contains("GeographicElementEastBoundLatitude	-156.4"));
+        assertTrue(content.contains("GeographicElementNorthBoundLatitude	71.18"));
+        assertTrue(content.contains("GeographicElementSouthBoundLatitude	70.27"));
+
+    }
+
+}

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/sampleFile.iso19139
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/sampleFile.iso19139?rev=1677100&view=auto
==============================================================================
--- tika/trunk/tika-parsers/src/test/resources/test-documents/sampleFile.iso19139 (added)
+++ tika/trunk/tika-parsers/src/test/resources/test-documents/sampleFile.iso19139 Fri May  1 08:00:21 2015
@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<gmd:MD_Metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                 xmlns:gco="http://www.isotc211.org/2005/gco"
+                 xmlns:gmd="http://www.isotc211.org/2005/gmd"
+                 xmlns:gml="http://www.opengis.net/gml/3.2"
+                 xmlns:gmx="http://www.isotc211.org/2005/gmx"
+                 xmlns:xlink="http://www.w3.org/1999/xlink"
+                 xsi:schemaLocation="http://www.isotc211.org/2005/gco http://www.isotc211.org/2005/gco/gco.xsd
+						http://www.isotc211.org/2005/gmd http://www.isotc211.org/2005/gmd/gmd.xsd
+						http://www.isotc211.org/2005/gmx http://www.isotc211.org/2005/gmx/gmx.xsd">
+
+	<gmd:fileIdentifier>
+		<gco:CharacterString>urn:x-wmo:md:org.aoncadis.www::4c1a919d-6690-11e3-9147-00c0f03d5b7c</gco:CharacterString>
+	</gmd:fileIdentifier>
+
+	<gmd:language>
+		<gco:CharacterString>eng</gco:CharacterString>
+	</gmd:language>
+
+	<gmd:characterSet>
+		<gmd:MD_CharacterSetCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode" codeListValue="utf8" codeSpace="004">utf8</gmd:MD_CharacterSetCode>
+	</gmd:characterSet>
+
+	<gmd:parentIdentifier>
+		<gco:CharacterString>urn:x-wmo:md:org.aoncadis.www::d2e4e808-6830-11df-abb3-00c0f03d5b7c</gco:CharacterString>
+	</gmd:parentIdentifier>
+
+	<gmd:hierarchyLevel>
+		<gmd:MD_ScopeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset" codeSpace="005">dataset</gmd:MD_ScopeCode>
+	</gmd:hierarchyLevel>
+
+	<gmd:contact>
+		<gmd:CI_ResponsibleParty>
+			<gmd:organisationName>
+				<gco:CharacterString>UCAR/NCAR - CISL - ACADIS</gco:CharacterString>
+			</gmd:organisationName>
+			<gmd:role>
+				<gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="resourceProvider">resourceProvider</gmd:CI_RoleCode>
+			</gmd:role>
+		</gmd:CI_ResponsibleParty>
+	</gmd:contact>
+
+	<gmd:dateStamp>
+		<gco:DateTime>2013-12-16T13:26:08Z</gco:DateTime>
+	</gmd:dateStamp>
+
+	<gmd:metadataStandardName>
+		<gco:CharacterString>ISO 19115 Geographic information - Metadata</gco:CharacterString>
+	</gmd:metadataStandardName>
+
+	<gmd:metadataStandardVersion>
+		<gco:CharacterString>ISO 19115:2003(E)</gco:CharacterString>
+	</gmd:metadataStandardVersion>
+
+	<gmd:dataSetURI>
+		<gco:CharacterString>https://www.aoncadis.org/dataset/id/4c1a919d-6690-11e3-9147-00c0f03d5b7c.iso19139</gco:CharacterString>
+	</gmd:dataSetURI>
+
+	<gmd:identificationInfo>
+		<gmd:MD_DataIdentification>
+			<gmd:citation>
+				<gmd:CI_Citation>
+					<gmd:title>
+						<gco:CharacterString>Barrow Atqasuk ARCSS Plant</gco:CharacterString>
+					</gmd:title>
+					<gmd:date>
+						<gmd:CI_Date>
+							<gmd:date>
+								<gco:Date>2013-12-16</gco:Date>
+							</gmd:date>
+							<gmd:dateType>
+								<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="creation">creation</gmd:CI_DateTypeCode>
+							</gmd:dateType>
+						</gmd:CI_Date>
+					</gmd:date>
+					<gmd:date>
+						<gmd:CI_Date>
+							<gmd:date>
+								<gco:Date>2015-03-11</gco:Date>
+							</gmd:date>
+							<gmd:dateType>
+								<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="modified">modified</gmd:CI_DateTypeCode>
+							</gmd:dateType>
+						</gmd:CI_Date>
+					</gmd:date>
+					<gmd:citedResponsibleParty>
+						<gmd:CI_ResponsibleParty>
+							<gmd:individualName>
+								<gco:CharacterString>Robert Hollister</gco:CharacterString>
+							</gmd:individualName>
+							<gmd:contactInfo>
+								<gmd:CI_Contact>
+									<gmd:address>
+										<gmd:CI_Address>
+											<gmd:electronicMailAddress>
+												<gco:CharacterString>hollistr@gvsu.edu</gco:CharacterString>
+											</gmd:electronicMailAddress>
+										</gmd:CI_Address>
+									</gmd:address>
+								</gmd:CI_Contact>
+							</gmd:contactInfo>
+							<gmd:role>
+								<gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
+							</gmd:role>
+						</gmd:CI_ResponsibleParty>
+					</gmd:citedResponsibleParty>
+					<gmd:citedResponsibleParty>
+						<gmd:CI_ResponsibleParty>
+							<gmd:individualName>
+								<gco:CharacterString>Robert Hollister</gco:CharacterString>
+							</gmd:individualName>
+							<gmd:role>
+								<gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="author">author</gmd:CI_RoleCode>
+							</gmd:role>
+						</gmd:CI_ResponsibleParty>
+					</gmd:citedResponsibleParty>
+				</gmd:CI_Citation>
+			</gmd:citation>
+			<gmd:abstract>
+				<gco:CharacterString>These files contain data representing the periodic plant measures of species within each plot in a text tab delimited format. The data presented are seasonal growth of graminoids (length of leaf and length of inflorescence) and seasonal flowering of all species (number of inflorescences in flower within a plot), collected weekly during the summers of 2012-20XX for a subset of 30 grid plots at two sites (Barrow ARCSS grid and Atqasuk ARCSS grid).</gco:CharacterString>
+			</gmd:abstract>
+			<gmd:status>
+				<gmd:MD_ProgressCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ProgressCode" codeListValue="onGoing" codeSpace="004">onGoing</gmd:MD_ProgressCode>
+			</gmd:status>
+			<gmd:pointOfContact>
+				<gmd:CI_ResponsibleParty>
+					<gmd:individualName>
+						<gco:CharacterString>Robert Hollister</gco:CharacterString>
+					</gmd:individualName>
+					<gmd:contactInfo>
+						<gmd:CI_Contact>
+							<gmd:address>
+								<gmd:CI_Address>
+									<gmd:electronicMailAddress>
+										<gco:CharacterString>hollistr@gvsu.edu</gco:CharacterString>
+									</gmd:electronicMailAddress>
+								</gmd:CI_Address>
+							</gmd:address>
+						</gmd:CI_Contact>
+					</gmd:contactInfo>
+					<gmd:role>
+						<gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
+					</gmd:role>
+				</gmd:CI_ResponsibleParty>
+			</gmd:pointOfContact>
+			<gmd:resourceFormat>
+				<gmd:MD_Format>
+					<gmd:name>
+						<gco:CharacterString>Other ASCII</gco:CharacterString>
+					</gmd:name>
+					<gmd:version gco:nilReason="unknown"/>
+				</gmd:MD_Format>
+			</gmd:resourceFormat>
+			<gmd:descriptiveKeywords>
+				<gmd:MD_Keywords>
+					<gmd:keyword>
+						<gco:CharacterString>EARTH SCIENCE &gt; BIOSPHERE &gt; TERRESTRIAL ECOSYSTEMS &gt; ALPINE/TUNDRA</gco:CharacterString>
+					</gmd:keyword>
+					<gmd:type>
+						<gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
+					</gmd:type>
+					<gmd:thesaurusName>
+						<gmd:CI_Citation>
+							<gmd:title>
+								<gco:CharacterString>NASA/GCMD Earth Science Keywords</gco:CharacterString>
+							</gmd:title>
+							<gmd:alternateTitle>
+								<gco:CharacterString>Science and Services Keywords</gco:CharacterString>
+							</gmd:alternateTitle>
+							<gmd:date>
+								<gmd:CI_Date>
+									<gmd:date>
+										<gco:Date>2014-05-21</gco:Date>
+									</gmd:date>
+									<gmd:dateType>
+										<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
+									</gmd:dateType>
+								</gmd:CI_Date>
+							</gmd:date>
+							<gmd:collectiveTitle>
+								<gco:CharacterString>Olsen, L.M., G. Major, K. Shein, J. Scialdone, S. Ritz, T. Stevens, M. Morahan, A. Aleman, R. Vogel, S. Leicester, H. Weir, M. Meaux, S. Grebas, C.Solomon, M. Holland, T. Northcutt, R. A. Restrepo, R. Bilodeau, 2013. NASA/Global Change Master Directory (GCMD) Earth Science Keywords. Version 8.0.0.0.0</gco:CharacterString>
+							</gmd:collectiveTitle>
+						</gmd:CI_Citation>
+					</gmd:thesaurusName>
+				</gmd:MD_Keywords>
+			</gmd:descriptiveKeywords>
+			<gmd:descriptiveKeywords>
+				<gmd:MD_Keywords>
+					<gmd:keyword>
+						<gco:CharacterString>FIELD SURVEY</gco:CharacterString>
+					</gmd:keyword>
+					<gmd:type>
+						<gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
+					</gmd:type>
+					<gmd:thesaurusName>
+						<gmd:CI_Citation>
+							<gmd:title>
+								<gco:CharacterString>ACADIS Keywords</gco:CharacterString>
+							</gmd:title>
+							<gmd:alternateTitle>
+								<gco:CharacterString>Platforms</gco:CharacterString>
+							</gmd:alternateTitle>
+							<gmd:date>
+								<gmd:CI_Date>
+									<gmd:date>
+										<gco:Date>2014-10-07</gco:Date>
+									</gmd:date>
+									<gmd:dateType>
+										<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
+									</gmd:dateType>
+								</gmd:CI_Date>
+							</gmd:date>
+						</gmd:CI_Citation>
+					</gmd:thesaurusName>
+				</gmd:MD_Keywords>
+			</gmd:descriptiveKeywords>
+			<gmd:descriptiveKeywords>
+				<gmd:MD_Keywords>
+					<gmd:keyword>
+						<gco:CharacterString>POINT</gco:CharacterString>
+					</gmd:keyword>
+					<gmd:type>
+						<gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
+					</gmd:type>
+					<gmd:thesaurusName>
+						<gmd:CI_Citation>
+							<gmd:title>
+								<gco:CharacterString>ACADIS Keywords</gco:CharacterString>
+							</gmd:title>
+							<gmd:alternateTitle>
+								<gco:CharacterString>Spatial Data Type</gco:CharacterString>
+							</gmd:alternateTitle>
+							<gmd:date>
+								<gmd:CI_Date>
+									<gmd:date>
+										<gco:Date>2014-10-07</gco:Date>
+									</gmd:date>
+									<gmd:dateType>
+										<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
+									</gmd:dateType>
+								</gmd:CI_Date>
+							</gmd:date>
+						</gmd:CI_Citation>
+					</gmd:thesaurusName>
+				</gmd:MD_Keywords>
+			</gmd:descriptiveKeywords>
+			<gmd:descriptiveKeywords>
+				<gmd:MD_Keywords>
+					<gmd:keyword>
+						<gco:CharacterString>LESS THAN 1 METER</gco:CharacterString>
+					</gmd:keyword>
+					<gmd:type>
+						<gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
+					</gmd:type>
+					<gmd:thesaurusName>
+						<gmd:CI_Citation>
+							<gmd:title>
+								<gco:CharacterString>NASA/GCMD Earth Science Keywords</gco:CharacterString>
+							</gmd:title>
+							<gmd:alternateTitle>
+								<gco:CharacterString>Horizontal Data Resolution</gco:CharacterString>
+							</gmd:alternateTitle>
+							<gmd:date>
+								<gmd:CI_Date>
+									<gmd:date>
+										<gco:Date>2014-05-21</gco:Date>
+									</gmd:date>
+									<gmd:dateType>
+										<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
+									</gmd:dateType>
+								</gmd:CI_Date>
+							</gmd:date>
+							<gmd:collectiveTitle>
+								<gco:CharacterString>Olsen, L.M., G. Major, K. Shein, J. Scialdone, S. Ritz, T. Stevens, M. Morahan, A. Aleman, R. Vogel, S. Leicester, H. Weir, M. Meaux, S. Grebas, C.Solomon, M. Holland, T. Northcutt, R. A. Restrepo, R. Bilodeau, 2013. NASA/Global Change Master Directory (GCMD) Earth Science Keywords. Version 8.0.0.0.0</gco:CharacterString>
+							</gmd:collectiveTitle>
+						</gmd:CI_Citation>
+					</gmd:thesaurusName>
+				</gmd:MD_Keywords>
+			</gmd:descriptiveKeywords>
+			<gmd:descriptiveKeywords>
+				<gmd:MD_Keywords>
+					<gmd:keyword>
+						<gco:CharacterString>DAILY TO WEEKLY</gco:CharacterString>
+					</gmd:keyword>
+					<gmd:type>
+						<gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
+					</gmd:type>
+					<gmd:thesaurusName>
+						<gmd:CI_Citation>
+							<gmd:title>
+								<gco:CharacterString>NASA/GCMD Earth Science Keywords</gco:CharacterString>
+							</gmd:title>
+							<gmd:alternateTitle>
+								<gco:CharacterString>Temporal Data Resolution</gco:CharacterString>
+							</gmd:alternateTitle>
+							<gmd:date>
+								<gmd:CI_Date>
+									<gmd:date>
+										<gco:Date>2014-05-21</gco:Date>
+									</gmd:date>
+									<gmd:dateType>
+										<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
+									</gmd:dateType>
+								</gmd:CI_Date>
+							</gmd:date>
+							<gmd:collectiveTitle>
+								<gco:CharacterString>Olsen, L.M., G. Major, K. Shein, J. Scialdone, S. Ritz, T. Stevens, M. Morahan, A. Aleman, R. Vogel, S. Leicester, H. Weir, M. Meaux, S. Grebas, C.Solomon, M. Holland, T. Northcutt, R. A. Restrepo, R. Bilodeau, 2013. NASA/Global Change Master Directory (GCMD) Earth Science Keywords. Version 8.0.0.0.0</gco:CharacterString>
+							</gmd:collectiveTitle>
+						</gmd:CI_Citation>
+					</gmd:thesaurusName>
+				</gmd:MD_Keywords>
+			</gmd:descriptiveKeywords>
+			<gmd:resourceConstraints>
+				<gmd:MD_LegalConstraints> 
+					<gmd:accessConstraints> 
+						<gmd:MD_RestrictionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode" codeListValue="otherRestrictions" codeSpace="008">otherRestrictions</gmd:MD_RestrictionCode> 
+					</gmd:accessConstraints> 
+					<gmd:useConstraints> 
+						<gmd:MD_RestrictionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode" codeListValue="otherRestrictions" codeSpace="008">otherRestrictions</gmd:MD_RestrictionCode> 
+					</gmd:useConstraints> 
+					<gmd:otherConstraints> 
+						<gco:CharacterString>Access Constraints: No Access Constraints. Use Constraints: No Use Constraints.</gco:CharacterString> 
+					</gmd:otherConstraints> 
+				</gmd:MD_LegalConstraints> 
+			</gmd:resourceConstraints>
+			<gmd:language>
+				<gco:CharacterString>eng</gco:CharacterString>
+			</gmd:language>
+			<gmd:topicCategory>
+				<gmd:MD_TopicCategoryCode>biota</gmd:MD_TopicCategoryCode>
+			</gmd:topicCategory>
+			<gmd:extent>
+				<gmd:EX_Extent>
+					<gmd:geographicElement>
+						<gmd:EX_GeographicDescription>
+							<gmd:geographicIdentifier>
+								<gmd:MD_Identifier>
+									<gmd:authority>
+										<gmd:CI_Citation>
+											<gmd:title>
+												<gco:CharacterString>NASA/GCMD Earth Science Keywords</gco:CharacterString>
+											</gmd:title>
+											<gmd:alternateTitle>
+												<gco:CharacterString>Locations</gco:CharacterString>
+											</gmd:alternateTitle>
+											<gmd:date>
+												<gmd:CI_Date>
+													<gmd:date>
+														<gco:Date>2014-08-28</gco:Date>
+													</gmd:date>
+													<gmd:dateType>
+														<gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
+													</gmd:dateType>
+												</gmd:CI_Date>
+											</gmd:date>
+											<gmd:collectiveTitle>
+												<gco:CharacterString>Olsen, L.M., G. Major, K. Shein, J. Scialdone, S. Ritz, T. Stevens, M. Morahan, A. Aleman, R. Vogel, S. Leicester, H. Weir, M. Meaux, S. Grebas, C.Solomon, M. Holland, T. Northcutt, R. A. Restrepo, R. Bilodeau, 2013. NASA/Global Change Master Directory (GCMD) Earth Science Keywords. Version 8.0.0.0.0</gco:CharacterString>
+											</gmd:collectiveTitle>
+										</gmd:CI_Citation>
+									</gmd:authority>
+									<gmd:code>
+										<gco:CharacterString>UNITED STATES OF AMERICA &gt; ALASKA</gco:CharacterString>
+									</gmd:code>
+								</gmd:MD_Identifier>
+							</gmd:geographicIdentifier>
+						</gmd:EX_GeographicDescription>
+					</gmd:geographicElement>
+					<gmd:geographicElement>
+						<gmd:EX_GeographicBoundingBox>
+							<gmd:westBoundLongitude>
+								<gco:Decimal>-157.24</gco:Decimal>
+							</gmd:westBoundLongitude>
+							<gmd:eastBoundLongitude>
+								<gco:Decimal>-156.4</gco:Decimal>
+							</gmd:eastBoundLongitude>
+							<gmd:southBoundLatitude>
+								<gco:Decimal>70.27</gco:Decimal>
+							</gmd:southBoundLatitude>
+							<gmd:northBoundLatitude>
+								<gco:Decimal>71.18</gco:Decimal>
+							</gmd:northBoundLatitude>
+						</gmd:EX_GeographicBoundingBox>
+					</gmd:geographicElement>
+					<gmd:temporalElement>
+						<gmd:EX_TemporalExtent>
+							<gmd:extent>
+								<gml:TimePeriod gml:id="tp_4c1a919d-6690-11e3-9147-00c0f03d5b7c">
+									<gml:beginPosition>2012-08-07T00:00:00</gml:beginPosition>
+									<gml:endPosition>2013-08-04T00:00:00</gml:endPosition>
+								</gml:TimePeriod>
+							</gmd:extent>
+						</gmd:EX_TemporalExtent>
+					</gmd:temporalElement>
+				</gmd:EX_Extent>
+			</gmd:extent>
+		</gmd:MD_DataIdentification>
+	</gmd:identificationInfo>
+
+	<gmd:distributionInfo>
+ 		<gmd:MD_Distribution>
+			<gmd:distributionFormat>
+				<gmd:MD_Format>
+					<gmd:name>
+						<gco:CharacterString>Other ASCII</gco:CharacterString>
+					</gmd:name>
+					<gmd:version gco:nilReason="unknown"/>
+				</gmd:MD_Format>
+			</gmd:distributionFormat>
+			<gmd:distributor>
+				<gmd:MD_Distributor>
+					<gmd:distributorContact>
+						<gmd:CI_ResponsibleParty>
+							<gmd:organisationName>
+								<gco:CharacterString>UCAR/NCAR - CISL - ACADIS</gco:CharacterString>
+							</gmd:organisationName>
+							<gmd:role>
+								<gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="resourceProvider">resourceProvider</gmd:CI_RoleCode>
+							</gmd:role>
+						</gmd:CI_ResponsibleParty>
+					</gmd:distributorContact>
+				</gmd:MD_Distributor>
+			</gmd:distributor>
+			<gmd:transferOptions>
+				<gmd:MD_DigitalTransferOptions>
+					<gmd:onLine>
+						<gmd:CI_OnlineResource>
+							<gmd:linkage>
+								<gmd:URL>https://www.aoncadis.org/dataset/id/4c1a919d-6690-11e3-9147-00c0f03d5b7c.html</gmd:URL>
+							</gmd:linkage>
+							<gmd:protocol>
+								<gco:CharacterString>https</gco:CharacterString>
+							</gmd:protocol>
+							<gmd:applicationProfile>
+								<gco:CharacterString>browser</gco:CharacterString>
+							</gmd:applicationProfile>
+							<gmd:name>
+								<gco:CharacterString>Barrow Atqasuk ARCSS Plant</gco:CharacterString>
+							</gmd:name>
+							<gmd:description>
+								<gco:CharacterString>Metadata Link</gco:CharacterString>
+							</gmd:description>
+							<gmd:function>
+								<gmd:CI_OnLineFunctionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode" codeListValue="download">download</gmd:CI_OnLineFunctionCode>
+							</gmd:function>
+						</gmd:CI_OnlineResource>
+					</gmd:onLine>
+				</gmd:MD_DigitalTransferOptions>
+			</gmd:transferOptions>
+		</gmd:MD_Distribution>
+	</gmd:distributionInfo>
+
+</gmd:MD_Metadata>