@Override public void marshal(Element root, Document doc) { // set up namespace declarations and schema references root.setAttributeNS(NS.XMLNS.ns(), "xmlns:premis", NS.PREMIS.ns()); root.setAttributeNS(NS.XMLNS.ns(), "xmlns:xlink", NS.XLINK.ns()); root.setAttributeNS(NS.XMLNS.ns(), "xmlns:xsi", NS.XSI.ns()); root.setAttributeNS(NS.XSI.ns(), "xsi:schemaLocation", NS.PREMIS.schemaLoc()); if (version != null && !version.isEmpty()) { root.setAttribute("version", version); } else { root.setAttribute("version", "2.2"); } // sequence is important! for (PremisObject object : getObject()) { Element objectE = doc.createElementNS(NS.PREMIS.ns(), "premis:object"); object.marshal(objectE, doc); root.appendChild(objectE); } for (PremisEvent event : getEvent()) { Element eventE = doc.createElementNS(NS.PREMIS.ns(), "premis:event"); event.marshal(eventE, doc); root.appendChild(eventE); } for (PremisAgent agent : getAgent()) { Element agentE = doc.createElementNS(NS.PREMIS.ns(), "premis:agent"); agent.marshal(agentE, doc); root.appendChild(agentE); } for (PremisRights rights : getRights()) { Element rightsE = doc.createElementNS(NS.PREMIS.ns(), "premis:rights"); rights.marshal(rightsE, doc); root.appendChild(rightsE); } }