[
Lists Home |
Date Index |
Thread Index
]
* Henry S. Thompson <ht@inf.ed.ac.uk> [2004-12-20 01:43]:
> > I'd like to assert that the element set either contains a simple
> > type or more set elements.
> As specified, your requirement cannot be met by W3C XML Schema.
> I'm tempted to say that this looks like questionable markup design,
> since all the structural information which would allow validation
> and/or type assignment to do any useful work is 'hidden' in
> attributes, and to wonder why you don't say
> <phone>
> <type>work</type>
> <number>555-1212</number>
> </phone>
> but I won't, because I don't know what other constraints you are
> trying to satisfy. . .
Design wasn't right. I created a separate element and called it
put. Sounds chintzy, but...
I'm not trying to model an address book, but a generic Java
object configuration script.
Such that this.
new Boolean("true")
Via this.
<construct type="java.lang.Boolean">
<property name="value" type="java.lang.String"/>
</construct>
Can be expressed like this.
<set name="value">true</set>
So to construct a HashMap of URIs and pass it to a setter method
that accepts a Map this is specified in a configuration:
<setter name="locations" method="setLocations">
<construct type="java.util.HashMap">
<putter name="location" method="put">
<property name="key" type="java.lang.String"/>
<construct type="java.net.URI">
<property name="uri" type="java.lang.String"/>
</property>
</putter>
</construct>
</setter>
So that the end user can express this more concisely.
<set name="locations">
<put name="location">
<set name="key">alan</set>
<set name="uri">http://engrm.com/</set>
</put>
<put name="location">
<set name="key">henry</set>
<set name="uri">http://www.ltg.ed.ac.uk/~ht/</set>
</put>
</set>
And there's my "put" which is a different beast from "set", and
can be expressed as XML Schema.
This is so that I can create an Ant type confguration file that
can be validated using XML Schema.
At first I pursused the Ant style, where element and attribute
names mapped to Java method names, but it started to infect the
Java with a lot of akward setter methods.
This is a bit harder to read, but it can be validated, and
existing objects can be used in configuration, without a need to
create special setter methods, special nested static classes,
and all those other Ant tricks.
Jetty has a similar concept, but I wanted to type something
where the verbose expression of constructor and methods calls
could be expressed once and reused.
Implementing the above as two separate SAX engines, a compiler
and an intperter, and attempting to develop ridgid XML Schemas
for both.
Thoughts?
--
Alan Gutierrez - alan@engrm.com
|