make it object-oriented

I found out recently that xsd(at least in my eyes) is not 
object-oriented.  It doesn't support information hiding very well as in 
a superclass hides it's subclass's fields and methods.  Only 
superclass's data is seen.  Information hiding is one of the principles 
of OO.

Concrete example....
I ran into a standard and I needed to extend it, but since they didn't 
prepare for that with the "any" wildcard in the standard, I couldn't.  I 
thought that xsd was object-oriented and I could just define a new type 
to hide the info in.  This way older programs would not be notified of 
the new field as they only had version 1 of the standard.

<car xsi:type="ford">
</car>

Problem with that is it is not valid according to programs that are 
following the standard only, and if their parser did happen to grab the 
additional xsd which they don't want, their program would break because 
it is not prepared for the new feature.

EXPECTED BEHAVIOR....
app using version 1 of standard
app should validate the xml with version 1 of the schema.  Any added 
fields are ignored(because they could be a subclass).  The app doesn't 
care, a car is a car.  If it is a ford or a honda, it won't know the 
difference here.  Any missing fields are reported so that it is known 
that it is an invalid xml.

app using version 1 plus the new addition schema
app should validate the xml with version 1 and the new schema and app 
gets notified of the new fields that a ford has in addition to the 
normal car fields.

This may be a bad example, but in most standards, companies add new 
features to the schema and typically really want a subclass.

Not only this, but XSD's currently don't work as well as they should 
with API's for XML Binding(AXB).  Currently, if I have a car and a ford, 
and I use AXB, I should end up with a Car object, or Ford object 
automatically.  Instead, if we use the any wildcard, I end up with a Car 
object that has private data with more info about the fact that it is a 
ford with all the new features in private data.  This is very annoying. 
 Can we possibly change this??
thanks,
dean

Received on Monday, 20 October 2003 17:51:08 UTC