Node
NAME LibXML::Class::Node - base role of types, that can be XML-named and aware of namespacing
DESCRIPTION
This role consumes LibXML::Class::NS.
Attributes
Str:D $.xml-nameA lazy attribute, initialized from a return value of
xml-build-namemethod. While the method is not explicitly required by the role (there are some compile-time issues arrise if it does), but it has to be implemented by a consuming class.
Methods
method xml-has-name()A predicate, reporting if
$.xml-namehas been initialized already.method xml-apply-ns(LibXML::Element:D $dest-elem, Bool:D :$default = True, Str :namespace(:xml-default-ns(:$ns)), Str :xml-default-ns-pfx(:$prefix), :$config = $*LIBXML-CLASS-CONFIG)Assuming that current object is being serialized into
$dest-elemthis method applies namespace information to the element, based on what is set for the object itself. This means:adding all prefix definitions from
$.xml-namespacesto the elementfinding out namespace default value and prefix
resolving the previous values and setting them on the element
Namespace default and prefix passed in as
$nsand$prefixarguments would override what is set for the object itself even when just one is set. This is a common rule when defining either of two is considered as if both are set, even if the other one is undefined.If no namespace is explicitly passed in the arguments and
$defaultis True the corresponding object attributes are taken.If the default namespace by now is set and is not empty then it's used as is. An empty one is resolved from
$dest-elemby looking up the empty prefix "" ā this is how the default namespace is propagaded from parent XML elements.If the prefix is set we also try to resolve it first on the
$dest-elem. Don't forget that by now we've already applied all locally defined namespace prefixes to the element making the overall picture complete. If the prefix cannot be resolved then either$config.alertis used to report the problem, orLibXML::Class::X::NS::Prefixis thrown unconditionally. Resolved prefix gets added to the element too.
SEE ALSO
COPYRIGHT
(c) 2023, Vadim Belman [email protected]
LICENSE
Artistic License 2.0
See the LICENSE file in this distribution.