summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGunnar Aastrand Grimnes <gromgull@gmail.com>2015-11-22 10:08:22 +0100
committerGunnar Aastrand Grimnes <gromgull@gmail.com>2015-11-22 18:01:40 +0100
commitbccc76132a7ca19cfa979026e2d5f9ecd8ca6dcf (patch)
treefeb96f36f8cedaa78596a162193000f0a94f696a
parentea043ead8fd51acca7d2d3f4562aab7b05b2baa1 (diff)
downloadrdflib-closednamedspace-inheritance-fix.tar.gz
Made ClosedNamespace (and _RDFNamespace) inherit from Namespaceclosednamedspace-inheritance-fix
This fixes #542
-rw-r--r--rdflib/namespace.py40
1 files changed, 20 insertions, 20 deletions
diff --git a/rdflib/namespace.py b/rdflib/namespace.py
index 57ca9749..d98b28be 100644
--- a/rdflib/namespace.py
+++ b/rdflib/namespace.py
@@ -95,11 +95,6 @@ class Namespace(unicode):
rt = unicode.__new__(cls, value, 'utf-8')
return rt
-
- @property
- def title(self):
- return URIRef(self + 'title')
-
def term(self, name):
# need to handle slices explicitly because of __getitem__ override
return URIRef(self + (name if isinstance(name, basestring) else ''))
@@ -148,27 +143,34 @@ class URIPattern(unicode):
-class ClosedNamespace(object):
+class ClosedNamespace(Namespace):
"""
A namespace with a closed list of members
Trying to create terms not listen is an error
"""
- def __init__(self, uri, terms):
- self.uri = uri
- self.__uris = {}
+ def __new__(cls, uri, terms):
+ rt = Namespace.__new__(cls, uri)
+
+ rt.__uris = {}
for t in terms:
- self.__uris[t] = URIRef(self.uri + t)
+ rt.__uris[t] = URIRef(rt + t)
+
+ return rt
def term(self, name):
uri = self.__uris.get(name)
if uri is None:
raise Exception(
- "term '%s' not in namespace '%s'" % (name, self.uri))
+ "term '%s' not in namespace '%s'" % (name, self))
else:
return uri
+ @property
+ def uri(self): # support legacy code from before ClosedNamespace extended unicode
+ return self
+
def __getitem__(self, key, default=None):
return self.term(key)
@@ -178,21 +180,18 @@ class ClosedNamespace(object):
else:
return self.term(name)
- def __str__(self):
- return str(self.uri)
-
def __repr__(self):
- return """rdf.namespace.ClosedNamespace('%s')""" % str(self.uri)
+ return """rdf.namespace.ClosedNamespace('%s')""" % self
class _RDFNamespace(ClosedNamespace):
"""
Closed namespace for RDF terms
"""
- def __init__(self):
- super(_RDFNamespace, self).__init__(
- URIRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#"),
- terms=[
+
+ def __new__(cls):
+ return ClosedNamespace.__new__(cls, "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
+ terms=[
# Syntax Names
"RDF", "Description", "ID", "about", "parseType",
"resource", "li", "nodeID", "datatype",
@@ -213,10 +212,11 @@ class _RDFNamespace(ClosedNamespace):
"XMLLiteral", "HTML", "langString"]
)
+
def term(self, name):
try:
i = int(name)
- return URIRef("%s_%s" % (self.uri, i))
+ return URIRef("%s_%s" % (self, i))
except ValueError:
return super(_RDFNamespace, self).term(name)