XSLT 变换 (Conversion)
摘要
此工具使用 .NET 3.5 XML 软件对 ArcGIS 项目的元数据或使用 XSLT 1.0 样式表的任何 XML 文件进行转换,并将结果保存至某个 XML 文件。
XSLT 样式表可用于对 ArcGIS 元数据或 XML 文件执行多种修改。ArcGIS for Desktop 提供了几种 XSLT 样式表。可以在 <ArcGIS 安装位置>\Metadata\Stylesheets 文件夹中找到这些样式表。下表描述了这些样式表。
下列样式表生成的 HTML 文档用于显示有关描述选项卡中的项目的信息。它们从项目的元数据提取内容,并将 HTML 格式说明添加至该内容。这些样式表从 ArcGIS_Imports 文件夹中的其他文件导入多个 XSLT 模板;已导入的模板执行大部分工作。如果要为显示创建自定义样式表,可以通过阅读 ArcGIS 元数据工具包提供的文档了解有关这些样式表的详细信息。
ArcGIS.xsl | 显示项目的完整元数据内容。除默认的“项目描述”样式以外所有的元数据样式都会引用该文件。 |
ArcGIS_ItemDescription.xsl | 仅显示项目的简要描述。默认“项目描述”元数据样式会引用该文件。 |
<ArcGIS 安装位置>\Metadata\Stylesheets\gpTools 文件夹提供了下列样式表,它们采用项目的元数据并对其进行处理,然后将生成的 XML 文档保存至一个新的 XML 文件。该操作的目标可能是在 ArcGIS 外部使用项目元数据前对该元数据进行过滤。或者,目标可能是更改项目的元数据;在这种情况下,可以将生成的 XML 文件保存回到原始项目,因为其元数据会使用元数据导入程序工具。可以创建模型或脚本,所创建的内容首先运行含有样式表的此工具以更新元数据内容,然后将更改立即保存回到该项目。下列样式表随 ArcGIS for Desktop 提供,用于执行某些明确定义的元数据任务。
add unique identifier.xslt | 添加或更改唯一标识符,该标识符存储在项目的元数据中。通过此样式表修改的标识符存储在 Esri 的 PublishedDocID 元数据元素中,可使用该标识符来标识元数据目录中的文档,如 ArcIMS 元数据服务或 Geoportal。 |
exact copy of.xslt | 以 XML 文件的形式创建项目元数据的精确副本。例如,您可能会使用此样式表将地理数据库项目的元数据副本保存至本地文件以供检查。 |
generate metadata template.xslt | 将 ArcGIS 元数据内容以元数据模板的形式复制到可以导入其他项目的新 XML 文件。从模板中排除同步的元数据内容并移除任何空元素。 |
remove empty elements.xslt | 移除空的 XML 元素。在使用其他样式表移除不需要的元数据内容后,空的 XML 元素可能得以保留。如果您稍后尝试验证项目的元数据,则空的 XML 元素可能会导致出现问题。例如,如果某个元素为可选元素但为空,则您会经常因为该元素没有值而收到一条错误消息,而一旦移除了空元素,元数据将变得有效。 |
remove entries from FGDC lineage.xslt | 删除 ArcGIS Desktop 9.3.1 添加到 FGDC 格式谱系的过程步骤。当将元数据导入某个项目并将该项目复制到新位置时,会将过程步骤添加到 FGDC 格式谱系。不会将此信息添加到使用当前版本的 ArcGIS 的项目谱系,并且也不会升级至 ArcGIS 元数据格式以及其他项目谱系。 |
remove FGDC required hints.xslt | 删除包含文本 REQUIRED 的任何 FGDC 格式的元数据元素。在创建 FGDC 格式的元数据时由 ArcGIS Desktop 9.3.1 添加这些文本字符串,以表示要创建有效的 FGDC CSDGM 元数据需要元数据元素。但是,如果您稍后尝试验证项目的元数据,则这些字符串可能会导致出现问题。当存在默认文本时该元素会被视为有效元素,这是因为即使文本不提供有关此项目的任何信息,该元素中也会包含文本。当前版本的 ArcGIS 不会添加默认文本字符串,并且这些字符串也不会升级至 ArcGIS 元数据格式以及项目的其他元数据内容。 |
remove geoprocessing history.xslt | 删除项目的地理处理历史。尽管所有的元数据地理处理工具都旨在保存项目的地理处理历史,但随着时间的推移,历史记录的容量变得很大,人们很难以 XML 文档的形式对项目的元数据进行处理。在这些情况下,可能需要删除项目的地理处理历史。 |
remove local storage info.xslt | 删除项目的元数据中可能存在的任意计算机名称。根据找到计算机名称的位置,可以删除包含信息的元数据元素或从 UNC 路径中删除计算机名称,或者可以更新元素的值以确定保留的位置。 |
remove pre94 metadata elements.xslt | 删除任意 ESRI-ISO 格式 XML 元素,并从项目元数据中删除 ArcGIS 元数据格式中所不包括的任意 FGDC CSDGM 格式 XML 元素。 |
remove synchronized elements.xslt | 删除由 ArcGIS 元数据同步过程添加到项目元数据的任意信息。 |
remove thumbnail.xslt | 删除项目的缩略图。尽管所有的元数据地理处理工具都旨在保存项目的缩略图,但在某些情况下可能要删除项目的缩略图。您可以在在“描述”选项卡中编辑某个项目的元数据时删除其缩略图。使用此脚本,可以运行批处理删除多个项目的缩略图。 |
remove unique identifiers.xslt | 删除项目元数据的所有唯一标识符,其中包括 ArcGIS 可能添加的所有标识符和使用元数据编辑器提供的任意标识符。不得将标识符复制到另一个项目。 |
_MPXML2.xsl | 从项目的元数据中提取 FGDC CSDGM 格式 XML 元素(如果存在),并对其进行正确排序。通过此样式表提取的信息是在描述选项卡的 FGDC 元数据(只读)标题下方显示的内容。 |
元数据地理处理工具使用 ArcGIS for Desktop 提供的某些样式表执行部分导入、导出和升级过程:
- _MPXML2.xsl
- merge imported metadata with existing.xslt
- merge upgraded FGDC with existing.xslt
- prep metadata for export.xslt
- remove empty elements.xslt
- remove FGDC required hints.xslt
- remove synchronized elements.xslt
- remove unique identifiers.xslt
- upgrade ESRI-ISO to ArcGIS94.xslt
可基于所提供的样式表来创建您自己的 XSLT 样式表以执行任务。例如,您可能会为执行以下操作而编写一个样式表:
- 更新地址或电话号码。创建用于运行此过程的模型,然后使用元数据导入程序工具将更新的元数据保存到原始 ArcGIS 项目。
- 在导出或发布元数据之前,删除不希望公开的信息。在运行导出元数据或元数据发布程序工具之前,创建用于运行此过程的模型。
- 将信息导出至 HTML 文件,以便可以将此信息合并到网站中。定期创建用于运行此过程的脚本。
XSLT 样式表用于修改 ArcGIS 元数据,但不应删除 ESRI 及“进制元数据元素中的信息,在 ArcGIS 外部使用输出 XML 时除外。
用法
-
由 XSLT 样式表生成的输出文件可被格式化为多种格式,例如 XML、HTML 或文本格式。对于本工具所提供的默认输出文件名,其扩展名为 .xml。若使用的 XSLT 样式表无法生成 XML 文件,则应为文件名指定一个适合的文件扩展名。
对于使用旧版本 XSL 样式表(ArcGIS Desktop 9.3.1 及更早版本中所提供 XSL 样式表)的 ArcGIS 项的元数据或独立元数据 XML 文件,本工具无法处理,因为这些元数据或 XML 文件不支持 XSLT 1.0 技术。其使用的技术较老,.NET 3.5 Framework 不支持该技术。这些 XSL 样式表也不能在 ArcGIS 元数据编辑器中使用。
-
XSLT 参数可将字符串或 XML 文件名传递给 XSLT 样式表,然后使用所传递的参数来修改项的元数据。例如,XSLT 样式表可将电话号码以字符串的形式进行传递,并更新元数据中的所有电话号码。若使用此参数传递 XML 文件,则 XSLT 样式表可将文件中包含的信息与源元数据合并。
有关如何传递值的示例,请参考 ArcGIS 随附的文件 add unique identifier.xslt;有关如何将单独 XML 文件中的信息与 ArcGIS 项的元数据进行合并的示例,请参考文件 merge upgraded FGDC with existing.xslt。
若需创建一个自定义 XSLT 样式表来显示(或导出)ArcGIS 中的元数据(或 XML 文件),则请参阅 .NET 3.5 Framework 的 Microsoft 文档,其中包含有关 XSLT 和 XPath 元素、函数及其所支持语法的完整列表。除某些标准 XSLT 函数外,还可以提供一些 .NET 特定函数。
若想在 ArcGIS 内外部都能使用自定义样式表,则应尽量使用 XSLT 1.0 与 XPath 1.0 元素、函数及语法,这样会大大提高操作成功的概率。非 Microsoft 应用程序可能不支持任何 .NET 特定 XSLT 和 XPath 函数。
XSLT 样式表是唯一能同本地理处理工具及 ArcGIS 元数据编辑器一起使用的样式表,该样式表可通过某些 ArcGIS 提供的自定义 XSLT 函数来提高元数据的处理能力和显示效果。要使用这些函数,XSLT 样式表必须参考 ArcGIS XSLT 函数命名空间的 URI http://www.esri.com/metadata/。例如,<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:esri="http://www.esri.com/metadata/">>。
必须在 ArcGIS XSLT 函数的开头为 ArcGIS XSLT 函数命名空间指定前缀。如果为 ArcGIS XSLT 函数命名空间指定前缀 esri(如上例所示),则可按以下方法使用 GuidGen() 函数:<xsl:value-of select="esri:GuidGen()" />。
- GuidGen() - 返回一个新的全局唯一标识符 (GUID) 值,不包括大括号({ 与 })。例如,元数据中可包含 GUID,以唯一标识元数据文档或该文档所描述的资源。有关示例,请参考 ArcGIS 提供的 add unique identifier.xslt 文件。
- decodenodeset() - 如果 XML 元素包含转义的 XHTML 或 XML,则此函数将返回节点集,可将该节点集与 msxsl:node-set 函数结合使用来处理先前转义的各元素。有关示例,请参考 ArcGIS 提供的 ESRIISO2.xslt 和 ItemDescription.xslt 文件。例如,项目的空间参考属性以转义的 XML 数据的形式自动存储在项目的元数据中。对于准备在发布 ArcGIS Online 时在元数据编辑器中标记的摘要和使用限制内容,将以转义的 XHTML 的形式存储。
- splitcoords() - 采用逗号分隔的 x,y 坐标对,并将它们转换为空格分隔的列表。有关示例,请参考 ArcGIS 提供的 upgrade ESRI-ISO to ArcGIS94.xslt 文件。
- strtoupper() - 将输入文本字符串更改为所有字母均为大写形式。有关示例,请参考 ArcGIS 提供的 add unique identifier.xslt 文件。
- striphtml() - 如果 XML 元素包含转义的 XHTML 或 XML,则此函数将返回其中所含的文本,但会删除所有标记。也就是说,会将两个小于 (<) 或大于 (>) 字符之间的任何内容假设为标记并将其删除。有关示例,请参考 ArcGIS 提供的 ESRIISO2.xslt、ItemDescription.xslt 和 prep metadata for export.xslt 文件。例如,在准备将摘要和使用限制元素的内容导出为标准元数据格式时,将会从元数据内容中删除存在的任意 XHTML 标记。
- strtolower() - 将输入文本字符串更改为所有字母均为小写形式。有关示例,请参考 ArcGIS 提供的 auxCountries.xslt、auxLanguages.xslt 和 auxUCUM.xslt 文件。
-
源元数据参数具有复杂的数据类型。如果在模型中使用此工具,需要在模型构建器中为源元数据参数创建变量,方法是右键单击此工具,然后选择获取变量 > 从参数 > 源元数据。
-
如果某个 ArcGIS 项目包含的元数据是在 ArcGIS Desktop 9.3.1 或更早版本中使用 FGDC 元数据编辑器创建而成,或者是在当前 ArcGIS for Desktop 版本中使用 FGDC 元数据编辑器加载项创建而成,并且项目的元数据已升级为 ArcGIS 元数据,则 ArcGIS 元数据将继续保留原始的 FGDC 元数据 XML 元素。此元数据还将包含其他 ArcGIS 元数据元素。
可结合 ArcGIS 提供的 _MPXML2.xsl 文件,利用此工具导出原始 FGDC 元数据元素。在上例中,此文件将仅导出项目的原始 FGDC 格式元数据内容,即在描述选项卡的 FGDC 元数据(只读)标题下方显示的信息。在输出 XML 文件中,FGDC 元素将按正确方式排序。
导出的文件可用“FGDC XML 模式”、DTD 或 USGS 元数据工具(通常称为 mp)进行验证。USGS MP 元数据转换程序会在处理项目的 FGDC 格式元数据内容之前内部执行此操作。
-
对于以 HTML 格式发布至外部网站上的元数据,Internet 搜索引擎(如 Google)将为其建立索引,前提是该网站能正确显示其内容。
语法
参数 | 说明 | 数据类型 |
source |
要进行元数据转换的项,或者要进行转换的独立 XML 文件。 | Data Element; Layer |
xslt |
符合 W3C 规范的 XSLT 1.0 样式表文件用于定义将要执行的转换。 ArcGIS 提供了几种样式表,可以在 <ArcGIS 安装位置>\Metadata\Stylesheets 文件夹中找到这些样式表。 | File |
output |
要创建的文件,用于包含转换后的元数据。 所创建文件的类型取决于 XSLT 样式表所指定的输出方式。 | File |
xsltparam (可选) |
将被传递给 XSLT 样式表的 XML 文件或字符串。 如要获得 XSLT 样式表中的此参数,需在 XSLT 样式表顶端,xsl:output 元素之后,第一个 xsl:template 元素之前添加 <xsl:param name="gpparam" />。有关示例,请参考 add unique identifier.xslt 文件。 | File; String |
代码实例
使用 ArcGIS 提供的 XSLT 样式表 ArcGIS.xsl 将元数据导出为可在网站上使用的 HTML 文件。
import arcpy
from arcpy import env
env.workspace = "C:/data"
#set local variables
dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
xslt = dir + "Metadata/Stylesheets/ArcGIS.xsl"
arcpy.XSLTransform_conversion("vegetation", xslt, "vegetation.html", "#")