[
Lists Home |
Date Index |
Thread Index
]
- From: Stefan Haustein <stefan.haustein@trantor.de>
- To: Terje Norderhaug <terje@in-progress.com>, xml-dev <xml-dev@xml.org>
- Date: Sun, 06 Feb 2000 18:01:51 +0100
Terje Norderhaug wrote:
> At 4:46 AM 2/5/00, Stefan Haustein wrote:
> > Terje Norderhaug wrote:
> >> I suggest that parsers interns each name as a separate string in the
> >> namespace it belong to. This should guarantee that two equal names in the
> >> same namespace are identical, and that two equal names in different
> >> namespaces are unidentical.
> >
> >Sounds too complicated for broad acceptance [...]
>
> It is straight-forward to implement. Here is pseudo code for one possible
> implementation using hash tables:
Ok, replace "complicated" by "unconvential". I do not like
the idea off putting "hidden" meanings to string1 == string2.
Normaly, someone unfamiliar with the concrete implemention
would expect that both strings are java-interned. Also, you
would not be able to compare just against a constant. You
would need to ask the parser for the "right" String Object
corresponding to a concrete namespace/name combination for
comparison. My main argument (you did not qoute) was that
I am in doubt if your suggestion is really good OOP. A
cleaner OO approach would probably be having a QName class
/ interface with the corresponding compare methods.
But we already had this discussion, and the conclusion
was to stay at the String based interface. As far as I
remember, the reasons were
1. maximum performance / simplicity (SAX is a low level,
driver-like interface)
2. there was no agreement about the semantics of equals
in several cases
> Given that names are interned in namespaces, one only have to test whether
> the two names are identical to determine whether the two names are the
> same:
>
> name1 == name2
>
> Note that in the latter case, comparing namespaces are no longer required.
> This allows major simplifications of code as one no longer have to pass
> namespaces with names.
I do not agree: the problem is, you cannot any longer compare against
constants like
if (namespace.equals ("http://www.my.com/mynamespace")) {
if (name.equals ("price")) ....
else if (name.equals ("quantity")) .....
you would need something like
String myPriceElement = parser.getUnique
("http://www.my.com/mynamespace", "price");
String myQtytyElement = parser.getUnique
("http://www.my.com/mynamespace", "quantity");
...
if (name == myPriceElement) ....
else if (name == myQtytyElement) ....
... thus add a lot of variables or even worse, do the hashtable lookup
inline....
Best regards
Stefan
|