Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/creactistore/_templates/lib/rdflib/plugins/serializers/xmlwriter.py
diff options
context:
space:
mode:
Diffstat (limited to 'creactistore/_templates/lib/rdflib/plugins/serializers/xmlwriter.py')
-rw-r--r--creactistore/_templates/lib/rdflib/plugins/serializers/xmlwriter.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/creactistore/_templates/lib/rdflib/plugins/serializers/xmlwriter.py b/creactistore/_templates/lib/rdflib/plugins/serializers/xmlwriter.py
new file mode 100644
index 0000000..d36af4b
--- /dev/null
+++ b/creactistore/_templates/lib/rdflib/plugins/serializers/xmlwriter.py
@@ -0,0 +1,103 @@
+import codecs
+from xml.sax.saxutils import quoteattr, escape
+
+__all__ = ['XMLWriter']
+
+class XMLWriter(object):
+ def __init__(self, stream, namespace_manager, encoding=None, decl=1, extra_ns={}):
+ encoding = encoding or 'utf-8'
+ encoder, decoder, stream_reader, stream_writer = codecs.lookup(encoding)
+ self.stream = stream = stream_writer(stream)
+ if decl:
+ stream.write('<?xml version="1.0" encoding="%s"?>' % encoding)
+ self.element_stack = []
+ self.nm = namespace_manager
+ self.extra_ns=extra_ns
+ self.closed = True
+
+ def __get_indent(self):
+ return " " * len(self.element_stack)
+ indent = property(__get_indent)
+
+ def __close_start_tag(self):
+ if not self.closed: # TODO:
+ self.closed = True
+ self.stream.write(">")
+
+ def push(self, uri):
+ self.__close_start_tag()
+ write = self.stream.write
+ write("\n")
+ write(self.indent)
+ write("<%s" % self.qname(uri))
+ self.element_stack.append(uri)
+ self.closed = False
+ self.parent = False
+
+ def pop(self, uri=None):
+ top = self.element_stack.pop()
+ if uri:
+ assert uri == top
+ write = self.stream.write
+ if not self.closed:
+ self.closed = True
+ write("/>")
+ else:
+ if self.parent:
+ write("\n")
+ write(self.indent)
+ write("</%s>" % self.qname(top))
+ self.parent = True
+
+ def element(self, uri, content, attributes={}):
+ """Utility method for adding a complete simple element"""
+ self.push(uri)
+ for k, v in attributes.iteritems():
+ self.attribute(k,v)
+ self.text(content)
+ self.pop()
+
+ def namespaces(self, namespaces=None):
+ if not namespaces:
+ namespaces=self.nm.namespaces()
+
+ write = self.stream.write
+ write("\n")
+ for prefix, namespace in namespaces:
+ if prefix:
+ write(' xmlns:%s="%s"\n' % (prefix, namespace))
+ else:
+ write(' xmlns="%s"\n' % namespace)
+
+ for prefix, namespace in self.extra_ns.items():
+ if prefix:
+ write(' xmlns:%s="%s"\n' % (prefix, namespace))
+ else:
+ write(' xmlns="%s"\n' % namespace)
+
+
+ def attribute(self, uri, value):
+ write = self.stream.write
+ write(" %s=%s" % (self.qname(uri), quoteattr(value)))
+
+ def text(self, text):
+ self.__close_start_tag()
+ if "<" in text and ">" in text and not "]]>" in text:
+ self.stream.write("<![CDATA[")
+ self.stream.write(text)
+ self.stream.write("]]>")
+ else:
+ self.stream.write(escape(text))
+
+ def qname(self,uri):
+ """Compute qname for a uri using our extra namespaces,
+ or the given namespace manager"""
+
+ for pre,ns in self.extra_ns.items():
+ if uri.startswith(ns):
+ if pre!="":
+ return ":".join(pre,uri[len(ns):])
+ else:
+ return uri[len(ns):]
+
+ return self.nm.qname(uri)