【发布时间】:2015-08-15 17:53:21
【问题描述】:
我的问题是关于 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>
以及我需要基于这 2 个 XSD 模式获取的 XML 文档(抱歉,它现在是空的,但当然必须有信息,并且小组中不止一个学生):
<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 模式包含到第二个中(就像结果 XML 一样),然后将统一的模式包含到 XML 文档中?以及如何做到这一点?
我最大的问题是关于所有三个文档的上半部分,应该在哪里放置命名空间的声明等等。
至于我尝试使用的程序是 Oxygen(我有 30 天的 lisense)。
我真的希望有人能帮助我解决这个问题。我也希望我的问题很清楚。
非常感谢您的帮助!
【问题讨论】:
-
XML 对于第二个 XSD 无效,因为
<student>不允许有<studentAI>元素(或者我错了)?使用多个 XSD 时,这些 XSD 可能有自己的命名空间,您可以将命名空间绑定到 XSD。所以你有 XSD 1 的 namespaceA 和 XSD 2 的 namespaceB。 -
我会创建一个人实体,赋予它第一个 XSD 中的特征,并让其他特征扩展它 - 学生是人,父母也是人。
-
@Wouter J,感谢您的关注和评论。是的,
student不允许在里面有studentAI,但我需要以某种方式组合我的 XSD 并在它们的基础上创建我的 XML。至于命名空间,我认为两个 XSD 可以具有相同的命名空间。所以我需要将它们包含到我的 XML 中 - 我不知道该怎么做...... -
@A. Abramov,感谢您的关注和评论。你的想法很好——如果我理解正确的话——但在将 XSD/XSD 包含到 XML 文档中时我仍然有疑问......