摘要
Metadata 类可用于存取项目的元数据,并将元数据导出为标准元数据格式。如果您具有相应权限,则该类允许您修改项目的元数据,或将标准格式的元数据 XML 文件的内容导入到项目中。
语法
Metadata ({uri})
参数 | 说明 | 数据类型 |
uri | 用于标识要更新其元数据的项目的 URI。 | String |
提供 URI 后,返回的 Metadata 对象将提供对 URI 所标识项目的元数据的访问权限。如果尚未创建用于描述项目的元数据,并且您具有足够的权限来创建元数据,则将为项目创建元数据,且新的元数据文档的内容将由返回的对象表示。如果项目不支持元数据,或者项目不存在,则会创建一个空对象;否则,无法将更改保存回项目。
在未提供 URI 的情况下创建 Metadata 对象时,会创建一个空对象。您可以使用 Metadata 对象创建或导入元数据,然后将其内容保存到新的 XML 文件或作为其元数据保存到另一个项目。
你也可以从工程、地图、地图图层、布局和报告中获取 Metadata 对象,并使用该对象访问和管理其元数据。
创建一个 Metadata 对象并定义其内容,然后为要素类获取 Metadata 对象。将新 Metadata 对象的新内容分配给要素类。
import arcpy
from arcpy import metadata as md
# Create a new Metadata object and add some content to it
new_md = md.Metadata()
new_md.title = 'My Title'
new_md.tags = 'Tag1, Tag2'
new_md.summary = 'My Summary'
new_md.description = 'My Description'
new_md.credits = 'My Credits'
new_md.accessConstraints = 'My Access Constraints'
# Assign the Metadata object's content to a target item
streets_path = r'C:\Data\LocalArea.gdb\Streets'
tgt_item_md = md.Metadata(streets_path)
if not tgt_item_md.isReadOnly:
tgt_item_md.copy(new_md)
tgt_item_md.save()
从工程中获取 Metadata 对象。
import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\data_management.aprx")
aprx_metadata = aprx.metadata
print(aprx_metadata.title)
print(aprx_metadata.description)
使用 Python 窗口从当前地图获取 Metadata 对象。
import arcpy aprx = arcpy.mp.ArcGISProject("CURRENT") current_map = aprx.activeMap map_metadata = current_map.metadata print(map_metadata.title) print(map_metadata.description)
从地图图层获取 Metadata 对象。
import arcpy aprx = arcpy.mp.ArcGISProject(r"C:\Projects\data_management.aprx") layer = aprx.listMaps()[0].listLayers()[0] layer_metadata = layer.metadata print(layer_metadata.title) print(layer_metadata.description)
属性
属性 | 说明 | 数据类型 |
accessConstraints (可读写) | 有关使用项目的书面限制。派生自在项目元数据中定义的使用限制。 | String |
credits (可读写) | 提供项目制作者或提供者名单的信息。派生自在项目元数据中定义的制作者。 | String |
description (可读写) | 项目的描述。派生自在项目元数据中定义的描述(摘要),或地理处理工具的汇总(摘要)。 此属性可包含纯文本,也可包含 HTML 片段。在 ArcGIS Desktop 或 ArcGIS Pro,或者在 ArcGIS Online 或 Enterprise 门户内的 ArcGIS 元数据编辑器中写入描述时,该描述将包含 HTML 标签。 | String |
isReadOnly (只读) | 检查是否可以更新由 Metadata 对象表示其元数据的项目的元数据。如果创建了一个新的空 Metadata 对象,则 Metadata 对象尚未与磁盘上的项目或 XML 文件关联,但其可写入,因为您可以修改 Metadata 对象的内容,然后将其写入磁盘或将内容保存到您对其具有相应编辑元数据权限的项目。 | Boolean |
maxScale (只读) | 项目绘制时应采用的最大地图比例。派生自在项目元数据中定义的适当比例范围中的最大值。 | Double |
minScale (只读) | 项目绘制时应采用的最小地图比例。派生自在项目元数据中定义的适当比例范围中的最小值。 | Double |
summary (可读写) | 描述项目用途的摘要。派生自在项目元数据中定义的摘要(用途)。 | String |
tags (可读写) | 一组描述项目的标签。派生自在项目元数据中定义的标签。该值是一个字符串,用于定义标签的逗号分隔序列。 | String |
thumbnailUri (可读写) | 图形文件的本地或网络路径或 URL,该图形文件用于描述并帮助标识项目。派生自从项目元数据中提取的缩略图。设置此值时,如果提供了 URL,则将下载已标识的文件并将其加入到项目的元数据中。 | String |
title (可读写) | 项目的描述性标题。派生自项目元数据中的标题。 | String |
xmax (只读) | 项目的最小外接矩形沿 x 轴的最大值。派生自在项目元数据中记录的边界框的东经坐标。 | Double |
xmin (只读) | 项目的最小外接矩形沿 x 轴的最小值。派生自在项目元数据中记录的边界框的西经坐标。 | Double |
xml (可读写) | 项目作为字符串的 ArcGIS 元数据 XML 文档。并非所有项目都支持元数据。获取项目的元数据时,请确保检查返回值是否有空字符串。 | String |
ymax (只读) | 项目的最小外接矩形沿 y 轴的最大值。派生自在项目元数据中记录的边界框的北纬坐标。 | Double |
ymin (只读) | 项目的最小外接矩形沿 y 轴的最小值。派生自在项目元数据中记录的边界框的南纬坐标。 | Double |
方法概述
方法 | 说明 |
copy (inputMetadata) | 将元数据内容从输入 Metadata 对象复制到当前 Metadata 对象。例如,这支持将元数据从一个项目复制到另一个项目。 |
importMetadata (sourceUri, {metadata_import_option}, {customStylesheetPath}) | 将内容从由 sourceURI 标识的项目导入到 Metadata 对象。 |
exportMetadata (outputPath, {metadata_export_option}, {metadata_removal_option}, {customStylesheetPath}) | 用于转换 Metadata 对象,用于将项目的元数据表示为标准格式元数据 XML 文件。 |
reload () | 使用项目的当前元数据内容重新初始化 Metadata 对象。 |
save () | 将对 Metadata 对象中内容所做的更新保存回 Metadata 对象派生的原始项目。 |
saveAsUsingCustomXSLT (outputPath, customStylesheetPath) | 使用自定义 XSLT 样式表将项目的 ArcGIS 元数据副本保存到独立的元数据 XML 文件中。 |
saveAsXML (outputPath, {metadata_save_as_xml_option}) | 将项目的 ArcGIS 元数据副本保存到独立的元数据 XML 文件。 |
synchronize (metadata_sync_option, interval) | 使用项目的当前属性更新项目中的元数据内容,并将该内容重新加载到 Metadata 对象。 |
upgrade (metadata_upgrade_option) | 升级当前项目的元数据。 |
方法
copy (inputMetadata)
参数 | 说明 | 数据类型 |
inputMetadata | 使用元数据内容(采用 ArcGIS 元数据格式)创建并填充的 Metadata 对象。例如,此 Metadata 对象可派生自源要素类并复制到与当前 Metadata 对象关联的要素类。 | Object |
项目的元数据必须以 ArcGIS 元数据 XML 格式进行存储。只能复制 ArcGIS 元数据格式的元数据内容。
将元数据从元数据模板复制到当前工程中的地图。
import arcpy
from arcpy import metadata as md
# Get metadata content from a metadata template XML file
template_path = r'C:\Metadata\ArcGIS_metadata_template.xml'
src_item_md = md.Metadata(template_path)
# Copy the template's content to a map in the project
current_aprx = arcpy.mp.ArcGISProject('CURRENT')
map0 = current_aprx.listMaps()[0]
map0_md = map0.metadata
map0_md.copy(src_item_md)
map0_md.save()
current_aprx.save()
importMetadata (sourceUri, {metadata_import_option}, {customStylesheetPath})
参数 | 说明 | 数据类型 |
sourceUri | URI,用于标识将导入到 Metadata 对象的元数据的项目。 | String |
metadata_import_option | 此选项用于确定将内容从源项目导入到 Metadata 对象的方式。此值指示存储在源项目中的元数据的 XML 格式。源项目的内容将被从指定格式转换为 ArcGIS 元数据 XML 格式,然后再保存到 Metadata 对象。
(默认值为 DEFAULT) | String |
customStylesheetPath | 本地或网络文件路径或 URL,用于标识将用于导入自定义 XML 格式的元数据的自定义 XSLT 样式表。仅当 metadata_export_option 为 CUSTOM 时,才将考虑此参数中的值。如果为 URL,则将下载引用的文件,并将使用下载的文件。 | String |
项目的元数据必须以 ArcGIS 元数据 XML 格式进行存储。导入的 XML 文件将使用由 metadata_import_option 标识的转换从标准元数据 XML 格式转换为 ArcGIS 元数据格式。生成内容存储在 Metadata 对象中。项目的许多属性、其缩略图和地理处理历史记录都将保留。但是,之前使用元数据编辑器输入的所有元数据内容都将移除,替换为导入的元数据内容。
如果独立的元数据文件的格式包含与 metadata_import_option 指定格式不匹配的 XML 格式,则将执行错误的转换,且不会将元数据内容导入到项目。但是,仍将作为流程的一部分移除项目现有的已输入元数据内容。
如果不确定文件的格式,请从标准格式的 XML 文件中导入元数据内容。DEFAULT 导入选项可检测文件的格式,并将其转换为 ArcGIS 元数据格式。
import arcpy
from arcpy import metadata as md
# Set the standard-format metadata XML file's path
src_file_path = r'C:\Metadata\trees_metadata.xml'
# Get the target item's Metadata object
trees_path = r'C:\Data\LocalArea.gdb\Trees'
tgt_item_md = md.Metadata(trees_path)
# Import the standard-format metadata content to the target item
if not tgt_item_md.isReadOnly:
tgt_item_md.importMetadata(src_file_path)
tgt_item_md.save()
将 FGDC CSDGM 格式的 XML 文件中的元数据内容导入到目标项目。
import arcpy
from arcpy import metadata as md
# Get the standard-format metadata XML file's object
src_csdgm_path = r'C:\Metadata\parks_csdgm.xml'
# Get the target item's Metadata object
parks_path = r'C:\Data\LocalArea.gdb\Parks'
tgt_item_md = md.Metadata(parks_path)
# Import the standard-format metadata content to the target item
if not tgt_item_md.isReadOnly:
tgt_item_md.importMetadata(src_csdgm_path, 'FGDC_CSDGM')
tgt_item_md.save()
exportMetadata (outputPath, {metadata_export_option}, {metadata_removal_option}, {customStylesheetPath})
参数 | 说明 | 数据类型 |
outputPath | 输出 XML 文件。 | String |
metadata_export_option | 用于指定导出项目元数据的方式。该值将指示输出 XML 文件将使用的 XML 格式。可将项目的 ArcGIS 元数据内容转换为相应 XML 格式。
(默认值为 ISO19139) | String |
metadata_removal_option | 用于指定在导出过程中是否从项目的元数据中移除敏感信息。该值用于指示将滤出的内容。将导出其余元数据内容。
(默认值为 REMOVE_ALL_SENSITIVE_INFO) | String |
customStylesheetPath | 本地或网络文件路径或者 URL,用于标识将用于将元数据导出为自定义 XML 格式的自定义 XSLT 样式表。仅在 metadata_export_option 为 CUSTOM 时才会考虑此参数中的值。如果是 URL,则将下载引用的文件,并将使用下载的文件。 | String |
项目的元数据将以 ArcGIS 元数据 XML 格式存储。项目的元数据将转换为 metadata_export_option 参数标识的符合标准的元数据 XML 格式。生成的 XML 文档将保存到一个 XML 文件。
在转换项目的元数据之前,可以选择是否过滤项目的 ArcGIS 元数据内容。例如,如果您打算与组织外的用户共享导出的元数据文档,则最好排除任何可能视为对组织敏感的信息。过滤的内容量将由 metadata_removal_option 参数确定。
在导出过程开始之前,您可能需要同步项目的元数据,以使其包含数据的最新属性。
同步项目的属性,然后导出最新的元数据内容。将项目的元数据导出为标准元数据 XML 格式,以在 ArcGIS 平台外共享此信息。
import arcpy
from arcpy import metadata as md
# Get the source item's Metadata object
streets_path = r'C:\Data\LocalArea.gdb\Streets'
src_item_md = md.Metadata(streets_path)
# Synchronize the item's metadata now
src_item_md.synchronize('ALWAYS')
# Export the item's metadata using the default export format (ISO 19139)
# after removing sensitive information from the metadata, if it exists.
export_19139_path = r'C:\MetadataExport\streets_19139.xml'
src_item_md.exportMetadata(export_19139_path,
metadata_removal_option='REMOVE_ALL_SENSITIVE_INFO')
# Export the item's metadata to the FGDC CSDGM XML format as well
export_csdgm_path = r'C:\MetadataExport\streets_csdgm.xml'
src_item_md.exportMetadata(export_csdgm_path, 'FGDC_CSDGM',
'REMOVE_ALL_SENSITIVE_INFO')
# Export the metadata using the specified custom XSLT stylesheet, for
# example, to generate a custom HTML format for display outside ArcGIS
export_custom_path = r'C:\MetadataExport\streets_custom.html'
custom_html_export_path = r'C:\MetadataExport\custom_html_output.xslt'
src_item_md.exportMetadata(export_custom_path, 'CUSTOM',
'REMOVE_ALL_SENSITIVE_INFO',
custom_html_export_path)
reload ()
使用项目的元数据初始化 Metadata 对象。在工作进程中,项目的元数据内容可能会由外部进程修改。此函数可用于将项目的当前元数据内容重新加载到 Metadata 对象。例如,如果您使用 ArcGIS Pro 元数据编辑器将更改保存到项目的元数据,则更改不会立即反映在您正在使用的 Python 窗口中的 Metadata 对象中。使用此函数可在继续工作之前重新初始化 Metadata 对象。
从源重新加载项目的元数据以查看最新更改。此脚本专为在 Python 窗口中工作而设计。
import arcpy
from arcpy import metadata as md
# Get a map layer's Metadata object
aprx = arcpy.mp.ArcGISProject("CURRENT")
currentMap = aprx.activeMap
first_lyr = currentMap.listLayers()[0]
lyr_metadata = first_lyr.metadata
# Print the original set of tags
lyr_tags_orig = lyr_metadata.tags
if lyr_tags_orig is not None:
print('Original tags: ' + lyr_tags_orig)
else:
print('Original tags: None')
# Update tags in the item's metadata, but don't save the changes
lyr_metadata.tags = 'Apple, Banana, Cherry'
# Print the updated set of tags
print('Updated tags: ' + lyr_metadata.tags)
# Reloading metadata lets you access updates made externally,
# but you will lose any unsaved changes
lyr_metadata.reload()
# Print the reloaded set of tags
lyr_tags_reload = lyr_metadata.tags
if lyr_tags_reload is not None:
print('Reloaded tags: ' + lyr_tags_reload)
else:
print('Reloaded tags: None')
save ()
当您对存储在 Metadata 对象中的元数据内容进行更改时,这些更改不会自动保存回 Metadata 派生对象的源项目。更改仅在使用 save 函数时才会保存回项目。您必须具有相应权限才能更新原始项目的元数据。
例如,如果 Metadata 对象表示当前工程中地图的元数据,则此函数将更新地图的元数据。对于存储在工程中的项目,只有在保存工程后,才会真正保存元数据更改;如果工程在未保存时即关闭,则您对地图元数据所做的更改将丢失。
如果创建了一个新的空 Metadata 对象,并且您将内容添加到此新的元数据文档中,则此函数将失败并显示一条错误消息,因为该函数未与现有项目关联。将 Metadata 对象分配给项目以使用在 Metadata 对象中定义的内容更新其元数据。
更新项目元数据中的标签。您必须具有相应权限才能更新项目的元数据。
import arcpy
from arcpy import metadata as md
# Get the target item's Metadata object
hydrants_path = r'C:\Data\LocalArea.gdb\Hydrants'
item_md = md.Metadata(hydrants_path)
# Save the changes if you have privileges in the geodatabase to do so
if not item_md.isReadOnly:
# Update the tags in the item's metadata, then save the changes
item_md.tags = 'One, Two, Three'
tgt_item_md.save()
saveAsUsingCustomXSLT (outputPath, customStylesheetPath)
参数 | 说明 | 数据类型 |
outputPath | 输出 XML 文件。 | String |
customStylesheetPath | 本地或网络文件路径或 URL,用于标识将用于转换项目的 ArcGIS 元数据的自定义 XSLT 样式表。如果是 URL,则将下载引用的文件,并将使用下载的文件。 | String |
使用自定义 XSLT 样式表修改项目的 ArcGIS 元数据并将结果保存到 XML 文件。然后,将更新后的元数据内容保存回原始项目。本示例中使用的自定义 XSLT 样式表是 ArcMap 随附的样式表,用于从项目的元数据中移除项目的地理处理历史记录,并将在 ArcGIS Pro 中继续工作。
import arcpy
from arcpy import metadata as md
# Get the item's Metadata object
street_lights_path = r'C:\Data\LocalArea.gdb\StreetLights'
src_item_md = md.Metadata(street_lights_path)
# Save the item's metadata to an xml file using a custom XSLT
target_file_path = r'C:\MetadataInternal\street_lights_no_gp_history.xml'
custom_xslt_path = r'C:\MetadataInternal\remove geoprocessing history.xslt'
src_item_md.saveAsUsingCustomXSLT(target_file_path, custom_xslt_path)
# Save the modified ArcGIS metadata output back to the source item
tgt_item_md = md.Metadata(target_file_path)
src_item_md.copy(tgt_item_md)
src_item_md.save()
saveAsXML (outputPath, {metadata_save_as_xml_option})
参数 | 说明 | 数据类型 |
outputPath | 输出 XML 文件。输出文件将包含以 ArcGIS Metadata XML 格式存储的元数据。 | String |
metadata_save_as_xml_option | 指定在将项目的元数据保存到独立的元数据 XML 文件的流程中,是否从项目的元数据中移除信息。该值指示从项目的元数据中滤出的内容量和内容类型。
(默认值为 EXACT_COPY) | String |
将项目的 ArcGIS 元数据的两个副本保存到磁盘。一个副本与随项目存储的元数据完全匹配,另一个文件的元数据内容已过滤并移除敏感内容。
import arcpy
from arcpy import metadata as md
# Get the item's Metadata object
street_lights_path = r'C:\Data\LocalArea.gdb\StreetLights'
src_item_md = md.Metadata(street_lights_path)
# Save a copy of the item's metadata to an xml file as a backup.
# This copy is for internal use only.
target_copy_path = r'C:\MetadataInternal\street_lights_copy.xml'
src_item_md.saveAsXML(target_copy_path)
# Save a version of the item's metadata without sensitive information
# separately so it can be shared externally.
target_filtered_path = r'C:\MetadataExternal\street_lights_no_sensitive.xml'
src_item_md.saveAsXML(target_filtered_path, 'REMOVE_ALL_SENSITIVE_INFO')
synchronize (metadata_sync_option, interval)
参数 | 说明 | 数据类型 |
metadata_sync_option | 指定使用数据的当前属性更新元数据的方式以及元素对象。 部分元数据元素应始终派生自项目的属性,例如其空间参考。部分元数据元素可以通过项目的属性进行初始化,但通常由人员进行更新,以便在共享元数据之前更好地描述项目,例如项目的标题。 创建元数据元素并通过同步初始化其值时,存储值的 XML 元素具有一个 Sync 属性,且其值设置为 True。通常,仅在 Sync 属性设置为 True 时才会同步元数据元素的值。使用 ArcGIS 元数据编辑器更新元素的值时,Sync 属性已删除。或者,应用程序可以将属性的值更改为 False 以获得同样的结果。
| String |
interval | 再次同步项目前应经过的秒数。例如,如果 Metadata 对象表示地理数据库中的要素类,并且另一个用户最近同步了项目的元数据,则除非经过了足够的时间,否则此函数将不会再次同步项目的元数据内容。提供零值将导致立即再次同步项目的元数据。 仅当 metadata_sync_option 值为 ACCESSED、CREATED 和 NOT_CREATED 时才会考虑间隔。 | Integer |
如果 Metadata 对象表示要素类的元数据,则此函数将更新元数据内容以反映数据的当前属性,例如,其所含要素数、其空间参考、当前属性列表等。如果项目不含任何元数据内容,则可能会/不会为项目创建元数据内容,具体取决于 metadata_sync_option。另外,是否考虑间隔时间具体取决于 metadata_sync_option。
部分元数据元素应始终派生自项目的属性,例如其空间参考。部分元数据元素可以通过项目的属性进行初始化,但通常由人员进行更新,以便在共享元数据之前更好地描述项目,例如项目的标题。metadata_sync_option 用于确定更新的项目属性,以及如果已在该元素中输入值,则如何处理元数据元素。
将元数据内容从 ISO 19139 格式的 XML 文件导入要素类,并更新元数据中记录的要素类属性,以使其与项目的当前属性相匹配。
import arcpy
from arcpy import metadata as md
# Get the standard-format metadata XML file's object
src_19139_path = r'C:\Metadata\street_lights_19139.xml'
# Get the target item's Metadata object
street_lights_path = r'C:\Data\LocalArea.gdb\StreetLights'
tgt_item_md = md.Metadata(street_lights_path)
if not tgt_item_md.isReadOnly:
# Import standard-format metadata content to the target item
tgt_item_md.importMetadata(src_19139_path, 'ISO19139_UNKNOWN')
tgt_item_md.save()
# Use SELECTIVE so you don't lose the imported title
# other properties will update on synchronize as data changes
tgt_item_md.synchronize('SELECTIVE')
upgrade (metadata_upgrade_option)
参数 | 说明 | 数据类型 |
metadata_upgrade_option | 指定如何将项目的元数据升级为 ArcGIS 元数据格式。提供此选项旨在更新使用 ArcGIS Desktop 8.x 或 9.x 创建的元数据。
| String |
使用 ArcGIS Desktop 8.x 或 9.x 创建的 Metadata 文档可升级为 ArcGIS 元数据格式。
将已存档项目的 ArcGIS Desktop 9.x 元数据内容升级为 ArcGIS 元数据格式。
import arcpy
from arcpy import metadata as md
# Get the item's Metadata object
archive_item_path = r'C:\Data\Old.gdb\Buildings'
archive_item_md = md.Metadata(archive_item_path)
# Upgrade the item's metadata content to the ArcGIS metadata format
archive_item_md.upgrade('FGDC_CSDGM')
代码示例
访问通过元数据描述项目的信息。
import arcpy
from arcpy import metadata as md
highways_path = r'C:\Data\LocalArea.gdb\Highways'
item_md = md.Metadata(highways_path)
print("Title:", item_md.title)
print("Tags:", item_md.tags)
print("Summary:", item_md.summary)
print("Description:", item_md.description)
print("Credits:", item_md.credits)
print("Access Constraints:", item_md.accessConstraints)