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

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

Примечание:

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

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

Возможности инструмента ArcGIS Desktop Экспорт метаданных теперь доступны с помощью метода 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 Импорт метаданных теперь доступны с помощью метода 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(src_csdgm_file, "FGDC_CSDGM")
tgt_item_md.save()

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

Возможности инструмента ArcGIS Desktop Импортер метаданных теперь доступны с помощью метода 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 Синхронизировать метаданные теперь доступны с помощью метода Metadata synchronize.

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

import arcpy

source_item = "C:/data/data.gdb/roads"
arcpy.conversion.MetadataImporter(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 Обновить метаданные теперь доступны с помощью метода Metadata upgrade.

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

import arcpy

source_item = r'C:\Data\Old.gdb\Buildings'
arcpy.conversion.UpgradeMetadata(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 теперь доступны с помощью методов Metadata saveAsXML и saveAsUsingCustomXSLT.

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

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

Возможности, которые ранее предоставлялись в ArcGIS Desktop с помощью таблиц стилей XSLT, перечисленные ниже, теперь доступны в ArcGIS Pro с помощью метода 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.conversion.XSLTransform(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.conversion.XSLTransform(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')

Удаление содержания из метаданных элемента

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

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

remove geoprocessing history.xslt

GPHISTORY

remove thumbnail.xslt

THUMBNAIL

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

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_noHistory.xml"
arcpy.XSLTransform_conversion(source_item, xslt_no_gp_history, output_no_gp_history)

# Filter the output metadata content further to remove thumbnails as well
xslt_no_thumbs = dir + "Metadata/Stylesheets/gpTools/remove thumbnail.xslt"
output_nogp_nothumbs = "C:/data/roads_noHistory_noThumbnails.xml"
arcpy.conversion.XSLTransform(output_no_gp_history, xslt_no_thumbs, output_nogp_nothumbs)

В следующем примере показано, как удалить историю геообработки и любые образцы из метаданных элемента с помощью ArcGIS Pro:

import arcpy
from arcpy import metadata as md

# Get the target item's Metadata object
poles_path = r'C:\Data\LocalArea.gdb\UtilityPoles'
tgt_item_md = md.Metadata(poles_path)

# Delete all geoprocessing history and any thumbnails from the item's metadata
if not tgt_item_md.isReadOnly:
    tgt_item_md.deleteContent('GPHISTORY')
    tgt_item_md.deleteContent('THUMBNAIL')
    tgt_item_md.save()

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

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

В дополнение к таблицам стилей XSLT, описанным выше, были предоставлены дополнительные таблицы стилей XSLT, предоставленные с ArcGIS Desktop для выполнения таких операций, как удаление элементов метаданных из метаданных ArcGIS элемента, которые использовались до версии 10.0 и с тех пор не использовались.

В следующем примере показано, как сохранить копию метаданных элемента в файл .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_fgdcCsdgm = os.path.join(dir, "Metadata/Stylesheets/gpTools/remove pre94 metadata elements.xslt")
output_no_fgdcCsdgm = "C:/data/roads_copy.xml"
arcpy.conversion.XSLTransform(source_item, xslt_no_fgdcCsdgm, output_no_fgdcCsdgm)

Пользовательская таблица стилей XSLT, использованная в приведенном выше примере, предоставляется с ArcGIS Desktop для использования с инструментом Преобразование XSLT. Она удаляет элементы из метаданных элемента, которые использовались редакторами метаданных до версии 10.0 и с тех пор не использовались.

Следующий пример демонстрирует, как можно сохранить копию метаданных элемента в файл .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
# unused ESRI-ISO and FGDC CSDGM elements
output_file = "C:/data/roads_no_fgdcCsdgm.xml"
dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
xslt_no_fgdcCsdgm = os.path.join(dir, "Metadata/Stylesheets/gpTools/remove pre94 metadata elements.xslt")
src_item_md.saveAsUsingCustomXSLT(output_file, xslt_no_fgdcCsdgm)

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

Примечание:

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

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

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

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

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

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

Справка ArcMap содержит пример того, как выполнить эти обновления с использованием ElementTree. Пример ниже представляет собой обновленную версию этого скрипта, которая показывает, как выполнять те же обновления метаданных в 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

Инструмент Переводчик метаданных 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 для импорта и экспорта метаданных, также не будут приводить к появлению сообщений такого типа. В ArcGIS Pro все преобразования между форматом XML метаданных ArcGIS и стандартизированными форматами XML выполняются, напротив, с помощью преобразований XSLT. Используйте соответствующие методы класса Metadata для импорта и экспорта метаданных.

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

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

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

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

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

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