Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/creactistore/_templates/lib/rdflib/plugins/serializers/rdfxml.py
diff options
context:
space:
mode:
Diffstat (limited to 'creactistore/_templates/lib/rdflib/plugins/serializers/rdfxml.py')
-rw-r--r--creactistore/_templates/lib/rdflib/plugins/serializers/rdfxml.py282
1 files changed, 0 insertions, 282 deletions
diff --git a/creactistore/_templates/lib/rdflib/plugins/serializers/rdfxml.py b/creactistore/_templates/lib/rdflib/plugins/serializers/rdfxml.py
deleted file mode 100644
index d72c27e..0000000
--- a/creactistore/_templates/lib/rdflib/plugins/serializers/rdfxml.py
+++ /dev/null
@@ -1,282 +0,0 @@
-from __future__ import generators
-
-from rdflib.plugins.serializers.xmlwriter import XMLWriter
-
-from rdflib.namespace import Namespace, RDF, RDFS, split_uri
-
-from rdflib.term import URIRef, Literal, BNode
-from rdflib.util import first, more_than
-from rdflib.collection import Collection
-from rdflib.serializer import Serializer
-
-from rdflib.exceptions import Error
-
-from rdflib.py3compat import b
-
-from xml.sax.saxutils import quoteattr, escape
-
-__all__ = ['fix', 'XMLSerializer', 'PrettyXMLSerializer']
-
-class XMLSerializer(Serializer):
-
- def __init__(self, store):
- super(XMLSerializer, self).__init__(store)
-
- def __bindings(self):
- store = self.store
- nm = store.namespace_manager
- bindings = {}
- for predicate in set(store.predicates()):
- prefix, namespace, name = nm.compute_qname(predicate)
- bindings[prefix] = URIRef(namespace)
- RDFNS = URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#")
- if "rdf" in bindings:
- assert bindings["rdf"]==RDFNS
- else:
- bindings["rdf"] = RDFNS
- for prefix, namespace in bindings.iteritems():
- yield prefix, namespace
-
-
- def serialize(self, stream, base=None, encoding=None, **args):
- self.base = base
- self.__stream = stream
- self.__serialized = {}
- encoding = self.encoding
- self.write = write = lambda uni: stream.write(uni.encode(encoding, 'replace'))
-
- # startDocument
- write('<?xml version="1.0" encoding="%s"?>\n' % self.encoding)
-
- # startRDF
- write('<rdf:RDF\n')
- # If provided, write xml:base attribute for the RDF
- if "xml_base" in args:
- write(' xml:base="%s"\n' % args['xml_base'])
- # TODO: assert(namespaces["http://www.w3.org/1999/02/22-rdf-syntax-ns#"]=='rdf')
- bindings = list(self.__bindings())
- bindings.sort()
- for prefix, namespace in bindings:
- if prefix:
- write(' xmlns:%s="%s"\n' % (prefix, namespace))
- else:
- write(' xmlns="%s"\n' % namespace)
- write('>\n')
-
- # write out triples by subject
- for subject in self.store.subjects():
- self.subject(subject, 1)
-
- # endRDF
- write( "</rdf:RDF>\n" )
-
- # Set to None so that the memory can get garbage collected.
- #self.__serialized = None
- del self.__serialized
-
-
- def subject(self, subject, depth=1):
- if not subject in self.__serialized:
- self.__serialized[subject] = 1
- if isinstance(subject, (BNode,URIRef)):
- write = self.write
- indent = " " * depth
- element_name = "rdf:Description"
- if isinstance(subject, BNode):
- write( '%s<%s rdf:nodeID="%s"' %
- (indent, element_name, subject))
- else:
- uri = quoteattr(self.relativize(subject))
- write( "%s<%s rdf:about=%s" % (indent, element_name, uri))
- if (subject, None, None) in self.store:
- write( ">\n" )
- for predicate, object in self.store.predicate_objects(subject):
- self.predicate(predicate, object, depth+1)
- write( "%s</%s>\n" % (indent, element_name))
- else:
- write( "/>\n" )
-
- def predicate(self, predicate, object, depth=1):
- write = self.write
- indent = " " * depth
- qname = self.store.namespace_manager.qname(predicate)
- if isinstance(object, Literal):
- attributes = ""
- if object.language:
- attributes += ' xml:lang="%s"'%object.language
-
- if object.datatype:
- attributes += ' rdf:datatype="%s"'%object.datatype
-
- write("%s<%s%s>%s</%s>\n" %
- (indent, qname, attributes,
- escape(object), qname) )
- else:
- if isinstance(object, BNode):
- write('%s<%s rdf:nodeID="%s"/>\n' %
- (indent, qname, object))
- else:
- write("%s<%s rdf:resource=%s/>\n" %
- (indent, qname, quoteattr(self.relativize(object))))
-
-
-
-XMLLANG = "http://www.w3.org/XML/1998/namespacelang"
-XMLBASE = "http://www.w3.org/XML/1998/namespacebase"
-OWL_NS = Namespace('http://www.w3.org/2002/07/owl#')
-
-# TODO:
-def fix(val):
- "strip off _: from nodeIDs... as they are not valid NCNames"
- if val.startswith("_:"):
- return val[2:]
- else:
- return val
-
-
-class PrettyXMLSerializer(Serializer):
-
- def __init__(self, store, max_depth=3):
- super(PrettyXMLSerializer, self).__init__(store)
- self.forceRDFAbout=set()
-
- def serialize(self, stream, base=None, encoding=None, **args):
- self.__serialized = {}
- store = self.store
- self.base = base
- self.max_depth = args.get("max_depth", 3)
- assert self.max_depth>0, "max_depth must be greater than 0"
-
- self.nm = nm = store.namespace_manager
- self.writer = writer = XMLWriter(stream, nm, encoding)
-
- namespaces = {}
- possible = set(store.predicates()).union(store.objects(None, RDF.type))
- for predicate in possible:
- prefix, namespace, local = nm.compute_qname(predicate)
- namespaces[prefix] = namespace
- namespaces["rdf"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- writer.push(RDF.RDF)
- if "xml_base" in args:
- writer.attribute(XMLBASE, args["xml_base"])
- writer.namespaces(namespaces.iteritems())
-
- # Write out subjects that can not be inline
- for subject in store.subjects():
- if (None, None, subject) in store:
- if (subject, None, subject) in store:
- self.subject(subject, 1)
- else:
- self.subject(subject, 1)
-
- # write out anything that has not yet been reached
- # write out BNodes last (to ensure they can be inlined where possible)
- bnodes=set()
- for subject in store.subjects():
- if isinstance(subject,BNode):
- bnodes.add(subject)
- continue
- self.subject(subject, 1)
- #now serialize only those BNodes that have not been serialized yet
- for bnode in bnodes:
- if bnode not in self.__serialized:
- self.subject(subject, 1)
- writer.pop(RDF.RDF)
- stream.write(b("\n"))
-
- # Set to None so that the memory can get garbage collected.
- self.__serialized = None
-
-
-
- def subject(self, subject, depth=1):
- store = self.store
- writer = self.writer
- if subject in self.forceRDFAbout:
- writer.push(RDF.Description)
- writer.attribute(RDF.about, self.relativize(subject))
- writer.pop(RDF.Description)
- self.forceRDFAbout.remove(subject)
- elif not subject in self.__serialized:
- self.__serialized[subject] = 1
- type = first(store.objects(subject, RDF.type))
- try:
- self.nm.qname(type)
- except:
- type = None
- element = type or RDF.Description
- writer.push(element)
- if isinstance(subject, BNode):
- def subj_as_obj_more_than(ceil):
- return True
- # more_than(store.triples((None, None, subject)), ceil)
-
- #here we only include BNode labels if they are referenced
- #more than once (this reduces the use of redundant BNode identifiers)
- if subj_as_obj_more_than(1):
- writer.attribute(RDF.nodeID, fix(subject))
- else:
- writer.attribute(RDF.about, self.relativize(subject))
- if (subject, None, None) in store:
- for predicate, object in store.predicate_objects(subject):
- if not (predicate==RDF.type and object==type):
- self.predicate(predicate, object, depth+1)
- writer.pop(element)
- elif subject in self.forceRDFAbout:
- writer.push(RDF.Description)
- writer.attribute(RDF.about, self.relativize(subject))
- writer.pop(RDF.Description)
- self.forceRDFAbout.remove(subject)
-
- def predicate(self, predicate, object, depth=1):
- writer = self.writer
- store = self.store
- writer.push(predicate)
- if isinstance(object, Literal):
- attributes = ""
- if object.language:
- writer.attribute(XMLLANG, object.language)
- if object.datatype:
- writer.attribute(RDF.datatype, object.datatype)
- writer.text(object)
- elif object in self.__serialized or not (object, None, None) in store:
- if isinstance(object, BNode):
- if more_than(store.triples((None, None, object)), 0):
- writer.attribute(RDF.nodeID, fix(object))
- else:
- writer.attribute(RDF.resource, self.relativize(object))
- else:
- if first(store.objects(object, RDF.first)): # may not have type RDF.List
- collection = object
- self.__serialized[object] = 1
- # TODO: warn that any assertions on object other than
- # RDF.first and RDF.rest are ignored... including RDF.List
- writer.attribute(RDF.parseType, "Collection")
- col=Collection(store,object)
- for item in col:
- if isinstance(item,URIRef):
- self.forceRDFAbout.add(item)
- self.subject(item)
- if not isinstance(item,URIRef):
- self.__serialized[item] = 1
- else:
- if first(store.triples_choices((object,
- RDF.type,
- [OWL_NS.Class,RDFS.Class]))) and\
- isinstance(object, URIRef):
- writer.attribute(RDF.resource, self.relativize(object))
- elif depth<=self.max_depth:
- self.subject(object, depth+1)
- elif isinstance(object, BNode):
- if not object in self.__serialized and \
- (object, None, None) in store and \
- len(list(store.subjects(object=object)))==1:
- #inline blank nodes if they haven't been serialized yet and are
- #only referenced once (regardless of depth)
- self.subject(object, depth+1)
- else:
- writer.attribute(RDF.nodeID, fix(object))
- else:
- writer.attribute(RDF.resource, self.relativize(object))
- writer.pop(predicate)
-