Returns Scope(this.map ++ scope.map)
Returns Scope(this.map -- prefixes)
Returns the default namespace, if any, wrapped in an Option
Returns Scope.from(this.map.filter(p))
.
Returns Scope.from(this.map.filterKeys(p))
.
Returns the inverse of this Scope, as Map from namespace URIs to collections of prefixes.
Returns the inverse of this Scope, as Map from namespace URIs to collections of prefixes. These prefixes also include the empty String if this Scope has a default namespace.
Returns true if this Scope is empty.
Returns true if this Scope is empty. Faster than comparing this Scope against the empty Scope.
Returns true if the inverse exists, that is, each namespace URI has a unique prefix (including the empty prefix for the default namespace, if applicable).
Returns true if the inverse exists, that is, each namespace URI has a unique prefix (including the empty prefix for the default namespace, if applicable).
In other words, returns true if the inverse of toMap
is also a mathematical function, mapping namespace URIs to unique prefixes.
Invertible scopes offer a one-to-one correspondence between QNames and ENames. This is needed, for example, for ElemPath
s.
Only if there is such a one-to-one correspondence, the indexes in ElemPath
s and ElemPathBuilder
s are stable, when converting
between the two.
Returns this.map.keySet
.
Returns the smallest sub-declarations decl
of declarations
such that this.resolve(decl) == this.resolve(declarations)
Returns a prefix mapping to the given namespace URI, if any, wrapped in an Option
.
Returns a prefix mapping to the given namespace URI, if any, wrapped in an Option
. If multiple prefixes map to
the given namespace URI, it is undetermined which of the prefixes is returned.
This method can be handy when "inserting" an "element" into a parent tree, if one wants to reuse prefixes of the parent tree.
Relativizes the given Scope
against this Scope
, returning a Declarations
object.
Relativizes the given Scope
against this Scope
, returning a Declarations
object.
Inspired by java.net.URI
, which has a similar method for URIs.
Resolves the given declarations against this Scope
, returning an "updated" Scope
.
Resolves the given declarations against this Scope
, returning an "updated" Scope
.
Inspired by java.net.URI
, which has a similar method for URIs.
Tries to resolve the given QName
against this Scope
, returning None
for prefixed names whose prefixes are unknown
to this Scope
.
Tries to resolve the given QName
against this Scope
, returning None
for prefixed names whose prefixes are unknown
to this Scope
.
Note that the subScopeOf
relation keeps the resolveQNameOption
result the same, provided there is no default namespace.
That is, if scope1.withoutDefaultNamespace.subScopeOf(scope2.withoutDefaultNamespace)
, then for each QName qname
such that scope1.withoutDefaultNamespace.resolveQNameOption(qname).isDefined
, we have:
scope1.withoutDefaultNamespace.resolveQNameOption(qname) == scope2.withoutDefaultNamespace.resolveQNameOption(qname)
Returns an adapted copy of this Scope, but retaining only the default namespace, if any
Returns true if this is a subscope of the given parameter Scope
.
Returns true if this is a subscope of the given parameter Scope
. A Scope
is considered subscope of itself.
Returns true if this is a superscope of the given parameter Scope
.
Returns true if this is a superscope of the given parameter Scope
. A Scope
is considered superscope of itself.
Creates a String
representation of this Scope
, as it is shown in XML
Returns an adapted copy of this Scope, but without the default namespace, if any
Scope mapping prefixes to namespace URIs, as well as holding an optional default namespace. In other words, in-scope namespaces.
The purpose of a eu.cdevreeze.yaidom.Scope is to resolve eu.cdevreeze.yaidom.QNames as eu.cdevreeze.yaidom.ENames.
A
Scope
must not contain prefix "xmlns" and must not contain namespace URI "http://www.w3.org/2000/xmlns/". Moreover, aScope
must not contain the XML namespace (prefix "xml", namespace URI "http://www.w3.org/XML/1998/namespace").The Scope is backed by a map from prefixes (or the empty string for the default namespace) to (non-empty) namespace URIs.
This class depends on Declarations, but not the other way around.
Scope more formally
Method
resolve
resolves aDeclarations
against this Scope, returning a new Scope. It could be defined by the following equality:scope.resolve(declarations) == { val m = (scope.map ++ declarations.withoutUndeclarations.map) -- declarations.retainingUndeclarations.map.keySet Scope(m) }
The actual implementation may be more efficient than that, but it is consistent with this definition.
Method
relativize
relativizes a Scope against this Scope, returning aDeclarations
. It could be defined by the following equality:Again, the actual implementation may be more efficient than that, but it is consistent with this definition.
1. Property about relativize and resolve, and its proof
Methods
relativize
andresolve
obey the following equality:This property can be proven easily. After all, for arbitrary Declarations
decl
, we have:Here,
decl
stands forscope1.relativize(scope2)
, so:so:
so (visualising with Venn diagrams for prefix sets):
The RHS clearly has as keys the keys of
scope2.map
and the mapped values (per key) are also those found inscope2.map
. Hence,so:
2. Another property about relativize and resolve, and its proof
Methods
relativize
andresolve
also obey the following equality:where
scope.minimize(declarations)
is defined by the following equality:Below follows a proof of this property. For arbitrary Scope
sc
, we have:Here,
sc
stands forscope.resolve(declarations)
, so:so:
so:
so, as a result:
This and the preceding (proven) property are analogous to corresponding properties in the
URI
class.