[
Lists Home |
Date Index |
Thread Index
]
Not quite, as the approach you propose below still uses data as metadata
(i.e. "APL" should be a data value, according to the original
requirement).
The original requirement was: if the data associated with the node
<Fruit><Name> is "Apple", then the value of the sibling node
<Fruit><Abbrev> must be "APL". This means that the following XML
document fragment is considered valid:
<Fruit>
<Name>Apple</Name>
<Abbrev>APL</Abbrev>
</Fruit>
(NOTE: Now I'm getting hungry)
while the following is considered invalid:
<Fruit>
<Name>Apple</Name>
<Abbrev>ORG</Abbrev>
</Fruit>
Kind Regards,
Joe Chiusano
Booz | Allen | Hamilton
Strategy and Technology Consultants to the World
Robert Koberg wrote:
>
> Couldn't you do:
>
> <xs:complexType name="Fruit">
> <xs:choice>
> <xs:group ref="apple"/>
> <xs:group ref="orange"/>
> </xs:choice>
> </xs:complexType>
>
> <xs:group name="apple">
> <xs:element name="Apple" type="xs:string"/>
> <xs:element name="APL" type="xs:token"/>
> </xs:group>
>
> <xs:group name="orange">
> <xs:element name="Orange" type="xs:string"/>
> <xs:element name="ORG" type="xs:token"/>
> </xs:group>
>
> Maybe I missed something?
>
> best,
> -Rob
>
> Chiusano Joseph wrote:
>
> > I was also just reminded that this can also be done with RNG (I knew
> > there was another one!).
> >
> > Kind Regards,
> > Joe Chiusano
> > Booz | Allen | Hamilton
> > Strategy and Technology Consultants to the World
> >
> > Joseph Chiusano wrote:
> >
> >>Using elements as data rather than metadata - very offensive indeed. ;)
> >>
> >>There is no solution for this with W3C Schema, but it can be done with
> >>Schematron.
> >>
> >>Kind Regards,
> >>Joe Chiusano
> >>Booz | Allen | Hamilton
> >>Strategy and Technology Consultants to the World
> >>
> >>Linda Grimaldi wrote:
> >>
> >>>I have been out of the XML world for a little while now, but someone just asked me a question and I have to admit, it's going to keep me up tonight if I can't come up with a better solution. And I'm a little rusty, to boot...
> >>>
> >>>The issue is one of data dependency and validation. The goal is to enforce a restriction on pairs of data values- if the data associated with the node <Fruit><Name> is "Apple", then the value of the sibling node <Fruit><Abbrev> must be "APL". Effectively, the goal is to enforce a specific mapping from one enum into another within an XML document. The only way my associate could figure to capture this dependency is as follows:
> >>>
> >>><xs:complexType name="Fruit">
> >>> <xs:annotation>
> >>> <xs:documentation>Defines the valid values for fruit types</xs:documentation>
> >>> </xs:annotation>
> >>> <xs:choice>
> >>> <xs:element name="APL" type="xs:token" fixed="Apple"/>
> >>> <xs:element name="ORG" type="xs:token" fixed="Orange"/>
> >>> <xs:element name="BAN" type="xs:token" fixed="Banana"/>
> >>> <xs:element name="LEM" type="xs:token" fixed="Lemon"/>
> >>> <xs:element name="GRP" type="xs:token" fixed="Grape"/>
> >>> </xs:choice>
> >>></xs:complexType>
> >>>
> >>>All in all, this strikes me as a very ugly, even offensive, solution. My initial response was to forget about the validation- it wasn't worth it. Is there a way to preserve the data dependency validation without warping the instance document as the above schema fragment would require?
> >>>
> >>>Thanks,
> >>>Linda
> >>>
>
> >
--
Kind Regards,
Joseph Chiusano
Associate
Booz | Allen | Hamilton
|