If you like working with RELAX NG but you need XML Schema too, Trang is the answer. Trang converts RELAX NG schemas (in both XML and compact syntax) to XML Schema. If you are like me, you prefer to work with RELAX NG when developing schemas for XML, but out of necessity you may need to provide schemas in XML Schema format. Trang can help you out because it allows you to translate RELAX NG schemas in XML or compact syntax into XML Schema. This hack shows you how. Here is the command to convert the RELAX NG schema time.rng (in XML syntax) to newtime.xsd: java -jar trang.jar time.rng newtime.xsd Example 5-14 shows the XML Schema that is the result of the translation (newtime.xsd): Example 5-14. newtime.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="time"> <xs:complexType> <xs:sequence> <xs:element ref="hour"/> <xs:element ref="minute"/> <xs:element ref="second"/> <xs:element ref="meridiem"/> <xs:element ref="atomic"/> </xs:sequence> <xs:attribute name="timezone" use="required"/> </xs:complexType> </xs:element> <xs:element name="hour" type="xs:string"/> <xs:element name="minute" type="xs:string"/> <xs:element name="second" type="xs:string"/> <xs:element name="meridiem" type="xs:string"/> <xs:element name="atomic"> <xs:complexType> <xs:attribute name="signal" use="required"/> </xs:complexType> </xs:element> </xs:schema> The schema element is the document element and http://www.w3.org/2001/ XMLSchema is the namespace URI (line 2). The attribute elementFormDefault with a value of qualified means that an instance is expected to have a default namespace declaration on its document element and that all of its child elements will be in that default namespace or in no namespace, if one is not declared in the instance. The element time declared on line 4 is followed by a sequence of other child elements and the declaration of an attribute timezone (line 13). This sequence is held in a complexType element wrapper that wraps complex content (i.e., content that can have attributes, etc.). These definitions refer to the elements that appear later in the schema (lines 16-20). The atomic element adds an attribute signal, and so is embedded in a complexType element. Trang does not give the attributes timezone and signal types. Trang can also take as input a compact syntax schema, such as time.rnc. Here is how to translate a compact syntax schema to XML Schema: java -jar trang.jar time.rnc timec.xsd And here is the outcome of the translation, which is the same as the outcome that came from the XML syntax version: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="time"> <xs:complexType> <xs:sequence> <xs:element ref="hour"/> <xs:element ref="minute"/> <xs:element ref="second"/> <xs:element ref="meridiem"/> <xs:element ref="atomic"/> </xs:sequence> <xs:attribute name="timezone" use="required"/> </xs:complexType> </xs:element> <xs:element name="hour" type="xs:string"/> <xs:element name="minute" type="xs:string"/> <xs:element name="second" type="xs:string"/> <xs:element name="meridiem" type="xs:string"/> <xs:element name="atomic"> <xs:complexType> <xs:attribute name="signal" use="required"/> </xs:complexType> </xs:element> </xs:schema> |