创建元数据之后,其中包含的信息将会适时进行变更。如果信息特定于某一个 ArcGIS 项,您可以编辑其元数据,以对该信息进行更改。但如果所更改的信息包括在多个 ArcGIS 项的元数据中,手动编辑所有受影响项的元数据的过程将会十分繁琐。
处理这种情况的最佳方法是创建可为您执行编辑的 XSLT 样式表。使用通过 XSLT 变换工具编辑元数据的模型,然后按下图所示,使用元数据导入程序工具将已编辑信息导入回 ArcGIS 项。
创建 XSLT 样式表以更新元数据
Internet 上有许多可帮助您学习如何创建 XSLT 样式表的资源。然而,下面的示例对入门还是很有帮助的。这些示例介绍了如何更改组织的联系信息。
假设原始元数据包括元数据联系信息(如下所示),其中:
- 个人姓名为 Reception
- 组织名称为 Esri Learning Center
- 街道地址为 380 New York St.
- 城市为 Redlands
- 州为加利福尼亚,CA
- 邮政编码为 92373
- 国家为美国 US
- 电子邮件地址为 info@esri.com
- 电话号码为 909-793-2853
- 传真号码为 909-793-4801
- 为此联系人指定的角色为发布者,010
必须更新组织联系信息的元数据 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>
此联系信息的某些部分必须按以下方式编辑:
- 移除联系信息中的个人姓名。
- 将邮政编码更改为 92373-8100。
- 将电子邮件地址更改为 LearnGIS@esri.com。
- 将电话号码更改为 888-377-4575 x.1-3204。
- 添加用于在 Internet 上查找信息的网页的地址 http://www.esri.com/training。
- 添加可以联系组织的时间信息 8:00am to 5:00pm Pacific Time。
其余联系信息保持不变。
下面的 XSLT 样式表将执行这些编辑。个人姓名元数据元素将被移除。一次更新整个地址及其所有单独元数据元素。与其余电话信息分开对电话号码进行更新。要添加网页和可用时间,必须复制其他所有现有联系信息,这样,这些信息便不会在新信息添加之前丢失。
以下是编辑某组织的联系信息并复制所有其他元数据内容的 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 用于编辑如上所示的示例元数据时,下面的输出 XML 文件将被创建为输出。使用“元数据导入程序”程序保存原始 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 样式表来支持“转换”工具箱中的元数据地理处理模型,这些样式表位于 <ArcGIS 安装位置>\Metadata\Stylesheets\gpTools 文件夹中。这些文件可用作示例。
创建您自己的样式表时,最好能够了解您正在使用的 XML 格式。描述 ArcGIS 元数据 XML 格式的 XML DTD 位于 <ArcGIS 安装位置>\Metadata\Translator\Rules 文件夹中。