[EXI] Circular production with no terminal symbol

Hello,

In some instances during elimination of productions with no terminal symbol (8.5.4.2.1) infinite loops can appear in forms:
 G_(i,j): 
  G_(i,j)

Or
 G_(i,j): 
  G_(i,k)
 G_(i,k): 
  G_(i,l)
 G_(i,l): 
  G_(i,k)

Eliminating them using only algorithm is not trivial and produce variations therefore may produce different grammars for same XSD schema on different implementations.

Source of those productions is particle {max occurs} = unbound.

Also, in paragraph when additional copy of Term_0 generated for unbound particle restrictions “k > 0” is missing. When 
 G_({min occurs}, 0):
  EE

 is replaced by:
 G_({min occurs}, 0):
  G_({min occurs}, 0)

Which is circular production with no terminal symbol and I cannot find well-documented way to eliminate it.

Could you illustrate how to convert following schema to EXI normalized grammars?

  <xsd:element name="el1">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="el1_1" minOccurs="1" maxOccurs="unbounded">
          <xsd:complexType />
        </xsd:element> 
      </xsd:sequence>
      <xsd:attribute name="at1" type="xsd:string" >
    </xsd:complexType>
  </xsd:element>

Thank you.

Received on Monday, 22 September 2008 00:16:04 UTC