Перенос скриптов метаданных из ArcMap в ArcGIS Pro

Скрипты Python, используемые для управления метаданными в ArcGIS Desktop, должны быть изменены прежде чем вы сможете запускать их в ArcGIS Pro. Раздел ниже описывает значимые отличия между инструментами, предлагаемыми в ArcGIS Desktop в наборе инструментов Конвертация, и возможностями, доступными в arcpy.metadata.

Примечание:

Возможности, предоставляемые в ArcGIS Desktop с помощью инструментов Проверка схемы XML и Проверить метаданные, пока недоступны в ArcGIS Pro. Эти возможности будут добавлены в следующих версиях.

Экспорт метаданных

Возможности инструмента ArcGIS Desktop Экспорт метаданных теперь доступны с помощью функции arcpy.metadata exportMetadata. Скрипты, написанные для ArcGIS Desktop, которые использовали следующие переводчики, должны быть обновлены для использования подходящей опции экспорта метаданных, как показано ниже.

Переводчик ArcGIS DesktopArcGIS Pro metadata_export_option

ARCGIS2FGDC.xml

FGDC_CSDGM

ARCGIS2ISO19139.xml

ISO19139

ARCGIS2ISO19139gml321.xml

ISO19139_GML32

Следующий пример демонстрирует, как можно экспортировать метаданные элемента в файл XML метаданных в формате FGDC CSDGM, используя ArcGIS Desktop:

import arcpy
import os
dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
translator = os.path.join(dir, "Metadata/Translator/ARCGIS2FGDC.xml")
source_item = "C:/data/data.gdb/roads"
output_file = "C:/data/roads_csdgm.xml"
arcpy.ExportMetadata_conversion(source_item,translator, output_file)

Следующий пример демонстрирует, как можно экспортировать метаданные элемента в файл XML метаданных в формате FGDC CSDGM, используя ArcGIS Pro:

import arcpy from arcpy import metadata as md
src_item_md = md.Metadata("C:/data/data.gdb/roads") output_file = "C:/data/roads_csdgm.xml"
src_item_md.exportMetadata(output_file, 'FGDC_CSDGM')

Импорт и копирование метаданных

Возможности инструмента ArcGIS Desktop Импорт метаданных теперь доступны с помощью функции arcpy.metadata importMetadata. Скрипты, написанные для ArcGIS Desktop, которые использовали следующие настройки типа импорта, должны быть обновлены для использования подходящей опции импорта, как показано ниже.

ArcGIS Desktop Import_TypeArcGIS Pro import_option

FROM_ARCGIS

ARCGIS_METADATA

FROM_FGDC

FGDC_CSDGM

FROM_ISO_19139

ISO19139_UNKNOWN

Следующий пример демонстрирует, как можно импортировать содержание файла XML метаданных в формате FGDC CSDGM, который описывает некоторые данные элемента, представив те же данные с помощью ArcGIS Desktop:

import arcpy
csdgm_file = "C:/data/roads_csdgm.xml"
target_item = "C:/data/data.gdb/streams"
arcpy.ImportMetadata_conversion(csdgm_file, "FROM_FGDC", target_item)

Следующий пример демонстрирует, как можно импортировать содержание файла XML метаданных в формате FGDC CSDGM, который описывает некоторые данные элемента, представив те же данные с помощью ArcGIS Pro:

import arcpy from arcpy import metadata as md
src_csdgm_file = "C:/data/roads_csdgm.xml"
tgt_item_md = md.Metadata("C:/data/data.gdb/streams") tgt_item_md.importMetadata(csdgm_file,"FGDC_CSDGM") tgt_item_md.save()

Сохранение изменений в метаданных элемента.

Возможности инструмента ArcGIS Desktop Импортер метаданных теперь доступны с помощью функции arcpy.metadata copy. Эта функция должна использоваться для переноса содержания в формате метаданных ArcGIS из одного элемента в другой, например, из шаблона метаданных в класс пространственных объектов.

Следующий пример демонстрирует, как можно скопировать содержание шаблона метаданных ArcGIS в другой элемент, используя ArcGIS Desktop:

import arcpy
src_template = "C:/data/arcgis_template.xml"
target_fc = "C:/data/data.gdb/streams"
arcpy.MetadataImporter_conversion(src_template, target_fc)

Следующий пример демонстрирует, как можно скопировать содержание шаблона метаданных ArcGIS в другой элемент, используя ArcGIS Pro:

import arcpy from arcpy import metadata as md
src_template_md = md.Metadata("C:/data/arcgis_template.xml") tgt_item_md = md.Metadata("C:/data/data.gdb/streams") tgt_item_md.copy(src_template_md) tgt_item_md.save()

Синхронизация содержания метаданных

Возможности инструмента ArcGIS Desktop Синхронизировать метаданные теперь доступны с помощью функции arcpy.metadata synchronize.

Следующий пример демонстрирует, как можно обновить свойства элемента, хранящиеся в его метаданных, с помощью ArcGIS Desktop:

import arcpy
source_item = "C:/data/data.gdb/roads"
arcpy.MetadataImporter_conversion(source_item, "ALWAYS")

Следующий пример демонстрирует, как можно скопировать содержание шаблона метаданных ArcGIS в другой элемент, используя ArcGIS Pro:

import arcpy from arcpy import metadata as md
src_item_md = md.Metadata("C:/data/data.gdb/roads") src_item_md.synchronize("ALWAYS")

Обновление метаданных

Возможности инструмента ArcGIS Desktop Обновить метаданные теперь доступны с помощью функции arcpy.metadata upgrade.

Следующий пример демонстрирует, как можно обновить метаданные архивного элемента в формате метаданных ArcGIS, используя ArcGIS Desktop:

import arcpy
source_item = r'C:\Data\Old.gdb\Buildings' arcpy.UpgradeMetadata_conversion(source_item, "FGDC_TO_ARCGIS")

Следующий пример демонстрирует, как можно обновить метаданные архивного элемента в формате метаданных ArcGIS, используя ArcGIS Pro:

import arcpy from arcpy import metadata as md
archive_item_md = md.Metadata(r'C:\Data\Old.gdb\Buildings') archive_item_md.upgrade('FGDC_CSDGM')

Сохранение копии метаданных элемента, или применение фильтра к содержанию

Возможности инструмента ArcGIS Desktop Преобразование XSLT теперь доступны с помощью функций arcpy.metadata saveAsXML и saveAsUsingCustomXSLT.

Некоторые из основных операций по управлению метаданными поддерживались в ArcGIS Desktop с помощью таблиц стилей XSLT, которые поставлялись вместе с ПО. Эти таблицы стилей использовались совместно с инструментом Преобразование XSLT, чтобы вносить необходимые изменения в метаданные элемента, сохранять копии метаданных элемента или создавать различные типы выходных данных. Многие из этих операций продолжат поддерживаться в ArcGIS Pro, как описано далее. Эти возможности теперь встроены напрямую в ArcGIS Pro, вместо предоставления их в виде ресурсов таблиц стилей XSLT.

Сохранение копии метаданных элемента

Возможности, которые ранее предоставлялись в ArcGIS Desktop с помощью таблиц стилей XSLT, перечисленные ниже, теперь доступны в ArcGIS Pro с помощью функции arcpy.metadata saveAsXML. Вместо задания файла таблицы стилей XSLT укажите соответствующую опцию сохранения XML, как показано ниже.

Таблица стиля XSLT в ArcGIS DesktopArcGIS Pro metadata_save_as_xml_option

exact copy of.xslt

EXACT_COPY

remove local storage info strict.xslt

REMOVE_ALL_SENSITIVE_INFO

remove local storage info.xslt

REMOVE_MACHINE_NAMES

generate metadata template.xslt

TEMPLATE

Следующий пример демонстрирует, как можно сохранить метаданные элемента в файл XML в формате метаданных ArcGIS, а также показывает версию метаданных того же элемента, к которой был применен фильтр для удаления всех имен компьютеров, которые могли там присутствовать, с помощью ArcGIS Desktop:

import arcpy import os
source_item = "C:/data/data.gdb/roads"
dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
# Save an exact copy of the item's ArcGIS metadata xslt_copy = os.path.join(dir, "Metadata/Stylesheets/gpTools/exact copy of.xslt") output_copy = "C:/data/roads_copy.xml"
arcpy.XSLTransform_conversion(source_item, xslt_copy, output_copy)
# Save a copy where metadata content is filtered to remove machine names filter = dir + "Metadata/Stylesheets/gpTools/remove local storage info.xslt"
output_filtered = "C:/data/roads_filtered.xml"
arcpy.XSLTransform_conversion(source_item, filter, output_filtered)

Следующий пример демонстрирует, как можно сохранить метаданные элемента в файл XML в формате метаданных ArcGIS, а также показывает версию метаданных того же элемента, к которой был применен фильтр для удаления всех имен компьютеров, которые могли там присутствовать, с помощью ArcGIS Pro:

import arcpy from arcpy import metadata as md
src_item_md = md.Metadata("C:/data/data.gdb/roads")
# Save an exact copy of the item's ArcGIS metadata output_copy = "C:/data/roads_copy.xml"
src_item_md.saveAsXML(output_copy)
# Save a copy where metadata content is filtered to remove machine names output_filtered = "C:/data/roads_filtered.xml' src_item_md.saveAsXML(output_filtered, 'REMOVE_MACHINE_NAMES')

Примечание:

Дополнительные таблицы стилей XSLT поставлялись вместе с ArcGIS Desktop для выполнения таких операций, как удаление образцов или истории геообработки из метаданных элемента. Эти возможности будут добавлены в ArcGIS Pro в следующих версиях.

Пользовательские XSLT

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

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

import arcpy import os
source_item = "C:/data/data.gdb/roads"
dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
# Save copy of the item's ArcGIS metadata that is filtered to remove geoprocessing history xslt_no_gp_history = os.path.join(dir, "Metadata/Stylesheets/gpTools/remove_gp_history.xslt") output_no_gp_history = "C:/data/roads_copy.xml"
arcpy.XSLTransform_conversion(source_item, xslt_no_gp_history, output_no_gp_history)

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

Следующий пример демонстрирует, как можно сохранить копию метаданных элемента в файл XML в формате метаданных ArcGIS, используя пользовательскую таблицу стиля XSLT, которая отфильтровывает историю геообработки элемента, с помощью ArcGIS Pro:

import arcpy import os
from arcpy import metadata as md src_item_md = md.Metadata("C:/data/data.gdb/roads")
# Save copy of the item's ArcGIS metadata that is filtered to remove geoprocessing history output_file = "C:/data/roads_no_gp_history.xml"
dir = arcpy.GetInstallInfo("desktop")["InstallDir"] xslt_no_gp_history = os.path.join(dir, "Metadata/Stylesheets/gpTools/remove_gp_history.xslt") src_item_md.saveAsUsingCustomXSLT(output_file, xslt_no_gp_history)

Примечание:

Все последующие операции выполняются с помощью таблиц стиля XSLT, которые обрабатывают метаданные ArcGIS для элемента. Процессор XSLT Microsoft .NET Framework используется для выполнения преобразований во всех следующих сценариях.

  • Инструмент метаданных в ArcGIS Desktop, Преобразование XSLT, и некоторые из опций, используемых с инструментами Импорт метаданных и Экспорт метаданных.
  • Опции Сохранить как, Импорт, Экспорт и Обновить, доступные в ArcGIS Pro на вкладке Каталог на ленте в группе Метаданные, при активном виде каталога.
  • Методы ArcGIS Pro .NET SDK SaveMetadataAsXML, SaveMetadataAsUsingCustomXSLT и SaveMetadataAsHTML, ExportMetadata, ImportMetadata и UpgradeMetadata.

Однако для модуля arcpy.metadata функции saveAsXML, saveAsUsingCustomXSLT, importMetadata, exportMetadata и upgrade выполняются при помощи процессора Microsoft Core XML Services (MSXML) XSLT. Как результат, некоторые таблицы стиля XSLT, которые успешно работали при выполнении преобразования с помощью .NET Framework, могут не выполняться корректно, если та же таблица стиля XSLT используется вместе с модулем arcpy.metadata, и наоборот.

Некоторые таблицы стиля XSLT, которые поставляются вместе с ArcGIS Desktop, чья функциональность пока недоступна в ArcGIS Pro, будут работать успешно вместе с функцией arcpy.metadata saveAsWithCustomXSLT, включая remove thumbnail.xslt и remove geoprocessing history.xslt. Однако некоторые таблицы стиля, такие как таблицы, создающие файлы HTML для отображения, не будут работать, поскольку необходимые функции XSLT в .NET Framework или пользовательские функции XSLT в ArcGIS Desktop недоступны при выполнении преобразований с помощью процессора MSXML XSLT.

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

Объект arcpy Metadata содержит свойства, которые позволяют вам получать доступ и изменять базовую информацию, отображаемую на странице подробной информации об элементе, когда элемент публикуется в ArcGIS Online. Однако, часто содержание метаданных, которое необходимо добавить или обновить, бывает более детальным. Выполнение таких операций можно совершать с помощью пакетов Python, таких как xml.etree.ElementTree, PyXML и lxml.

Справка ArcMap содержит пример того, как выполнить эти обновления с помощью ElementTree, в следующем разделе: Обновление метаданных с помощью скриптов Python. Этот пример был обновлен ниже, чтобы продемонстрировать, как этот скрипт можно изменить для выполнения тех же обновлений в ArcGIS Pro:

Пакетно обновите метаданные для списка наборов данных. Этот скрипт разработан для запуска в качестве инструмента-скрипта.

import os import sys import xml.etree.ElementTree as ET import arcpy from arcpy import metadata as md
# Script arguments... Source_Metadata = arcpy.GetParameter(0)
# Local variables
#    new purpose text newPurpose = "This is new text for an existing Purpose metadata element."
newCredits = "This is text for a new Credits metadata element."
# function to update purpose and credits in metadata def update_metadata(root):
    num_elements = 0
    # modify purpose element's text    # there is only supposed to be one purpose element in metadata    # replace purpose element text if element exists    # if element doesn't exist, do nothing    purposeEls = root.findall(".//idPurp")    for element in purposeEls:
        if element.text is not None:
            element.text = newPurpose            num_elements += 1
    # add credits element to dataIdInfo parent, if the parent exists    # ISO allows many dataIdInfo groups; ArcGIS supports only one, so get the 1st    # ISO allows many idCredit elements, and many are supported in ArcGIS    # append a new idCredit element with appropriate text, existing elements remain    dataIdInfoEls = root.findall("./dataIdInfo[1]")    for element in dataIdInfoEls:
        if element:
            newCreditEl = ET.SubElement(element, "idCredit")            newCreditEl.text = newCredits            num_elements += 1
    return num_elements
# get and save item metadata for item in Source_Metadata:
    arcpy.AddMessage("Item: {0}".format(item))        # get the item's metadata xml    item_md = md.Metadata(item)    metadata_xml_string = item_md.xml        # create an ElementTree object from the metadata XML string    root = ET.fromstring(metadata_xml_string)
    # call the update_metadata function to modify the item's metadata    changes = update_metadata(root)        if changes > 0:
        # get modified XML        updated_xml_string = ET.tostring(root, encoding="utf-8")                # import result back into metadata 
        arcpy.AddMessage("Saving updated metadata with the item...")        item_md.xml = updated_xml_string        item_md.save()    else:
        arcpy.AddMessage("No changes to save")
arcpy.AddMessage('Finished updating metadata for all source metadata items')

Инструменты ArcGIS Desktop, которые недоступны в ArcGIS Pro

Некоторые инструменты, которые были доступны в ArcGIS Desktop, не будут перенесены в ArcGIS Pro.

Переводчик метаданных USGS MP

Инструмент Переводчик метаданных USGS MP дает ограниченный доступ к возможностям, которые предоставляются утилитой синтаксического анализа метаданных USGS, известной как mp. Например, в качестве входных данных он принимает только файлы XML. Вы можете выполнять такие операции, как преобразование файла структурированного текста в файл XML в формате FGDC CSDGM. Однако, когда та же самая утилита используется напрямую в Python, все возможности mp доступны. Дополнительно, версия mp, поставляемая ArcGIS Desktop, является устаревшей. Загрузите последнюю версию утилиты синтаксического анализа метаданных USGS, mp, с веб-сайта, затем запустите ее в своем скрипте Python, используя os.system, как показано ниже:

Используйте утилиту синтаксического анализа метаданных USGS, mp, для преобразования файла структурированного текста в файл XML в формате FGDC CSDGM.

import os
csdgm_xml_file = "D:/Metadata_Pro/arcpy/Map_current_csdgm.xml"
csdgm_txt_file = "D:/Metadata_Pro/arcpy/Output/csdgm_to_text.txt"
runCmd = "D:/Metadata_Pro/arcpy/mp.exe " + csdgm_txt_file + " -x " + csdgm_xml_file print(runCmd) os.system(runCmd)

Переводчик метаданных Esri

Все преобразования между форматом XML метаданных ArcGIS и стандартизированными форматами XML выполняются с помощью преобразований XSLT в ArcGIS Pro. Инструмент Переводчик метаданных Esri, напротив, использует код для преобразования метаданных из одного формата в другой.

Этот механизм преобразования выдает сообщения, которые сложно понять, например, Validation failed: em:Metadata($a) --> em:contact($a, $b), em:CI_ResponsibleParty($b) и Error [InvalidForSome]: <MD_Metadata> for-some clause: em:contact(v:Metadata, v:Object) <contact>. Преобразования, используемые в ArcGIS Pro для импорта и экспорта метаданных, также будут приводить к появлению сообщений такого типа.

Экспорт метаданных (несколько) и Проверить метаданные (несколько)

Инструменты Экспорт метаданных (несколько) и Проверить метаданные (несколько) были созданы, чтобы выполнить поддержку кнопок на панели инструментов Метаданные в ArcCatalog. Эти возможности поддерживаются в ArcGIS Pro без необходимости использования этих инструментов.

В скрипте ArcGIS Pro Python вы можете экспортировать (и затем проверить) метаданные для множества элементов путем доступа к наборам данных и файлам с помощью arcpy функций списка, а также путем доступа к картам и слоям с помощью функций списка arcpy.mp. Используйте соответствующую функцию arcpy.metadata для управления метаданными для элементов, возвращенных с помощью этих списков.

Опубликовать метаданные

Инструмент Опубликовать метаданные был предоставлен в ArcGIS Desktop для публикации метаданных в сервис метаданных ArcIMS. ArcIMS переведен в разряд устаревших продуктов.

Связанные разделы