I want to convert the following schema from RNC/RNG to W3C XSD.
default namespace = ""
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace rng = "http://relaxng.org/ns/structure/1.0"
start = starting_risk
starting_risk =
element risk {
element continents { Continents }?
}
Continents = element continent { Continent }+
Continent =
element country { Country }*,
element sea { Sea }*
Country = xsd:string { minLength = "1" maxLength = "100" }
Sea = xsd:string { minLength = "1" maxLength = "100" }
Using trang, I end up with
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="risk">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="continents"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="continents" type="Continents"/>
<xs:complexType name="Continents">
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="continent"/>
</xs:sequence>
</xs:complexType>
<xs:element name="continent" type="Continent"/>
<xs:complexType name="Continent">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="country"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="sea"/>
</xs:sequence>
</xs:complexType>
<xs:element name="country" type="Country"/>
<xs:element name="sea" type="Sea"/>
<xs:simpleType name="Country">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Sea">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
The problem is that the hierarchy is lost. The 'risk' element is the root of the schema and the only valid element at that level. In the RNC, the relationship between 'risk' and 'continent' elements is parent to child. But in the XSD, they are siblings. What am I doing wrong/ have I not understood?