gnu.xml.pipeline
Class NSFilter
java.lang.Object
|
+--gnu.xml.pipeline.EventFilter
|
+--gnu.xml.pipeline.NSFilter
This filter ensures that element and attribute names are properly prefixed,
and that such prefixes are declared. Such data is critical for operations
like writing XML text, and validating against DTDs: names or their prefixes
may have been discarded, although they are essential to the exchange of
information using XML. There are various common ways that such data
gets discarded:
- By default, SAX2 parsers must discard the "xmlns*"
attributes, and may also choose not to report properly prefixed
names for elements or attributes. (Some parsers may support
changing the namespace-prefixes value from the default
to true, effectively eliminating the need to use this
filter on their output.)
- When event streams are generated from a DOM tree, they may
have never have had prefixes or declarations for namespaces; or
the existing prefixes or declarations may have been invalidated
by structural modifications to that DOM tree.
- Other software writing SAX event streams won't necessarily
be worrying about prefix management, and so they will need to
have a transparent solution for managing them.
This filter uses a heuristic to choose the prefix to assign to any
particular name which wasn't already corectly prefixed. The associated
namespace will be correct, and the prefix will be declared. Original
structures facilitating text editing, such as conventions about use of
mnemonic prefix names or the scoping of prefixes, can't always be
reconstructed after they are discarded, as strongly encouraged by the
current SAX2 defaults.
Note that this can't possibly know whether values inside attribute
value or document content involve prefixed names. If your application
requires using prefixed names in such locations you'll need to add some
appropriate logic (perhaps adding additional heuristics in a subclass).
- David Brownell
NSFilter
public NSFilter(EventConsumer next)
Passes events through to the specified consumer, after first
processing them.
- next - the next event consumer to receive events.
endDocument
public void endDocument()
endElement
public void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName)
- uri
- localName
- qName
endPrefixMapping
public void endPrefixMapping(java.lang.String prefix)
This call is not passed to the next consumer in the chain.
Prefix declarations and scopes are only exposed in their
attribute form.
- prefix
startDocument
public void startDocument()
startElement
public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, Attributes atts)
- uri
- localName
- qName
- atts
startPrefixMapping
public void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
This call is not passed to the next consumer in the chain.
Prefix declarations and scopes are only exposed in the form
of attributes; this callback just records a declaration that
will be exposed as an attribute.
- prefix
- uri
- By default, SAX2 parsers must discard the "xmlns*"
attributes, and may also choose not to report properly prefixed
names for elements or attributes. (Some parsers may support
changing the namespace-prefixes value from the default
to true, effectively eliminating the need to use this
filter on their output.)
- When event streams are generated from a DOM tree, they may
have never have had prefixes or declarations for namespaces; or
the existing prefixes or declarations may have been invalidated
by structural modifications to that DOM tree.
- Other software writing SAX event streams won't necessarily
be worrying about prefix management, and so they will need to
have a transparent solution for managing them.
This filter uses a heuristic to choose the prefix to assign to any particular name which wasn't already corectly prefixed. The associated namespace will be correct, and the prefix will be declared. Original structures facilitating text editing, such as conventions about use of mnemonic prefix names or the scoping of prefixes, can't always be reconstructed after they are discarded, as strongly encouraged by the current SAX2 defaults. Note that this can't possibly know whether values inside attribute value or document content involve prefixed names. If your application requires using prefixed names in such locations you'll need to add some appropriate logic (perhaps adding additional heuristics in a subclass).