【发布时间】:2018-06-15 11:01:21
【问题描述】:
我有一些关于书籍的 MARC21-XML 文档。我想提取这本书的译者的名字。
这是来自一本书的一个 MARC21-XML 文档的 sn-p:
<?xml version="1.0" encoding="UTF-8"?>
<record xmlns="http://www.loc.gov/MARC21/slim" type="Bibliographic">
<datafield tag="700" ind1="1" ind2=" ">
<subfield code="a">Wasel, Ulrike</subfield>
<subfield code="4">trl</subfield>
</datafield>
<datafield tag="700" ind1="1" ind2=" ">
<subfield code="a">Timmermann, Klaus</subfield>
<subfield code="4">trl</subfield>
</datafield>
<datafield tag="700" ind1="1" ind2="2">
<subfield code="a">Eggers, Dave</subfield>
</datafield>
</record>
Dave Eggers 是这本书的作者,Klaus Timmermann 和 Ulrike Wasel 帮助翻译了这本书。
在这种情况下,以下“简单”XPath 2.0 表达式可以提取“翻译器”:
/record/datafield[@tag='700'][@ind1='1'][@ind2=' ']/subfield[@code='a']/text()
这个 XPath 2.0 表达式的结果如下:
Text='Wasel, Ulrike'
Text='Timmermann, Klaus'
这似乎工作得很好。 但是,我可以想到一个尚未发现的场景,其中还有其他类型的元素不是翻译器 (subfield[@code='a'] = 'trl'.
我希望将以下选择逻辑实现为 XPath 2.0,但很难构建:
-
/record/datafield属性tag的值为“700” -
/record/datafield属性ind1的值为“1” -
/record/datafield属性ind2具有值“” -
/record/datafield包含subfield属性code等于“4”,其text()是“trl”
模拟场景:
<?xml version="1.0" encoding="UTF-8"?>
<record xmlns="http://www.loc.gov/MARC21/slim" type="Bibliographic">
<datafield tag="700" ind1="1" ind2=" ">
<subfield code="a">Wasel, Ulrike</subfield>
<subfield code="4">trl</subfield>
</datafield>
<datafield tag="700" ind1="1" ind2=" ">
<subfield code="a">Timmermann, Klaus</subfield>
<subfield code="4">trl</subfield>
</datafield>
<datafield tag="700" ind1="1" ind2=" ">
<subfield code="a">Doe, John</subfield>
<subfield code="4">oth</subfield>
</datafield>
<datafield tag="700" ind1="1" ind2="2">
<subfield code="a">Eggers, Dave</subfield>
</datafield>
</record>
在这种情况下,以下“简单”XPath 2.0 表达式可以提取“翻译器”:
/record/datafield[@tag='700'][@ind1='1'][@ind2=' ']/subfield[@code='a']/text()
这个 XPath 2.0 表达式的结果如下:
Text='Wasel, Ulrike'
Text='Timmermann, Klaus'
Text='Doe, John'
还有一个错误:John Doe 不是翻译 (trl) 而是本书的其他 (oth) 贡献者。我不要他;)
我对 MARC21-XML 规范不是很熟悉。我读过的关于 MARC21-XML 的规范是一种非常奇怪的表格格式,很难理解。 @ind1='1' 和 @ind2=' ' 可能只包含翻译器,但带有“trl”的“type”字段没有意义。
如何构造一个 XPath 2.0 表达式,只从模拟脚本中选择翻译器?
【问题讨论】: