编辑多个 ArcGIS 项目的元数据
创建元数据之后,其中包含的信息将会适时进行变更。如果信息特定于某一个 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 Desktop 提供多张 XSLT 样式表以支持“转换”工具集中的元数据地理处理模型,这些样式表位于 <ArcGIS Desktop 安装位置>\Metadata\Stylesheets\gpTools 文件夹。这些文件可用作示例。
创建您自己的样式表时,最好能够了解您正在使用的 XML 格式。描述 ArcGIS 元数据 XML 格式的 XML DTD 位于 <ArcGIS Desktop 安装位置>\Metadata\Translator\Rules 文件夹。