- From: Sun Jing <iscp9142@nus.edu.sg>
- Date: Tue, 19 Jun 2001 09:58:08 -0400 (EDT)
- To: <xmlschema-dev@w3.org>
- Message-ID: <000c01c0f8c7$bbd431c0$d5608489@comp.nus.edu.sg>
Hi, Does XML Schema supports recursive definitions? Where could I find some examples on this? I am trying to define a xsd for arithmetic expressions such as "(1+2)*6+3". The EBNF grammar is as below. expr := term ("+" expr | "-" expr)* term := unary ("*" term | "/" term)* unary := "-" element | element element := <NUMBER> | "(" expr ")" The following is what I wrote for the above grammar in XML Schema. But it seems not working on validation checks for instant documents. Could anyone point out what was wrong with it. Thank you. <xsd:element name="expression" type="exprType"/> <xsd:complexType name="exprType"> <xsd:sequence> <xsd:group ref="expr"/> </xsd:sequence> </xsd:complexType> <xsd:group name="expr"> <xsd:sequence> <xsd:group ref="term"/> <xsd:group ref="expr2" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:group> <xsd:group name="expr2"> <xsd:sequence> <xsd:element name="op1" type="operator1"/> <xsd:group ref="expr"/> </xsd:sequence> </xsd:group> <xsd:group name="term"> <xsd:sequence> <xsd:group ref="unary"/> <xsd:group ref="term2" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:group> <xsd:group name="term2"> <xsd:sequence> <xsd:element name="op2" type="operator2"/> <xsd:group ref="term"/> </xsd:sequence> </xsd:group> <xsd:group name="unary"> <xsd:sequence> <xsd:element name="sign" type="xsd:string" fixed="-" minOccurs="0"/> <xsd:group ref="element"/> </xsd:sequence> </xsd:group> <xsd:group name="element"> <xsd:sequence> <xsd:choice> <xsd:element name="number" type="xsd:integer"/> <xsd:group ref="bracket"/> </xsd:choice> </xsd:sequence> </xsd:group> <xsd:group name="bracket"> <xsd:sequence> <xsd:element name="leftB" type="xsd:string" fixed="("/> <xsd:group ref="expr"/> <xsd:element name="rightB" type="xsd:string" fixed=")"/> </xsd:sequence> </xsd:group> <xsd:simpleType name="operator1"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="+"/> <xsd:enumeration value="-"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="operator2"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="*"/> <xsd:enumeration value="/"/> </xsd:restriction> </xsd:simpleType> Best regards. Jim
Received on Wednesday, 20 June 2001 09:05:21 UTC