For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!
In my configuration why cause = null Why NullPointer in XunitTestmgr
I don't think it's possible using XSD 1.0, which is the version you're probably using given your recent posts.
If you can, I suggest redesigning this part.
For example :
<where> <condition alias1="T1" col1="COL_1" operator="=" value="10.5" valueType="number"/> <condition alias1="T1" col1="COL_2" operator="<" value="2020-02-22" valueType="date"/> ...</where>
<where>
<condition alias1="T1" col1="COL_1" operator="=" value="10.5" valueType="number"/>
<condition alias1="T1" col1="COL_2" operator="<" value="2020-02-22" valueType="date"/>
...
</where>
Schema fragment :
<xs:simpleType name="valueTypeEnum"> <xs:restriction base="xs:string"> <xs:enumeration value="number" /> <xs:enumeration value="date" /> <xs:enumeration value="string" /> </xs:restriction></xs:simpleType><xs:element name="where" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="condition" maxOccurs="unbounded"> <xs:complexType> <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="value" use="required"/> <xs:attribute type="valueTypeEnum" name="valueType" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType></xs:element>
<xs:simpleType name="valueTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="number" />
<xs:enumeration value="date" />
<xs:enumeration value="string" />
</xs:restriction>
</xs:simpleType>
<xs:element name="where" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="condition" maxOccurs="unbounded">
<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="value" use="required"/>
<xs:attribute type="valueTypeEnum" name="valueType" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
or, something a little more complicated using an extended abstract complexType, which allows type validation :
<where> <condition xsi:type="numberConditionType" alias1="T1" col1="COL_1" operator="=" value="10.5" /> <condition xsi:type="dateConditionType" alias1="T1" col1="COL_2" operator="<" value="2020-02-22" /> <condition xsi:type="stringConditionType" alias1="T1" col1="COL_3" operator="=" value="ABC" /></where>
<condition xsi:type="numberConditionType" alias1="T1" col1="COL_1" operator="=" value="10.5" />
<condition xsi:type="dateConditionType" alias1="T1" col1="COL_2" operator="<" value="2020-02-22" />
<condition xsi:type="stringConditionType" alias1="T1" col1="COL_3" operator="=" value="ABC" />
corresponding schema fragment :
<xs:complexType name="conditionType" abstract="true"> <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:complexType><xs:complexType name="numberConditionType"> <xs:complexContent> <xs:extension base="conditionType"> <xs:attribute name="value" type="xs:decimal" use="required"/> </xs:extension> </xs:complexContent></xs:complexType><xs:complexType name="dateConditionType"> <xs:complexContent> <xs:extension base="conditionType"> <xs:attribute name="value" type="xs:date" use="required"/> </xs:extension> </xs:complexContent></xs:complexType><xs:complexType name="stringConditionType"> <xs:complexContent> <xs:extension base="conditionType"> <xs:attribute name="value" type="xs:string" use="required"/> </xs:extension> </xs:complexContent></xs:complexType><xs:element name="where"> <xs:complexType> <xs:sequence> <xs:element name="condition" type="conditionType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType></xs:element>
<xs:complexType name="conditionType" abstract="true">
<xs:complexType name="numberConditionType">
<xs:complexContent>
<xs:extension base="conditionType">
<xs:attribute name="value" type="xs:decimal" use="required"/>
</xs:extension>
</xs:complexContent>
<xs:complexType name="dateConditionType">
<xs:attribute name="value" type="xs:date" use="required"/>
<xs:complexType name="stringConditionType">
<xs:attribute name="value" type="xs:string" use="required"/>
<xs:element name="where">
<xs:element name="condition" type="conditionType" maxOccurs="unbounded"/>
Thank you, I guess below is also option with XSD 1.1, then I need to get rid of XML 1.0 and use 1.1 version:
<xs:element name="where" maxOccurs="1" minOccurs="0">
<xs:element name="condition" maxOccurs="unbounded" minOccurs="1">
<xs:simpleContent>
<xs:extension base="xs:string">
<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:simpleContent>
Rajneesh Shukla-Oracle wrote:Thank you, I guess below is also option with XSD 1.1, then I need to get rid of XML 1.0 and use 1.1 version:
Rajneesh Shukla-Oracle wrote:
If you're working inside the database, it won't be possible.
Oracle XML DB only supports XML Schema 1.0.
You'll need a third-party validator, for example Xerces2, possibly published in the db using a java stored procedure.
Hi odie_63,
Yes you are correct.
Encounterd below error , when I tried to register xsd with assert as below:
ORA-30937: No schema definition for 'assert' (namespace 'http://www.w3.org/2001/XMLSchema') in parent '/schema/element[1]/complexType/sequence/element[4]/complexType/sequence/element[1]/complexType/simpleContent/extension'
ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 72
ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 33