Re: XSD with "required" attribute option related query

Hi Mukul,

Thanks for your reply.

I am  working inside the database, it won't be possible.

Oracle XML DB only supports XML Schema 1.0.


Thanks,

Rajneesh

On Sat, 22 Feb 2020 at 11:27, Mukul Gandhi <gandhi.mukul@gmail.com> wrote:

> 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 Monday, 24 February 2020 08:10:01 UTC