Скрипты 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
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_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.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.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 Обновить метаданные теперь доступны с помощью метода 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 теперь доступны с помощью методов Metadata saveAsXML и saveAsUsingCustomXSLT.
Некоторые из основных операций по управлению метаданными поддерживались в ArcGIS Desktop с помощью таблиц стилей XSLT, которые поставлялись вместе с ПО. Эти таблицы стилей использовались совместно с инструментом Преобразование XSLT, чтобы вносить необходимые изменения в метаданные элемента, сохранять копии метаданных элемента или создавать различные типы выходных данных. Многие из этих операций продолжат поддерживаться в ArcGIS Pro, как описано далее. Эти возможности теперь встроены напрямую в ArcGIS Pro, вместо предоставления их в виде ресурсов таблиц стилей XSLT.
Сохранение копии метаданных элемента
Возможности, которые ранее предоставлялись в ArcGIS Desktop с помощью таблиц стилей XSLT, перечисленные ниже, теперь доступны в ArcGIS Pro с помощью метода Metadata saveAsXML. Вместо задания файла таблицы стилей XSLT укажите соответствующую опцию сохранения XML, как показано ниже.
Таблица стиля XSLT в ArcGIS Desktop | 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"
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')
Удаление содержания из метаданных элемента
Возможности, которые ранее предоставлялись в ArcGIS Desktop с помощью таблиц стилей XSLT, перечисленные ниже, теперь доступны в ArcGIS Pro с помощью метода Metadata deleteContent. Вместо указания файла таблицы стилей XSLT укажите соответствующую опцию для удаления содержания, как указано ниже.
Таблица стиля XSLT в ArcGIS Desktop | 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"
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.XSLTransform_conversion(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.XSLTransform_conversion(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, в следующем разделе: Обновление метаданных с помощью скриптов 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
Инструмент Переводчик метаданных 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 переведен в разряд устаревших продуктов.