Редактирование метаданных для нескольких элементов ArcGIS

В созданных метаданных какая-то часть содержащейся в них информации будет неизбежно изменяться со временем. Если эта информация относится к одному элементу ArcGIS, то вы можете редактировать ее метаданные, чтобы информация изменилась. Однако, если информация, которая изменилась, была включена в метаданные нескольких элементов ArcGIS, то процесс редактирования вручную метаданных всех затронутых элементов будет очень утомительным.

Лучшим подходом, чтобы справиться с этой ситуацией, будет создание шаблона стилей XSLT, который способен выполнить для вас эту редакционную работу. Используйте модель для редактирования метаданных с помощью инструмента XSLT Трансформация (XSLT Transformation), затем импортируйте отредактированные данные обратно в элемент ArcGIS с помощью инструмента Импортер метаданных (Metadata Importer), как показано ниже.

Модель геообработки для обновления метаданных с помощью шаблона стилей XSLT.

Создание шаблона стилей XSLT для обновления метаданных

В интернете имеется множество ресурсов, которые могут помочь вам научиться создавать шаблоны стилей XSLT. Примеры ниже помогут вам начать делать это. Они покажут вам, как изменить контактную информацию организации.

Предположим, что оригинальные метаданные включали контакты, как показано ниже, где

Фрагмент документа метаданных XML, где требуется обновление контактной информации организации.

<?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>

Некоторые элементы данной контактной информации требуется изменить следующим образом:

Остальная информация остается без изменений.

Шаблон стилей XSLT выполнит следующие изменения. Элемент метаданных, отвечающий за индивидуальное имя, будет удален. Элементы метаданных, отвечающие за полный адрес, будут разом изменены (обновлены). Телефонный номер будет обновлен отдельно от остальной телефонной информации. Чтобы добавить страницу Web и часы работы, всю остальную существующую контактную информацию необходимо скопировать, чтобы она не потерялась до того, как будет добавлена новая информация.

Шаблон стилей XSLT изменит контактную информацию организации и скопирует все другие элементы метаданных.

<?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>

Когда этот XSLT используется для редактирования приведенного выше примера метаданных с помощью инструмента Преобразование XSLT ( XSLT Transformation), на выходе получим вновь созданный выходной XML-файл. Используйте инструмент Импортер метаданных (Metadata Importer), чтобы сохранить эти изменения в исходном объекте ArcGIS.

Фрагмент обновленных метаданных, полученных при помощи шаблона стилей XSLT.

<?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>

С ArcGIS for Desktop поставляется несколько шаблонов стилей XSLT, которые поддерживают модели геообработки метаданных, их можно открыть в наборе инструментов Конвертация (Conversion), из папки <ArcGIS Installation Location>\Metadata\Stylesheets\gpTools. Используйте их в качестве примеров.

Если вы собираетесь создавать собственные шаблоны стилей, полезно понять особенности формата XML, с которым вы работаете. Документ XML DTD с описанием формата метаданных XML для ArcGIS, находится в папке <ArcGIS Install Location>\Metadata\Translator\Rules.

Связанные темы

5/10/2014