读取marc-xml的简单python接口
marcalyx的Python项目详细描述
马尔卡利克斯
用于读取的简单python接口 MARC-XML
安装
pip install marcalyx
用法
导入包
>>> import marcalyx
marcalyx在xml.etree.ElementTree.Element
对象(或兼容对象)上工作,因此
在将XML传递给Marcalyx对象之前,需要对其进行分析。为了
实例,给定一个包含单个<record>
:
>>> import xml.etree.ElementTree as ET
或者,使用lxml
:
>>> import lxml.etree as ET
然后:
>>> tree = ET.parse('tests/xml/1027474578.xml')
>>> record_element = tree.getroot()
>>> marc = marcalyx.Record(record_element)
如果xml包含一个记录的<collection>
对象,则可以创建一个marcalyx.Collection
对象,从中可以获取记录:
>>> coll = marcalyx.Collection(collection_element)
>>> marc = coll.records()[0]
字段
一旦有了记录,就可以通过标记访问字段(始终使用3个字符的字符串,例如,“001”、“010”、“100”):
>>> marc.field("245")
[245 10$aKindred /$cOctavia E. Butler.]
或者,更简单地说:
>>> marc["245"]
[245 10$aKindred /$cOctavia E. Butler.]
当通过标记访问时,字段总是作为数组返回(但不一定来自下面的便利方法)。字段可以是控制字段:
>>> type(m["008"][0])
<class 'marcalyx.marcalyx.ControlField'>
或数据字段:
>>> type(m["245"][0])
<class 'marcalyx.marcalyx.DataField'>
所有字段都有一个tag
和一个value
:
>>> m["008"][0].tag
'008'
>>> m["245"][0].tag
'245'
>>> m["008"][0].value
'180306r20141979xxk g 000 j eng d'
>>> m["245"][0].value
'Kindred / Octavia E. Butler.'
数据字段有两个“指示器”:
>>> m["245"][0].ind1
'1'
>>> m["245"][0].ind2
'0'
子字段,可以通过subfield()
方法访问,该方法返回数组:
>>> m["245"][0].subfield('a')
[$aKindred /]
与字段一样,您可以通过下标获得子字段:
>>> m["245"][0]['a']
[$aKindred /]
可以使用包含字段标记和子字段代码的元组作为 获取包含所有字段的代码(如果有)的所有子字段的简单列表 带着那个标签(如果有的话):
>>> m[('650','a')]
[$aAfrican American women, $aTime travel]
value
与str
字段的字符串表示以常规方式格式化,显示指示符和子字段:
>>> str(m["245"][0])
'245 10$aKindred /$cOctavia E. Butler.'
value
格式化为显示:
>>> m["245"][0].value
'Kindred / Octavia E. Butler.'
子字段
子字段具有代码、值和字符串表示:
>>> m["245"][0].subfield("a")[0].code
'a'
>>> m["245"][0].subfield("a")[0].value
'Kindred /'
>>> str(m["245"][0].subfield("a")[0])
'$aKindred /'
方便方法
有几种方法可以更容易地获取单个字段或类别
在田野里。mainEntry()
将返回记录具有的1xx字段中的任何一个
(作为DataField
,而不是数组):
>>> m.mainEntry()
100 1#$aButler, Octavia Estelle$d(1947-2006).$4aut
#titleStatement
获取245字段(同样,作为DataField
而不是数组):
>>> m.titleStatement()
245 10$aKindred /$cOctavia E. Butler.
还有一些方法可以获取 领域。其中的每一个都返回 给定类别:
>>> marc.controlFields() # 00X
>>> marc.codes() # 01X-09X
>>> marc.titles() # 20X-24X
>>> marc.edition() # 25X-28X
>>> marc.description() # 3XX
>>> marc.series() # 4XX
>>> marc.notes() # 5XX
>>> marc.subjects() # 6XX
>>> marc.addedEntries() # 70X-75X
>>> marc.linking() # 76X-78X
>>> marc.seriesAdded() # 80X-83X
>>> marc.holdings() # 841-88X
一些常用数字有方便的方法:
> record.lccn # 010$a, String or nil
> record.isbns # 020$a, Array of Strings, or []
> record.issns # 022$a, Array of Strings, or []
领导者
你可以找唱片公司的负责人:
>>> marc.leader
'00000cam a2200000Mi 4500'
贡献
github上的https://github.com/seanredmond/marcalyx欢迎错误报告和请求拉取。这个项目旨在成为一个安全、受欢迎的协作空间,而且贡献者应该遵守Contributor Covenant行为准则。
许可证
gem是根据MIT License的条款作为开放源码提供的。
行为准则
在lccnorm项目的代码库、问题跟踪程序、聊天室和邮件列表中进行交互的每个人都应该遵循code of conduct。