SAX2 Namespace Support

Brett McLaughlin bmclaugh at algx.net
Wed Jan 5 18:41:24 GMT 2000


David Brownell wrote:
> 
> If SAX2 is going to be API-incompatible with SAX1, then I agree that
> something like a "Name" class seems desirable.  By and large, APIs that
> deal with composite names do so through a unified abstraction.  The few
> I've seen that don't do so have been error prone.

I agree a helper class could greatly simplify using namespaces/URI/etc.
correctly.

> 
> David Megginson wrote:
> >
> > John Aldridge <john.aldridge at informatix.co.uk> writes:
> >
> > > I'm sorry, I don't see the problem.  The QNames are equal if ns() and
> > > name() both match. ...
> 
> For the record, there's a non-normative appendix that says a few more
> things.  Like, the attribute name { "http://foo", "bar" } is different
> the element name with the same structure (different 'partition').  Since
> it's non-normative, and for other reasons, I encourage ignoring that.
> 
> (Yes, prefix isn't supposed to matter in the common case.  One ignores
> pointer values and use what they point to, except in special cases.)
> 
> > In principle (the principle of least surprise), it's very bad
> > behaviour for two objects to be == in C++ or equals() in Java if any
> > of their publicly-accessible fields differ.  Think of sets, for
> > example.
> 
> Actually, it's quite common for nontrivial objects that equals() only
> involve a subset of the visible properties.  It's probably even typical
> in applications I've worked with.

I agree with David B. in theory, but David M. (gee, that's confusing...)
in practice.  I think that equality, and assumptions about equality,
have some side effects.  For example, if two objects compared through
equals() return true, then I expect to be able to use the object
interchangeable.  Notice I didn't add [for the specific task they were
being compared for] to the end of that sentence.  In other words, though
they may be equal for the purpose of the startElement() function, they
may not be equal in a case where the differing public fields are
actually used.  

This to me reeks of bugs waiting to happen if the two objects were
evaluated as equal, because of this.  Someone will surely manage to
happily go use Q2 because it is equals() to Q1 someplace where Q2 will
not achive the same results as Q1.  I'd bet lunch on it ;-)

So I think equals() isn't a good idea; however, something like <code>if
(name1.sameNamespace(name2))</code> or something equivalent (not the
best example, but you get the idea) doesn't offend my eyes.... for what
it's worth.

-Brett

> 
> There are definitions for what equals() must do, and the Java issue that
> is usually overlooked is that if two objects are equals() they must
> have the same hashCode()!  There may be dozens of publicly accessible
> properties, most of which don't affect equality.
> 
> Don't be thinking that equals() means anything more than the "most
> common comparison operation".  There are many comparison methods, and
> also "==", that can be defined or used as needed.
> 
> - Dave
> 
> xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
> Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
> To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
> unsubscribe xml-dev
> To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
> subscribe xml-dev-digest
> List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list