Editing metadata for many ArcGIS items

Once metadata has been created, inevitably, some of the information it contains will change in time. If the information is specific to one ArcGIS item, you can edit its metadata to change the information. However, if the information that changed is included in the metadata for many ArcGIS items, the process of manually editing metadata for all affected items is very tedious.

The best approach for handling this situation is to create an XSLT stylesheet that can perform the edits for you. Use a model that edits the metadata with the XSLT Transformation tool, then imports the edited information back into the ArcGIS item using the Metadata Importer tool as illustrated below.

A geoprocessing model for updating metadata with an XSLT stylesheet.

Creating an XSLT stylesheet to update metadata

There are many resources available on the Internet that can help you learn how to create XSLT stylesheets. However, the examples below will help you get started. They illustrate how to change an organization's contact information.

Suppose the original metadata included a metadata contact as shown below, where

An excerpt of a metadata XML document where the an organization's contact information must be updated.

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <mdContact>
    <rpIndName>Reception</rpIndName>
    <rpOrgName>Esri Learning Center</rpOrgName>
    <rpCntInfo>
      <cntAddress>
        <delPoint>380 New York St.</delPoint>
        <city>Redlands</city>
        <adminArea>CA</adminArea>
        <postCode>92373</postCode>
        <country>US</country>
        <eMailAdd>info@esri.com</eMailAdd>
      </cntAddress>
      <cntPhone>
        <voiceNum>909-793-2853</voiceNum>
        <faxNum>909-793-4801</faxNum>
      </cntPhone>
    </rpCntInfo>
    <role>
      <RoleCd value="010"/>
    </role>
  </mdContact>
  ...
</metadata>

Some of this contact information must be edited as follows:

The rest of the contact information will stay the same.

The following XSLT stylesheet will perform these edits. The individual name metadata element will be removed. The entire address, with all its individual metadata elements, is updated at once. The phone number is updated separately from the rest of the phone information. To add the Web page and hours of availability, all other existing contact information must be copied so it isn't lost before the new information is added.

An XSLT stylesheet that edits contact information for one organization and copies all other metadata content.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" />

  <!-- process the metadata using the templates below -->
  <xsl:template match="/">
    <xsl:apply-templates select="node() | @*" />
  </xsl:template>

  <!-- copy all metadata conent -->
  <xsl:template match="node() | @*" priority="0">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
    </xsl:copy>
  </xsl:template>

  <!-- all metadata XSLT stylesheets used to update metadata should be identical to this example up to this point -->
  <!-- add the templates you'll use to update the metadata below -->

  <!-- remove the individual name from the contact information for the organization name Esri Learning Center -->
  <xsl:template match="rpIndName[../rpOrgName = 'Esri Learning Center']" priority="1" >
  </xsl:template>
  
  <!-- edit the address for any contact with the organization name Esri Learning Center -->
  <xsl:variable name="newAddress" >
    <cntAddress>
      <delPoint>380 New York St.</delPoint>
      <city>Redlands</city>
      <adminArea>CA</adminArea>
      <postCode>92373-8100</postCode>
      <country>US</country>
      <eMailAdd>LearnGIS@esri.com</eMailAdd>
    </cntAddress>
  </xsl:variable> 
  <xsl:template match="cntAddress[../../rpOrgName = 'Esri Learning Center']" priority="1" >
    <xsl:copy-of select="$newAddress" />
  </xsl:template>

  <!-- edit all contacts with the organization name Esri Learning Center to have a new phone number -->
  <xsl:variable name="newPhone">888-377-4575 x.1-3204</xsl:variable> 
  <xsl:template match="voiceNum[../../../rpOrgName = 'Esri Learning Center']" priority="1" >
    <voiceNum><xsl:value-of select="$newPhone" /></voiceNum>
  </xsl:template>
  
  <!-- add hours of availability for the organization name Esri Learning Center -->
  <xsl:template match="rpCntInfo[../rpOrgName = 'Esri Learning Center']" priority="1" >
    <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
      <cntOnlineRes>
        <linkage>http://www.esri.com/training</linkage>
      </cntOnlineRes>
      <cntHours>8:00am to 5:00pm Pacific Time</cntHours>
    </xsl:copy>
  </xsl:template>
  
</xsl:stylesheet>

When this XSLT is used to edit the example metadata shown above using the XSLT Transformation tool, the output XML file below will be created as output. Use the Metadata Importer tool to save these changes with the original ArcGIS item.

An excerpt of the updated metadata produced by the above XSLT stylesheet.

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <mdContact>
    <rpOrgName>Esri Learning Center</rpOrgName>
    <rpCntInfo>
      <cntAddress>
        <delPoint>380 New York St.</delPoint>
        <city>Redlands</city>
        <adminArea>CA</adminArea>
        <postCode>92373-8100</postCode>
        <country>US</country>
        <eMailAdd>LearnGIS@esri.com</eMailAdd>
      </cntAddress>
      <cntPhone>
        <voiceNum>888-377-4575 x.1-3204</voiceNum>
        <faxNum>909-793-4801</faxNum>
      </cntPhone>
      <cntOnlineRes>
        <linkage>http://www.esri.com/training</linkage>
      </cntOnlineRes>
      <cntHours>8:00am to 5:00pm Pacific Time</cntHours>
    </rpCntInfo>
    <role>
      <RoleCd value="010"/>
    </role>
  </mdContact>
  ...
</metadata>

Several XSLT stylesheets are provided with ArcGIS for Desktop to support the metadata geoprocessing models in the Conversion toolbox, in the <ArcGIS Installation Location>\Metadata\Stylesheets\gpTools folder. Use these as examples.

When creating your own stylesheets, it helps to understand the XML format you're working with. An XML DTD describing the ArcGIS metadata XML format is provided in the <ArcGIS Installation Location>\Metadata\Translator\Rules folder.

Related Topics

7/31/2012