由于您似乎正在学习 XSD,因此构建更完整的 XML 示例可能更容易,然后使用一些工具从所有这些示例 XML 生成 XSD。从生成的 XSD 中,您可以学到很多东西,并且它应该使您更容易逐步更改它以更好地适应您的目标。
错误是您不能将命名类型嵌套在除 anxs:schema
或 an之外的任何内容下xs:redefine
。
因此,如果您如下所示,您的剪断将是正确的:
<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="machine">
<xs:complexType>
<xs:all>
<!-- Definition for the <timing> child element. -->
<xs:element name="timing" type="timing_type"/>
<!-- Definitions for the other <machine> child elements... -->
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name="timing_type">
<xs:attribute name="offset" type="xs:string"/>
<xs:attribute name="period" type="xs:string"/>
</xs:complexType>
</xs:schema>
您可能遇到的问题与使用 ofxs:all
代替xs:sequence
or相关xs:choice
。在 XSD 1.0 中,这是非常挑剔的,因为元素xs:all
的出现次数不能超过一次。timing
下面的 XSD 是由工具生成的。它使用一个序列合成器(而不是all),这将允许我添加的变化(maxOccurs="unbounded")
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="machine">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="timing" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="offset" type="xsd:string" use="required" />
<xsd:attribute name="period" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
如果您将另一种类型的元素添加到混合中(如您所建议的那样),并且您希望允许任意数量的此类元素,以任何顺序单独出现不止一次,那么下面的模型将起作用。这里要注意的是xsd:choice maxOccurs="unbounded"
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="machine">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="timing">
<xsd:complexType>
<xsd:attribute name="offset" type="xsd:string" use="required" />
<xsd:attribute name="period" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="cycle">
<xsd:complexType>
<xsd:attribute name="duration" type="xsd:positiveInteger" use="required" />
<xsd:attribute name="period" type="xsd:positiveInteger" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>