- From: Mukul Gandhi <gandhi.mukul@gmail.com>
- Date: Sat, 22 Feb 2020 11:27:39 +0530
- To: Rajneesh Shukla <rajneeshshukla@gmail.com>
- Cc: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
- Message-ID: <CABuuzNNCP7koKzfot3gwu61cviPEk=xFL4z9gcd4g2v8FxUvJg@mail.gmail.com>
Hi Rajneesh, Within the XSD document you've attached, following is a XSD issue to start with (using Xerces-J 2.12.1 as XSD validator), [Error] query1.xsd:3:67: s4s-att-not-allowed: Attribute 'maxOccurs' cannot appear in element 'element'. [Error] query1.xsd:3:67: s4s-att-not-allowed: Attribute 'minOccurs' cannot appear in element 'element'. i.e, the following is not allowed by XSD language, <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="functionalView" maxOccurs="1" minOccurs="1"> ... </xs:schema> Removing, maxOccurs="1" minOccurs="1" from above shown xs:element declaration from your attached XSD document, makes your XSD document correct (with both 1.0 and 1.1 versions of XSD language). Now coming to your question. I think that, the issue you've mentioned can be solved using an XSD 1.1 <assert> instruction. I guess that, you can rewrite your XSD fragment to following (I've only added an <assert>), to achieve what you've mentioned, <xs:element name="where" maxOccurs="1" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="condition" maxOccurs="unbounded" minOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:string" name="alias1" use="required"/> <xs:attribute type="xs:string" name="col1" use="required"/> <xs:attribute type="xs:string" name="operator" use="required"/> <xs:attribute type="xs:string" name="string" use="optional"/> <xs:attribute type="xs:string" name="number" use="optional"/> <xs:attribute type="xs:string" name="date" use="optional"/> <xs:assert test="exists(@string | @number | @date)"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> I've not tested, the logic of <assert> I've mentioned above. Could be useful information to share that, you may use the full XPath 2.0 language, to write value of 'test' attribute of an <assert>. Also, 1 upto any number of <assert> elements can be written as siblings in the XSD document (all of the sibling <assert> elements, have to evaluate to true for having the XML instance document valid). On Fri, Feb 21, 2020 at 11:16 PM Rajneesh Shukla <rajneeshshukla@gmail.com> wrote: > Hello All, > > I am new to XSD and XML and need to explore if there is option to make > sure that any one attribute in a set of attributes within same element is > required. > > Example: > > <xs:element name="where" maxOccurs="1" minOccurs="0"> > <xs:complexType> > <xs:sequence> > <xs:element name="condition" maxOccurs="unbounded" > minOccurs="1"> > <xs:complexType> > <xs:simpleContent> > <xs:extension base="xs:string"> > <xs:attribute type="xs:string" name="alias1" > use="required"/> > <xs:attribute type="xs:string" name="col1" > use="required"/> > <xs:attribute type="xs:string" name="operator" > use="required"/> > <xs:attribute type="xs:string" name="string" > use="optional"/> > <xs:attribute type="xs:string" name="number" > use="optional"/> > <xs:attribute type="xs:string" name="date" > use="optional"/> > </xs:extension> > </xs:simpleContent> > </xs:complexType> > </xs:element> > </xs:sequence> > </xs:complexType> > </xs:element> > > Here I want to ensure that minimum one attribute in a set of 3 > attributes (mentioned as optional in above) are required. All can not be > optional , however any one (can be more than one also) is required. > > Thanking you in anticipation !!! > > Attachment: > Complete XSD file. > -- Regards, Mukul Gandhi
Received on Saturday, 22 February 2020 05:58:10 UTC