X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax.base%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2Fbase%2FXMLWriter.java;h=ce5cb90068aa16cedfa7483ae04d00dbeb0c4780;hb=f52233c5cab2e5b8839b0de84b13c7d71f3dd571;hp=f37e4d8e2ce438094aa224f1099a2e46f8163830;hpb=404be73748777cdd2d09b2f29308ae6f4a3d730c;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLWriter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLWriter.java index f37e4d8..ce5cb90 100644 --- a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLWriter.java +++ b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLWriter.java @@ -26,6 +26,9 @@ import org.simantics.xml.sax.ontology.XMLResource; public class XMLWriter { + public static String XML_SCHEMA_URI = "http://www.w3.org/2001/XMLSchema"; + public static String XML_SCHEMA_INSTANCE_URI = "http://www.w3.org/2001/XMLSchema-instance"; + private ReadGraph graph; private Map subWriters = new HashMap(); private Map, XMLElementWriter> namedWriters = new HashMap, XMLElementWriter>(); @@ -95,6 +98,8 @@ public class XMLWriter { if(getSchemaURI() != null) { writer.writeDefaultNamespace(getSchemaURI()); } + writer.writeNamespace("xsd", XML_SCHEMA_URI); + writer.writeNamespace("xsi", XML_SCHEMA_INSTANCE_URI); } elementWriter.attributes(graph, instance, graph.getStatements(instance.instance, XML.hasAttribute), writer); if (graph.hasValue(instance.instance)) @@ -158,8 +163,6 @@ public class XMLWriter { c = childWriterClass.getConstructor(); childWriter = c.newInstance(); } - //childWriter = childWriterClass.newInstance(); - namedWriters.put(childWriterClass, childWriter); } catch (IllegalAccessException|InstantiationException|NoSuchMethodException|SecurityException|InvocationTargetException e) { String err = "Error processing " + childWriterClass.getName() + " : element writers must have accessible constructor with ReadGraph parameter"; @@ -172,12 +175,21 @@ public class XMLWriter { childWriter = writers.get(type); } if (childWriter == null) { + // try child ontology/schema Resource type = graph.getSingleType(child.instance); Resource ontology = getOntology(type); if (ontology != null) { XMLWriter xmlWriter = subWriters.get(ontology); if (xmlWriter != null) { childWriter = xmlWriter.writers.get(type); + // wrap the child writer with namespace writer + if (childWriter != null) { + if (childWriter instanceof XMLElementNamedChildWriter) { + childWriter = new XMLNSNamedChildWriter((XMLElementNamedChildWriter)childWriter, xmlWriter.schemaURI); + } else { + childWriter = new XMLNSElementWriter(childWriter, xmlWriter.schemaURI); + } + } } } if (childWriter == null)