我正在尝试为后续架构创建一个XSD,我不确定如何自引用相同的类型元素。我尝试使用ref属性,但是当我创建xml文件时,visual studio继续引发错误。在pre-req元素中创建XML时,我希望我提供一个带有description / department / credits的完整课程元素
有人可以帮助在最后为xml生成xsd
<xs:element name="Course">
<xs:complexType>
<xs:sequence>
<xs:element name="Description" />
<xs:element name="Department" />
<xs:element name="Credits" type="xs:decimal" />
<xs:element name="Prerequisite" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="Course" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="CourseCode" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Courses">
<xs:complexType>
<xs:sequence>
<xs:element ref="Course" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这是XML
<Courses>
<Course CourseCode="ABC123">
<Description>This is Math Level 2</Description>
<Department>Maths</Department>
<Credits>7.5</Credits>
<Prerequisite>
<Course CourseCode="MTH001"></Course>
</Prerequisite>
</Course>
<Course CourseCode="MTH001">
<Description>This is Math Level 1</Description>
<Department>Maths</Department>
<Credits>5.0</Credits>
</Course>
</Courses>
答案 0 :(得分:2)
符合预期的完整课程元素是合乎逻辑的:当您说<xs:element ref="Course"
时,您在XSD中定义的内容 - 您递归地引用了您的完整课程元素。
您可以为具有不同类型的元素<Course
创建本地元素定义,然后它可以具有不同的验证规则。
这是第一步。
第二步是xml架构内置支持您可以引用的标识符。在定义标识符的属性中,应使用类型xs:ID而不是xs:string。在引用标识符的属性中,您应该使用类型xs:IDREF而不是xs:string。
结合这两者,你得到:
<xs:element name="Course">
<xs:complexType>
<xs:sequence>
<xs:element name="Description" />
<xs:element name="Department" />
<xs:element name="Credits" type="xs:decimal" />
<xs:element name="Prerequisite" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Course" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="CourseCode" type="xs:IDREF" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="CourseCode" type="xs:ID" use="required" />
</xs:complexType>
</xs:element>
这应该验证您的输入XML,并且作为奖励,当您在<Prerequisite>
中使用的课程ID在您的XML中不存在时,它现在会引发验证错误。