Skip to main content

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

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

Примечание:

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

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

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

Переводчик ArcGIS Desktop

ArcGIS Pro metadata_export_option

ARCGIS2FGDC.xml

FGDC_CSDGM

ARCGIS2ISO19139.xml

ISO19139

ARCGIS2ISO19139gml321.xml

ISO19139_GML32

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

import arcpy
import os

install_dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
translator = os.path.join(install_dir, "Metadata/Translator/ARCGIS2FGDC.xml")
source_item = "C:/data/data.gdb/roads"
output_file = "C:/data/roads_csdgm.xml"
arcpy.conversion.ExportMetadata(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_Type

ArcGIS 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.conversion.ImportMetadata(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.conversion.MetadataImporter(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, как показано ниже.

Таблица стилей ArcGIS Desktop XSLT

ArcGIS 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"
install_dir = arcpy.GetInstallInfo("desktop")["InstallDir"]

# Save an exact copy of the item's ArcGIS metadata
xslt_copy = os.path.join(install_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
xslt = install_dir + "Metadata/Stylesheets/gpTools/remove local storage info.xslt"
output_filtered = "C:/data/roads_filtered.xml"
arcpy.conversion.XSLTransform(source_item, xslt, 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 укажите соответствующую опцию для удаления содержания, как указано ниже.

Таблица стилей ArcGIS Desktop XSLT

ArcGIS 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"
install_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(install_dir, "Metadata/Stylesheets/gpTools/remove_gp_history.xslt")
output_no_gp_history = "C:/data/roads_noHistory.xml"
arcpy.conversion.XSLTransform(source_item, xslt_no_gp_history, output_no_gp_history)

# Filter the output metadata content further to remove thumbnails as well
xslt_no_thumbs = install_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"
install_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(install_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"
install_dir = arcpy.GetInstallInfo("desktop")["InstallDir"]
xslt_no_fgdcCsdgm = os.path.join(install_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 переведен в разряд устаревших продуктов.