1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 """Utility functions related to U{XML Namespaces<http://www.w3.org/TR/2006/REC-xml-names-20060816/index.html>}."""
17
18 import logging
19 import pyxb
20 import pyxb.namespace
21 from pyxb.utils import six
22
23 _log = logging.getLogger(__name__)
24
36
38 """Given a URI, provide the L{Namespace} instance corresponding to it.
39
40 This can only be used to lookup or create real namespaces. To create
41 absent namespaces, use L{CreateAbsentNamespace}.
42
43 @param uri: The URI that identifies the namespace
44 @type uri: A non-empty C{str} or C{unicode} string
45 @keyword create_if_missing: If C{True}, a namespace for the given URI is
46 created if one has not already been registered. Default is C{False}.
47 @type create_if_missing: C{bool}
48 @return: The Namespace corresponding to C{uri}, if available
49 @rtype: L{Namespace} or C{None}
50 @raise pyxb.LogicError: The uri is not a non-empty string
51 """
52 if not isinstance(uri, six.string_types):
53 raise pyxb.LogicError('Cannot lookup absent namespaces')
54 if 0 == len(uri):
55 raise pyxb.LogicError('Namespace URIs must not be empty strings')
56 rv = pyxb.namespace.Namespace._NamespaceForURI(uri)
57 if (rv is None) and create_if_missing:
58 rv = pyxb.namespace.Namespace(uri)
59 return rv
60
62 """Create an absent namespace.
63
64 Use this when you need a namespace for declarations in a schema with no
65 target namespace. Absent namespaces are not stored in the infrastructure;
66 it is your responsibility to hold on to the reference you get from this,
67 because you won't be able to look it up."""
68 return pyxb.namespace.Namespace.CreateAbsentNamespace()
69
73