Я пытаюсь выполнить некоторую очистку данных с помощью библиотеки дерева элементов xml в python.
Мои xml входные файлы выглядят следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<mods:mods xmlns:mods="http://www.loc.gov/mods/v3" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.loc.gov/mods/v3" version="3.5" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-5.xsd">
<mods:titleInfo>
<mods:title>1971, Human Events</mods:title>
</mods:titleInfo>
<mods:name type="personal" authority="naf" valueURI="https://lccn.loc.gov/n88172648">
<mods:namePart>Kellems, Vivien, 1896-1975</mods:namePart>
<mods:role>
<mods:roleTerm authority="marcrelator" authorityURI="http://id.loc.gov/vocabulary/relators" valueURI="http://id.loc.gov/vocabulary/relators/col" type="text">Collector</mods:roleTerm>
</mods:role>
</mods:name>
<mods:typeOfResource>text</mods:typeOfResource>
<mods:genre authority="aat" valueURI="300111999">publications (documents)</mods:genre>
<mods:originInfo>
<mods:dateIssued encoding="w3cdtf" keyDate="yes">1971</mods:dateIssued>
</mods:originInfo>
<mods:physicalDescription>
<mods:digitalOrigin>reformatted digital</mods:digitalOrigin>
<mods:internetMediaType>image/jp2</mods:internetMediaType>
</mods:physicalDescription>
<mods:note type="ownership">Archives & Special Collections at the Thomas J. Dodd Research Center, University of Connecticut Library</mods:note>
<mods:identifier type="local">1992-0033/SeriesIII:Activism/SubseriesA:PoliticalCampaigns/Box138:6</mods:identifier>
<mods:identifier type="local">MSS 1992.0033</mods:identifier>
<mods:identifier type="local">39153030468468</mods:identifier>
<mods:accessCondition type="use and reproduction">In Copyright</mods:accessCondition>
<mods:recordInfo>
<mods:recordContentSource>University of Connecticut Library</mods:recordContentSource>
<mods:recordCreationDate encoding="w3cdtf">2018-07-09-04:00</mods:recordCreationDate>
<mods:languageOfCataloging>
<mods:languageTerm authority="iso639-2b" type="code">eng</mods:languageTerm>
</mods:languageOfCataloging>
</mods:recordInfo>
<mods:note type="source note">Vivien Kellems Papers</mods:note>
<mods:note type="source identifier">MSS 1992.0033</mods:note>
<identifier type="hdl">http://hdl.handle.net/11134/20002:860633493</identifier>
</mods:mods>
Все, что мне нужно сделать, это изменить тег идентификатора в конце, чтобы иметь тот же префикс, что и остальные теги, префикс "модов". И добавить указанный атрибут c hlink в тег accessCondition. Я успешно сделал обе эти вещи. Но после того, как я запишу эти изменения обратно в файл и попытаюсь использовать синтаксический анализатор xml, я получаю следующую ошибку:
xml.etree.ElementTree.ParseError: unbound prefix: line 25, column 2
Теперь я думаю, что это проблема пространства имен, потому что "xmlns" : пространство имен mods "и пространство имен" xmlns "имеют одинаковые URL, поэтому, когда я регистрирую пространство имен в анализаторе, примерно так:
ET.register_namespace('', "http://www.loc.gov/mods/v3")
ET.register_namespace('mods', "http://www.loc.gov/mods/v3")
ET.register_namespace('xlink', "http://www.w3.org/1999/xlink")
ET.register_namespace('xsi', "http://www.w3.org/2001/XMLSchema-instance")
Он также удаляет одно из пространств имен при обратной записи в xml file, объявления пространства имен выглядят так:
<mods:mods xmlns:mods="http://www.loc.gov/mods/v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.5" xsi:schemaLocation="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-5.xsd">
А именно, объявление "xmlns". Отображается только объявление "xmlns: mods". И снова я думаю, что это из-за того, что они имеют одинаковые URL. Есть ли в любом случае это исправить. Любая помощь будет оценена.