--- /dev/null
+package org.simantics.xml.sax.base;\r
+\r
+import java.util.Collection;\r
+import java.util.Set;\r
+\r
+import javax.xml.stream.XMLStreamException;\r
+import javax.xml.stream.XMLStreamWriter;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class XMLNSElementWriter implements XMLElementWriter{\r
+ \r
+ XMLElementWriter writer;\r
+ String ns;\r
+ \r
+ public XMLNSElementWriter(XMLElementWriter writer, String ns) {\r
+ this.writer = writer;\r
+ this.ns = ns;\r
+ }\r
+ \r
+ @Override\r
+ public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.start(graph, instance, writer);\r
+ writer.writeNamespace("", ns);\r
+ }\r
+ \r
+ @Override\r
+ public void attributes(ReadGraph graph, WriterElement instance, Collection<Statement> attributes,\r
+ XMLStreamWriter writer) throws XMLStreamException, DatabaseException {\r
+ this.writer.attributes(graph, instance, attributes, writer);\r
+ }\r
+ \r
+ @Override\r
+ public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.characters(graph, instance, writer);\r
+ }\r
+ \r
+ @Override\r
+ public void children(ReadGraph graph, WriterElement instance, Set<Resource> writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.children(graph, instance, writer);\r
+ }\r
+ \r
+ @Override\r
+ public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.end(graph, instance, writer);\r
+ }\r
+ \r
+ @Override\r
+ public String getElementId() {\r
+ return writer.getElementId();\r
+ }\r
+ \r
+ @Override\r
+ public Resource getType(ReadGraph graph) throws DatabaseException {\r
+ return writer.getType(graph);\r
+ }\r
+ \r
+}\r
--- /dev/null
+package org.simantics.xml.sax.base;\r
+\r
+import java.util.Collection;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import javax.xml.stream.XMLStreamException;\r
+import javax.xml.stream.XMLStreamWriter;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class XMLNSNamedChildWriter implements XMLElementNamedChildWriter{\r
+ \r
+ XMLElementNamedChildWriter writer;\r
+ String ns;\r
+ \r
+ public XMLNSNamedChildWriter(XMLElementNamedChildWriter writer, String ns) {\r
+ this.writer = writer;\r
+ this.ns = ns;\r
+ }\r
+ \r
+ @Override\r
+ public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.start(graph, instance, writer);\r
+ writer.writeNamespace("", ns);\r
+ }\r
+ \r
+ @Override\r
+ public void attributes(ReadGraph graph, WriterElement instance, Collection<Statement> attributes,\r
+ XMLStreamWriter writer) throws XMLStreamException, DatabaseException {\r
+ this.writer.attributes(graph, instance, attributes, writer);\r
+ }\r
+ \r
+ @Override\r
+ public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.characters(graph, instance, writer);\r
+ }\r
+ \r
+ @Override\r
+ public void children(ReadGraph graph, WriterElement instance, Set<Resource> writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.children(graph, instance, writer);\r
+ }\r
+ \r
+ @Override\r
+ public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+ throws XMLStreamException, DatabaseException {\r
+ this.writer.end(graph, instance, writer);\r
+ }\r
+ \r
+ @Override\r
+ public String getElementId() {\r
+ return writer.getElementId();\r
+ }\r
+ \r
+ @Override\r
+ public Resource getType(ReadGraph graph) throws DatabaseException {\r
+ return writer.getType(graph);\r
+ }\r
+ \r
+ @Override\r
+ public Class<? extends XMLElementWriter> getWriter(ReadGraph graph, Map<Resource, XMLElementWriter> writers,\r
+ WriterElement element) throws DatabaseException {\r
+ return this.writer.getWriter(graph, writers, element);\r
+ }\r
+\r
+}\r
public class XMLParser extends DefaultHandler implements Serializable {\r
\r
public static String PLUGIN_ID = "org.simantics.xml.sax.base";\r
+ public static String XML_NAMESPACE_REF = "xmlns";\r
\r
private static final long serialVersionUID = 7360740940824360338L;\r
private static final boolean debug = false;\r
- private static String XML_SCHEMA_REF = "xmlns";\r
+ \r
private ILogger logger;\r
private WriteGraph graph;\r
private Resource root;\r
}\r
} else {\r
// check for schema reference attempt to locate subparser for it.\r
- Attribute schemaRef = element.getAttribute(XML_SCHEMA_REF);\r
+ Attribute schemaRef = element.getAttribute(XML_NAMESPACE_REF);\r
if (schemaRef != null && subParsers.containsKey(schemaRef.value)) {\r
XMLParser subParser = subParsers.get(schemaRef.value);\r
subParser.loadElement(parents, element);\r
\r
public class XMLWriter {\r
\r
+ public static String XML_SCHEMA_URI = "http://www.w3.org/2001/XMLSchema";\r
+ public static String XML_SCHEMA_INSTANCE_URI = "http://www.w3.org/2001/XMLSchema-instance";\r
+ \r
private ReadGraph graph;\r
private Map<Resource, XMLWriter> subWriters = new HashMap<Resource, XMLWriter>();\r
private Map<Class<? extends XMLElementWriter>, XMLElementWriter> namedWriters = new HashMap<Class<? extends XMLElementWriter>, XMLElementWriter>();\r
if(getSchemaURI() != null) {\r
writer.writeDefaultNamespace(getSchemaURI());\r
}\r
+ writer.writeNamespace("xsd", XML_SCHEMA_URI);\r
+ writer.writeNamespace("xsi", XML_SCHEMA_INSTANCE_URI);\r
}\r
elementWriter.attributes(graph, instance, graph.getStatements(instance.instance, XML.hasAttribute), writer);\r
if (graph.hasValue(instance.instance))\r
XMLWriter xmlWriter = subWriters.get(ontology);\r
if (xmlWriter != null) {\r
childWriter = xmlWriter.writers.get(type);\r
+ // wrap the child writer with namespace writer\r
+ if (childWriter instanceof XMLElementNamedChildWriter) {\r
+ childWriter = new XMLNSNamedChildWriter((XMLElementNamedChildWriter)childWriter, xmlWriter.schemaURI);\r
+ } else {\r
+ childWriter = new XMLNSElementWriter(childWriter, xmlWriter.schemaURI);\r
+ }\r
}\r
}\r
if (childWriter == null)\r