From c84b1c3756e7ccdc15496f16f41175a628c743e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Tue, 6 Dec 2022 09:46:57 +0100 Subject: [PATCH] add Marc XML Schema --- .../java/org/xbib/marc/MarcXmlConstants.java | 2 +- .../org/xbib/marc/xml/MarcXchangeWriter.java | 24 +++++++++++-------- .../java/org/xbib/marc/xml/MarcXmlWriter.java | 5 ++++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/xbib/marc/MarcXmlConstants.java b/src/main/java/org/xbib/marc/MarcXmlConstants.java index 13e1b2e..de7fe3d 100644 --- a/src/main/java/org/xbib/marc/MarcXmlConstants.java +++ b/src/main/java/org/xbib/marc/MarcXmlConstants.java @@ -4,6 +4,6 @@ public interface MarcXmlConstants { String MARCXML_NS_URI = "http://www.loc.gov/MARC21/slim"; - String MARCXML_SCHEMA_LOCATION = "http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"; + String MARCXML_SCHEMA_LOCATION = "https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"; } diff --git a/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java b/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java index 5903818..e4005df 100644 --- a/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java +++ b/src/main/java/org/xbib/marc/xml/MarcXchangeWriter.java @@ -15,6 +15,7 @@ */ package org.xbib.marc.xml; +import java.util.ArrayList; import org.xbib.marc.MarcField; import org.xbib.marc.MarcListener; import org.xbib.marc.MarcRecord; @@ -33,7 +34,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; @@ -160,7 +160,7 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, this.documentStarted = false; this.collectionStarted = false; eventFactory = XMLEventFactory.newInstance(); - namespace = eventFactory.createNamespace("", NAMESPACE_URI); + namespace = createNameSpace(); setupEventConsumer(writer, indent); } @@ -185,7 +185,7 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, this.documentStarted = false; this.collectionStarted = false; this.eventFactory = XMLEventFactory.newInstance(); - this.namespace = eventFactory.createNamespace("", NAMESPACE_URI); + this.namespace = createNameSpace(); newWriter(fileNamePattern, fileNameCounter, bufferSize, compress); setupEventConsumer(writer, indent); } @@ -199,7 +199,7 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, this.xmlEventConsumer = consumer; this.lock = new ReentrantLock(); this.eventFactory = XMLEventFactory.newInstance(); - this.namespace = eventFactory.createNamespace("", NAMESPACE_URI); + this.namespace = createNameSpace(); this.namespaces = Collections.singletonList(namespace).iterator(); } @@ -275,12 +275,12 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, } try { if (!collectionStarted) { - Iterator attrs = schemaWritten ? null : Arrays.asList( - eventFactory.createAttribute("xmlns:xsi", - XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI), - eventFactory.createAttribute("xsi:schemaLocation", - NAMESPACE_URI + " " + NAMESPACE_SCHEMA_LOCATION) - ).iterator(); + Iterator attrs = null; + if (!schemaWritten) { + List list = new ArrayList<>(); + writeSchema(list); + attrs = list.iterator(); + } xmlEventConsumer.add(eventFactory.createStartElement(COLLECTION_ELEMENT, attrs, namespaces)); schemaWritten = true; collectionStarted = true; @@ -485,6 +485,10 @@ public class MarcXchangeWriter extends MarcContentHandler implements Flushable, return exception; } + protected Namespace createNameSpace() { + return eventFactory.createNamespace("", NAMESPACE_URI); + } + protected void writeSchema(List attrs) throws XMLStreamException { attrs.add(eventFactory.createAttribute("xmlns:xsi", XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI)); diff --git a/src/main/java/org/xbib/marc/xml/MarcXmlWriter.java b/src/main/java/org/xbib/marc/xml/MarcXmlWriter.java index b587456..b32e3fa 100644 --- a/src/main/java/org/xbib/marc/xml/MarcXmlWriter.java +++ b/src/main/java/org/xbib/marc/xml/MarcXmlWriter.java @@ -9,6 +9,7 @@ import java.util.List; import javax.xml.XMLConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Namespace; import javax.xml.stream.util.XMLEventConsumer; public class MarcXmlWriter extends MarcXchangeWriter { @@ -59,6 +60,10 @@ public class MarcXmlWriter extends MarcXchangeWriter { super(consumer); } + protected Namespace createNameSpace() { + return eventFactory.createNamespace("", NAMESPACE_URI); + } + @Override protected void writeSchema(List attrs) throws XMLStreamException { attrs.add(eventFactory.createAttribute("xmlns:xsi",