Package xmlschema_acue ::
Module namespaces
1
2
3
4
5
6
7
8
9
10
11 """
12 This module contains namespace definitions for W3C core standards and namespace related classes.
13 """
14 from __future__ import unicode_literals
15
16 from xmlschema_acue.compat import MutableMapping, Mapping
17 from xmlschema_acue.helpers import get_namespace
18
19 XSD_NAMESPACE = 'http://www.w3.org/2001/XMLSchema'
20 "URI of the XML Schema Definition namespace (xs|xsd)"
21
22 XSI_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-instance'
23 "URI of the XML Schema Instance namespace (xsi)"
24
25 XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'
26 "URI of the XML namespace (xml)"
27
28 XHTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'
29 XHTML_DATATYPES_NAMESPACE = "http://www.w3.org/1999/xhtml/datatypes/"
30 "URIs of the Extensible Hypertext Markup Language namespace (html)"
31
32 XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink'
33 "URI of the XML Linking Language (XLink)"
34
35 XSLT_NAMESPACE = "http://www.w3.org/1999/XSL/Transform"
36 "URI of the XSL Transformations namespace (xslt)"
37
38 HFP_NAMESPACE = 'http://www.w3.org/2001/XMLSchema-hasFacetAndProperty'
39 "URI of the XML Schema has Facet and Property namespace (hfp)"
40
41 VC_NAMESPACE = "http://www.w3.org/2007/XMLSchema-versioning"
42 "URI of the XML Schema Versioning namespace (vc)"
46 """
47 Dictionary for storing information about namespace resources. The values are
48 lists of strings. Setting an existing value appends the string to the value.
49 Setting a value with a list sets/replaces the value.
50 """
52 self._store = dict()
53 self.update(*args, **kwargs)
54
56 return self._store[uri]
57
59 if isinstance(value, list):
60 self._store[uri] = value[:]
61 else:
62 try:
63 self._store[uri].append(value)
64 except KeyError:
65 self._store[uri] = [value]
66
69
71 return iter(self._store)
72
74 return len(self._store)
75
77 return repr(self._store)
78
81
84 """
85 A class to map/unmap namespace prefixes to URIs.
86
87 :param namespaces: Initial data with namespace prefixes and URIs.
88 """
89 - def __init__(self, namespaces=None, register_namespace=None):
94
96 return self._namespaces[key]
97
99 self._namespaces[key] = value
100 try:
101 self.register_namespace(key, value)
102 except (TypeError, ValueError):
103 pass
104
106 del self._namespaces[key]
107
109 return iter(self._namespaces)
110
112 return len(self._namespaces)
113
114 @property
116 return self._namespaces.get('')
117
119 self._namespaces.clear()
120
122 try:
123 if qname[0] != '{' or not self._namespaces:
124 return qname
125 except IndexError:
126 return qname
127
128 qname_uri = get_namespace(qname)
129 for prefix, uri in self.items():
130 if uri != qname_uri:
131 continue
132 if prefix:
133 self._namespaces[prefix] = uri
134 return qname.replace(u'{%s}' % uri, u'%s:' % prefix)
135 else:
136 if uri:
137 self._namespaces[prefix] = uri
138 return qname.replace(u'{%s}' % uri, '')
139 else:
140 return qname
141
143 try:
144 if qname[0] == '{' or not self:
145 return qname
146 except IndexError:
147 return qname
148
149 try:
150 prefix, name = qname.split(':', 1)
151 except ValueError:
152 if self.get(''):
153 return u'{%s}%s' % (self.get(''), qname)
154 else:
155 return qname
156 else:
157 try:
158 uri = self._namespaces[prefix]
159 except KeyError:
160 return qname
161 else:
162 return u'{%s}%s' % (uri, name) if uri else name
163
165 transferred = []
166 for k, v in other.items():
167 if k in self:
168 if v != self[k]:
169 continue
170 else:
171 self[k] = v
172 transferred.append(k)
173 for k in transferred:
174 del other[k]
175
178 """
179 A read-only map for filtered access to a dictionary that stores objects mapped from QNames.
180 """
181 - def __init__(self, qname_dict, namespace_uri):
182 self.target_dict = qname_dict
183 self.namespace = namespace_uri
184 if namespace_uri:
185 self.key_fmt = '{' + namespace_uri + '}%s'
186 else:
187 self.key_fmt = '%s'
188
190 return self.target_dict[self.key_fmt % key]
191
194
197
199 return '%s(%s)' % (self.__class__.__name__, str(self.as_dict()))
200
202 return self.key_fmt % key in self.target_dict
203
205 return self.as_dict() == dict(other.items())
206
207 - def copy(self, **kwargs):
208 return self.__class__(self, **kwargs)
209
210 - def as_dict(self, fqn_keys=False):
211 if fqn_keys:
212 return {
213 k: v for k, v in self.target_dict.items()
214 if self.namespace == get_namespace(k)
215 }
216 else:
217 return {
218 k if k[0] != '{' else k[k.rindex('}') + 1:]: v
219 for k, v in self.target_dict.items()
220 if self.namespace == get_namespace(k)
221 }
222