- From: Rajneesh Shukla <rajneeshshukla@gmail.com>
- Date: Mon, 24 Feb 2020 21:06:25 +0530
- To: Loren Cahlander <loren.cahlander@gmail.com>
- Cc: Mukul Gandhi <gandhi.mukul@gmail.com>, "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
- Message-ID: <CAFAat39_LzS2S6AeWvMk_hos8EpY4tse4WZyYE64D+LskPBNDA@mail.gmail.com>
Thanks Loren, One more expert advice please: Is it possible to impose required constraint at value level? for example in below xml, I wnt to make sure value for alias1, coli1 and operator is always populated in condition element within where element. functionalView name="CLAIMS_FV" description="Learning Purpose"> <columns> <column name="CLAI.CODE" columnAlias="CODE" description="The code of the claim" /> <column name="CLLI.CODE" columnAlias="LINE_CODE" description="The code of the claim line" /> <column name="PROC.CODE" columnAlias="PROC_CODE" description="The code of the claim line procedure" /> </columns> <fromviews> <fromview name="CLAIMS_V" alias="CLAI" /> <fromview name="LINES_V" alias="CLLI" /> <fromview name="PROC_V" alias="PROC" /> <fromview name="PROV_V" alias="PROV" /> <fromview name="FORMS_V" alias="CLFO"/> <fromview name="FORMTYPES_V" alias="CFTY"/> </fromviews> <joins> <join alias1="CLLI" col1="CLAI_ID" condition="=" alias2="CLAI" col2="ID"/> <join alias1="CLFO" col1="ID" condition="=" alias2="CFTY" col2="CLFO_ID"/> <join alias1="CFTY" col1="ID" condition="=" alias2="PROC" col2="CFTY_ID"/> <leftouterjoin alias1="PROV" col1="ID" condition="=" alias2="CLAI" col2="PROVIDER_ID"/> </joins> <where> <condition alias1="CFTY" col1="CODE" operator="=" string="" number="" date= "" /> </where> </functionalView> Below is respective XSD for reference: <?xml version="1.0" encoding="UTF-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="functionalView" > <xs:complexType> <xs:sequence> <xs:element name="columns"> <xs:complexType> <xs:sequence> <xs:element name="column" maxOccurs="unbounded" minOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:string" name="name" use="required"/> <xs:attribute type="xs:string" name="columnAlias" use="required"/> <xs:attribute type="xs:string" name="description" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="fromviews" maxOccurs="1" minOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="fromview" maxOccurs="unbounded" minOccurs="2"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:string" name="name" use="required"/> <xs:attribute type="xs:string" name="alias" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="joins" maxOccurs="1" minOccurs="1"> <xs:complexType> <xs:choice maxOccurs="unbounded" minOccurs="1"> <xs:element name="join" maxOccurs="unbounded" minOccurs="0"> <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="condition" use="required"/> <xs:attribute type="xs:string" name="alias2" use="required"/> <xs:attribute type="xs:string" name="col2" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="leftouterjoin" maxOccurs="unbounded" minOccurs="0"> <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="condition" use="required"/> <xs:attribute type="xs:string" name="alias2" use="required"/> <xs:attribute type="xs:string" name="col2" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> <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> </xs:sequence> <xs:attribute type="xs:string" name="name"/> <xs:attribute type="xs:string" name="description"/> </xs:complexType> </xs:element> </xs:schema> Thanks, Rajneesh On Mon, 24 Feb 2020 at 20:57, Loren Cahlander <loren.cahlander@gmail.com> wrote: > If you cannot use XSD 1.1, then I would recommend that you utilize > Schematron. > > https://www.xml.com/pub/a/2003/11/12/schematron.html > > On Feb 24, 2020, at 10:00 AM, Rajneesh Shukla <rajneeshshukla@gmail.com> > wrote: > > Hi Mukul, > > One more help please: > > Is it possible to impose required constraint at value level? > for example in below xml, I wnt to make sure value for alias1, coli1 and > operator is always populated in condition element within where element. > > functionalView name="CLAIMS_FV" description="Learning Purpose"> > > <columns> > > <column name="CLAI.CODE" columnAlias="CODE" description="The code > of the claim" /> > > <column name="CLLI.CODE" columnAlias="LINE_CODE" description="The > code of the claim line" /> > > <column name="PROC.CODE" columnAlias="PROC_CODE" description="The > code of the claim line procedure" /> > > </columns> > > <fromviews> > > <fromview name="CLAIMS_V" alias="CLAI" /> > > <fromview name="LINES_V" alias="CLLI" /> > > <fromview name="PROC_V" alias="PROC" /> > > <fromview name="PROV_V" alias="PROV" /> > > <fromview name="FORMS_V" alias="CLFO"/> > > <fromview name="FORMTYPES_V" alias="CFTY"/> > > </fromviews> > > <joins> > > <join alias1="CLLI" col1="CLAI_ID" condition="=" alias2="CLAI" > col2="ID"/> > > <join alias1="CLFO" col1="ID" condition="=" alias2="CFTY" > col2="CLFO_ID"/> > > <join alias1="CFTY" col1="ID" condition="=" alias2="PROC" > col2="CFTY_ID"/> > > <leftouterjoin alias1="PROV" col1="ID" condition="=" alias2="CLAI" > col2="PROVIDER_ID"/> > > </joins> > > <where> > > <condition alias1="CFTY" col1="CODE" operator="=" string="" > number="" date= "" /> > > </where> > > </functionalView> > > Thanks, > Rajneesh > > On Mon, 24 Feb 2020 at 13:39, Rajneesh Shukla <rajneeshshukla@gmail.com> > wrote: > >> 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 15:36:49 UTC