[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

RE: [xml] xmllint complains about non-determinist content model



Robin - 

Unless others on the list have other ideas but no...  The validation
must know "where" to validate the contained parts.  The alternatives
have been to use Schematron/XSLT but I'm not an expert in either...
Your special-case code might have to do if you cannot add a "group"
element

Good luck,
-mj

> -----Original Message-----
> From: Robin Munn [mailto:rmunn pobox com] 
> Sent: Tuesday, December 23, 2003 4:09 PM
> To: Marcel Jemio
> Cc: xml gnome org
> Subject: Re: [xml] xmllint complains about non-determinist 
> content model
> 
> On Tue, Dec 23, 2003 at 03:28:47PM -0500, Marcel Jemio wrote:
> > Robin -
> > 
> > This is the "famed" non-deterministic or ambiguous content model 
> > scenario...  How is the parser supposed to know which 
> content grouping 
> > to validate element "name"  to?  It can't in your scenario. 
>  Even if 
> > you were to use the schmea "group" to abstract your "name/email" 
> > grouping, that would still qualify as non-deterministic.
> > 
> > Is this an inclusive-or example?  If so the best way I have 
> found to 
> > do this, is to represent the:
> > > 		    <xsd:sequence>
> > > 			<xsd:element ref="name"/>
> > > 			<xsd:element ref="email"/>
> > > 		    </xsd:sequence>
> > 
> > Under another element so your final would like similar to this:
> > > 	<xsd:element name="person">
> > > 	    <xsd:complexType>
> > > 		<xsd:choice>
> > > 		    <xsd:element ref="name"/>
> > > 		    <xsd:element ref="email"/>
> > > 		    <xsd:element name="group">    
> > 		       <xsd:sequence>
> > > 			   <xsd:element ref="name"/>
> > > 			   <xsd:element ref="email"/>
> > > 		       </xsd:sequence>
> > 		    </xsd:element>
> > > 		</xsd:choice>
> > > 	    </xsd:complexType>
> > > 	</xsd:element>
> > 
> > Yes this adds another layer to your scenario but there is no error.
> 
> Thanks for the suggestion. Yes, this is inclusive-or: a 
> <person> element can have a <name> element or an <email> 
> element, or both; the only thing forbidden is a <person> 
> element with neither a <name> or an <email>.
> 
> (In the actual project I'mn working on, the offending tag 
> occurs about five or six levels deep in our XML structure; I 
> abstracted it down to the simplest possible example of the 
> problem for my question).
> 
> Unfortunately, at this stage in the project we have far too 
> much code already written to make it feasible to change the 
> XML spec by adding a <group> tag to group the "name+email" 
> combination. What I think I will end up doing is something like this:
> 
>     <xsd:element name="person">
> 	<xsd:complexType>
> 	    <xsd:sequence>
> 		<xsd:element ref="name" minOccurs="0">
> 		<xsd:element ref="email" minOccurs="0">
> 	    </xsd:sequence>
> 	</xsd:complexType>
>     </xsd:element>
> 
> and write special-case code to check for the invalid case of 
> a <person> element with no <name> or <email> (which would be 
> considered valid by that schema fragment). I hate to be 
> writing special-case code when I thought the <xsd:choice> 
> element was going to be the exact thing I needed, though.
> 
> This still doesn't seem right. Is there really no way to 
> express in XML Schema the concept "A alone, or B alone, or A 
> and B, but not neither"?
> 
> --
> Robin Munn
> rmunn pobox com
> 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]