home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / python-rdflib / rdflib / syntax / serializers / QNameProvider.py < prev    next >
Encoding:
Python Source  |  2007-04-04  |  1.5 KB  |  47 lines

  1.  
  2. from rdflib.syntax.xml_names import split_uri
  3.  
  4. XMLLANG = u"http://www.w3.org/XML/1998/namespace#lang"
  5.  
  6.  
  7. class QNameProvider(object):
  8.     def __init__(self):
  9.         self.__cache = {}
  10.         self.__namespace = {} # mapping for prefix to namespace
  11.         self.__prefix = {}
  12.         self.set_prefix("xml", u"http://www.w3.org/XML/1998/namespace")
  13.         # TODO: explain -- the following is needed for XMLLANG as defined above to work
  14.         self.__prefix[u"http://www.w3.org/XML/1998/namespace#"] = "xml"
  15.  
  16.     def get(self, uri):
  17.         qname = self.__cache.get(uri, None)
  18.         if qname is None:
  19.             self.compute(uri)
  20.             return self.get(uri)
  21.         else:
  22.             return qname
  23.  
  24.     def compute(self, uri):
  25.         if not uri in self.__cache:
  26.             namespace, name = split_uri(uri)
  27.             prefix = self.__prefix.get(namespace, None)
  28.             if prefix is None:
  29.                 prefix = "_%s" % len(self.__namespace)
  30.                 self.set_prefix(prefix, namespace)
  31.             if prefix=="":
  32.                 self.__cache[uri] = name
  33.             else:
  34.                 self.__cache[uri] = ":".join((prefix, name))
  35.  
  36.     def set_prefix(self, prefix, namespace):
  37.         if prefix in self.__namespace:
  38.             raise "NYI: prefix already set"
  39.         self.__namespace[prefix] = namespace
  40.         self.__prefix[namespace] = prefix
  41.  
  42.     def namespaces(self):
  43.         for prefix, namespace in self.__namespace.iteritems():
  44.             yield prefix, namespace
  45.  
  46.  
  47.