MODOAIPMH-50 Spike: Determine best approach
Questions:
- find out if the marc4j supports conversion from MARC Json to MARC XML.
- define best mapping approach with XSLT post-processing or custom converter.
Q.1
During the analysis, we found that marc4j support mapping MARC Json (examples) to MARC XML (schema) out of the box. Consequently, usage of this library will accelerate the development.
Code snippet
transform MARC Json file into MARC Xml with org.w3c.dom.Node representation;
private static Node fromMarkJson2XML(String path) throws IOException, TransformerException {
InputStream fileInputStream = new FileInputStream(path);
MarcReader marcJsonReader = new MarcJsonReader(fileInputStream);
MarcXmlWriter marcXmlWriter = null;
DOMResult domResult = new DOMResult();
marcXmlWriter = new MarcXmlWriter(domResult);
while (marcJsonReader.hasNext()) {
Record record = marcJsonReader.next();
marcXmlWriter.write(record);
}
marcXmlWriter.close();
fileInputStream.close();
return domResult.getNode();}
Q.2
Initially we were considering 2 approaches: XSLT post-processing or custom converter.
Approaches:
- Custom Java mapper (MARC4J Model to DC Jaxb Object)
Benefits:
- can have better performance
Drawbacks:
- hard to introduce new formats
- need to spend time on own implementation
2. Use XSLT to transform MARC4J Model to DC
Benefits :
- easier accommodation of new formats (https://www.loc.gov/standards/marcxml/xslt/)
- MARC4J has build-in pipeline model to post-process MARCXML using XSLT stylesheets.
Drawbacks:
- no way(hard) to affect performance.
Suggest to choose the second approach because:
- usage of this library will accelerate the development
- no proof that 1st approach will have better performance
- easily implement new formats.
Code snippet
to apply XSLT stylesheet :
replace from previous code snippet
DOMResult domResult = new DOMResult();
MarcXmlWriter marcXmlWriter = new MarcXmlWriter(domResult);
to
DOMResult domResult = new DOMResult();
Source stylesheet = new StreamSource(stylesheetSource); //stylesheetSource - xsl stylesheet URL
MarcXmlWriter marcXmlWriter = new MarcXmlWriter(domResult, stylesheet);