]> gerrit.simantics Code Review - simantics/interop.git/commitdiff
Export XML Namespaces
authorluukkainen <luukkainen@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Mon, 30 Jan 2017 10:59:27 +0000 (10:59 +0000)
committerMarko Luukkainen <marko.luukkainen@vtt.fi>
Thu, 2 Feb 2017 12:01:35 +0000 (14:01 +0200)
refs #6985

git-svn-id: https://www.simantics.org/svn/simantics/interoperability/trunk@33440 ac1ea38d-2e2b-0410-8846-a27921b304fc

org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLNSElementWriter.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLNSNamedChildWriter.java [new file with mode: 0644]
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLParser.java
org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLWriter.java

diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLNSElementWriter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLNSElementWriter.java
new file mode 100644 (file)
index 0000000..42606c1
--- /dev/null
@@ -0,0 +1,65 @@
+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
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLNSNamedChildWriter.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLNSNamedChildWriter.java
new file mode 100644 (file)
index 0000000..296c238
--- /dev/null
@@ -0,0 +1,72 @@
+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
index 992b98ab672f3cd2c39d0314368b158389dc0188..01b8deba7b3ad341cba064836ab78417977bf62f 100644 (file)
@@ -29,10 +29,11 @@ import org.xml.sax.helpers.DefaultHandler;
 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
@@ -125,7 +126,7 @@ public class XMLParser extends DefaultHandler implements Serializable {
                        }\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
index f37e4d8e2ce438094aa224f1099a2e46f8163830..ac2d3682704f1962e8815744dd9ef6917ee2021a 100644 (file)
@@ -26,6 +26,9 @@ import org.simantics.xml.sax.ontology.XMLResource;
 \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
@@ -95,6 +98,8 @@ public class XMLWriter {
                        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
@@ -178,6 +183,12 @@ public class XMLWriter {
                                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