Created
September 15, 2011 12:38
-
-
Save lawlesst/1219132 to your computer and use it in GitHub Desktop.
Sample METS update script using eulxml.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from eulxml import xmlmap | |
from eulxml.xmlmap import load_xmlobject_from_file | |
MODS_NAMESPACE = 'http://www.loc.gov/mods/v3' | |
METS_NAMESPACE = 'http://www.loc.gov/METS/' | |
SF = xmlmap.StringField | |
class Common(xmlmap.XmlObject): | |
"MODS class with namespace declaration common to all MODS XmlObjects." | |
ROOT_NS = METS_NAMESPACE | |
ROOT_NAME = 'METS' | |
ROOT_NAMESPACES = {'mods': MODS_NAMESPACE, | |
'METS': METS_NAMESPACE} | |
class Public(Common): | |
ROOT_NAME = 'rights:Context' | |
discover = SF('rights:Permissions/@DISCOVER') | |
display = SF('rights:Permissions/@DISPLAY') | |
modify = SF('rights:Permissions/@MODIFY') | |
class Rights(Common): | |
ROOT_NAME = 'RightsDeclarationMD' | |
public = xmlmap.NodeField('rights:Context[@CONTEXTCLASS="GENERAL PUBLIC"]', Public) | |
class Mods(Common): | |
"""Map mods fields.""" | |
ROOT_NAME = 'mods' | |
language_code = xmlmap.StringField('mods:language/mods:languageTerm[@type="code"]') | |
class BDRMets(Common): | |
"""BDRMets class.""" | |
pid = xmlmap.StringField('@OBJID') | |
mods = xmlmap.NodeField('//mods:mods', Mods) | |
#Get the METS as a file or string object. | |
handle = open('bdr7275.xml') | |
#Bind it to the classes. | |
mets = load_xmlobject_from_file(handle, BDRMets) | |
language_code = mets.mods.language_code | |
#Set code to english if it's italian. | |
if language_code == 'ita': | |
mets.mods.language_code = 'eng' | |
#METS now contains updated mods. | |
print mets.serialize(pretty=True) | |
#Update METS datastream with fcrepo. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment