我的问题是关于2个XSD架构,它们必须是XML文档的基础。对我来说,首先创建我需要的XML然后创建那些XSD架构会更容易。所以,我在这里有三个文件。
第一次XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com">
<xs:element name="studentAI">
<xs:complexType>
<xs:sequence>
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="female"/>
<xs:enumeration value="male"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="other" type="desc"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="desc">
<xs:sequence>
<xs:element name="height" type="xs:string"/>
<xs:element name="weight" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
第二届XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com">
<xs:element name="group">
<xs:complexType>
<xs:sequence>
<xs:element name="student" minOccurs="2" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="student">
<xs:sequence>
<xs:element name="surname" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="birthday">
<xs:simpleType>
<xs:restriction base="xs:date"/>
</xs:simpleType>
</xs:element>
<xs:element name="parents" type="parentsDetails"/>
<xs:element name="allCourses" type="allCoursesDetails"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="parentsDetails">
<xs:sequence>
<xs:element name="father" type="xs:string"/>
<xs:element name="mother" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="allCoursesDetails">
<xs:sequence>
<xs:element name="course" type="courseDetails" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="courseDetails">
<xs:attribute name="nr" use="required"/>
</xs:complexType>
</xs:schema>
我需要在这两个XSD架构的基础上获取XML文档(抱歉,它现在已经空了,但当然必须有信息,并且组中将有多个学生):< / p>
<group xmlns:xs="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com ">
<student id="1">
<surname></surname>
<name></name>
<birthday></birthday>
<parents>
<father></father>
<mother></mother>
</parents>
<allCourses>
<course nr="01"></course>
<course nr="02"></course>
</allCourses>
<studentAI>
<gender></gender>
<age></age>
<other>
<height></height>
<weight></weight>
</other>
</studentAI>
</student>
</group>
我真的不知道如何在我的XML文档中包含这2个XSD架构。我是否应该将它们都包含在XML文档中,或者我应该首先将第一个XSD架构包含在第二个XSD架构中(因为它是结果XML),然后将统一的架构包含在XML文档中?怎么做?
我最大的问题是所有三个文件的上半部分,其中一个应该放置名称空间的声明等等。
至于我尝试使用它的程序是Oxygen(我有30天lisense)。
我真的希望有人会帮助我。我也希望我的问题很明确。
许多人提前感谢您的帮助!
答案 0 :(得分:2)
您可以在两个架构中合并两个架构的内容,使架构包含另一架构。无论如何,你应该纠正这个问题:
如果您使用name
或ref
来引用命名空间中的元素,则需要限定该引用(或者只是将您的targetNamespace用作xsds中的默认命名空间,这样更容易) 。因此,将您的targetNamespace绑定到前缀。
xmlns:w3="http://www.w3schools.com"
然后更正您的参考资料,例如:
<xs:element name="allCourses" type="w3:allCoursesDetails"/>
或者只是在xsds中将targetNamespace设置为默认命名空间:
xmlns="http://www.w3schools.com"
这种方式,非限定引用指向默认命名空间,即设置为目标命名空间。
如果您希望XML对属于targetNampesce的所有元素都有效,那么您应该在您/您的elementFormDefault="qualified"
中使用xs:schema
。否则,您的某些XML元素应属于目标命名空间,其中一些不应属于任何命名空间。
将第一个架构的内容添加到包含 student 元素的架构中,或者添加一个包含学生的包含子句架构包括 studentAI :
<xs:include schemaLocation="studentAI.xsd"/>
之后,您只需要根据包含 student 元素的模式验证XML,因此您需要在XML中添加xsi:schemaLocation :< / p>
xsi:schemaLocation="http://www.w3schools.com xsd1.xsd"
请记住,您可以使用ref
引用元素。您需要在序列中的 allCourses 元素之后添加 studentAI :
<xs:element name="allCourses" type="allCoursesDetails"/>
<xs:element ref="studentAI"/>
另外请记住,您可以简化生日元素,如果您没有添加任何限制,则不需要限制元素。
希望这会对你有所帮助。
编辑:添加了更多内容(第5项和第6项)。