![]() |
Schema - Definition for checking part of schema ?
Hi,
I have an xml which contains the following <a> <!-- aa Is what I am interested in --> <aa> </aa> <bb></bb> <cc></cc> </a> Here, my application requires that <a> (The root element) *must* contain <aa> tag. However, tags such as <bb>, <cc>, or anything else might exist - they are optional, and I do not know which of them (if at all) will be present. How do I write the schema for it ? Using all requires that I know which tags might appear .. Using any doesnt allow me to check the presence of the specific tag <aa> Any pointers on how to achieve this ? TIA -- Abhinav |
Re: Schema - Definition for checking part of schema ?
Abhinav wrote: > I have an xml which contains the following > > <a> > <!-- aa Is what I am interested in --> > <aa> > </aa> > > <bb></bb> > <cc></cc> > > </a> > > Here, my application requires that <a> (The root element) *must* contain > <aa> tag. > > However, tags such as <bb>, <cc>, or anything else might exist - they > are optional, and I do not know which of them (if at all) will be present. > > How do I write the schema for it ? > > Using all requires that I know which tags might appear .. > > Using any doesnt allow me to check the presence of the specific tag <aa> > > Any pointers on how to achieve this ? It is simple, use a sequence with one defined element and xs:any: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"> <xs:element name="a"> <xs:complexType> <xs:sequence> <xs:element name="aa" type="xs:string" /> <xs:any processContents="lax" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> -- Martin Honnen http://JavaScript.FAQTs.com/ |
Re: Schema - Definition for checking part of schema ?
Martin Honnen wrote:
> > Abhinav wrote: > > > >>I have an xml which contains the following >> >><a> >> <!-- aa Is what I am interested in --> >> <aa> >> </aa> >> >> <bb></bb> >> <cc></cc> >> >></a> >> >>Here, my application requires that <a> (The root element) *must* contain >><aa> tag. >> >>However, tags such as <bb>, <cc>, or anything else might exist - they >>are optional, and I do not know which of them (if at all) will be present. >> >>How do I write the schema for it ? >> >>Using all requires that I know which tags might appear .. >> >>Using any doesnt allow me to check the presence of the specific tag <aa> >> >>Any pointers on how to achieve this ? > > > It is simple, use a sequence with one defined element and xs:any: > > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema > xmlns:xs="http://www.w3.org/2001/XMLSchema" > version="1.0"> > > <xs:element name="a"> > <xs:complexType> > <xs:sequence> > <xs:element name="aa" type="xs:string" /> > <xs:any processContents="lax" maxOccurs="unbounded" /> > </xs:sequence> > </xs:complexType> > </xs:element> > > </xs:schema> > Thanks .. That worked .. However, If I want to ignore elements both *before* and *after* <aa> ? adding another <xs:any> before <xs:element name="aa"> does not work. XML::Xerces gives the error : MESSAGE: Not enough elements to match content model : '((,aa),)' Any pointers appreciated! TIA -- Abhinav |
Re: Schema - Definition for checking part of schema ?
Abhinav wrote: > However, If I want to ignore elements both *before* and *after* <aa> ? > adding another <xs:any> before <xs:element name="aa"> does not work. > XML::Xerces gives the error : Is the number of elements before <aa> known? Otherwise I think you get a problem with the schema being non-deterministic. -- Martin Honnen http://JavaScript.FAQTs.com/ |
Re: Schema - Definition for checking part of schema ?
Martin Honnen wrote:
> > Abhinav wrote: > > >>However, If I want to ignore elements both *before* and *after* <aa> ? >>adding another <xs:any> before <xs:element name="aa"> does not work. >>XML::Xerces gives the error : > > > Is the number of elements before <aa> known? Otherwise I think you get a > problem with the schema being non-deterministic. > Hmm .. It is not known .. but it is definitely more than 1. Putting maxOccurs="10" (An arbotrary value I can live with) did not solve the problem .. Do you mean to say that it is not possible to do it at all ? (I read the Schema specs on w3c.org, but could not find to many pointers. TIA -- Abhinav |
Re: Schema - Definition for checking part of schema ?
Abhinav wrote: >> Is the number of elements before <aa> known? Otherwise I think you get >> a problem with the schema being non-deterministic. >> > It is not known .. but it is definitely more than 1. > > Putting maxOccurs="10" (An arbotrary value I can live with) did not > solve the problem .. > > Do you mean to say that it is not possible to do it at all ? From my current understanding and tests with Xerces-J and MSXML you need to specify a fixed number of occurances otherwise the parser is unable to determine where the element you want to check for is. But maybe someone else comes up with a workaround. -- Martin Honnen http://JavaScript.FAQTs.com/ |
Re: Schema - Definition for checking part of schema ?
Martin Honnen wrote:
> > Abhinav wrote: > > > >>>Is the number of elements before <aa> known? Otherwise I think you get >>>a problem with the schema being non-deterministic. >>> > > >>It is not known .. but it is definitely more than 1. >> >>Putting maxOccurs="10" (An arbotrary value I can live with) did not >>solve the problem .. >> >>Do you mean to say that it is not possible to do it at all ? > > > From my current understanding and tests with Xerces-J and MSXML you > need to specify a fixed number of occurances Even the fixed number of occurences does not work in Xerces-P ! The only thing that works in minOccurs=maxOccurs=1. otherwise the parser is > unable to determine where the element you want to check for is. But > maybe someone else comes up with a workaround. Regards -- Abhinav |
| All times are GMT. The time now is 03:57 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.