我们说我的standard.xsd
文件片段下面有
<xs:complexType name="StdBasicTags">
<xs:sequence>
<xs:element name="Name" type="xs:string" nillable="true">
<xs:annotation>
<xs:documentation>Name</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
现在我有另一个XSD文件,该文件包含在上面的文件中,并在上面的complexType StdBasicTags
文件名为fullStandard.xsd
,我扩展StdBasicTags
的方式如下:
<xs:include schemaLocation="standard.xsd"/>
........
........
<xs:complexType name="FullStdBasicTags">
<xs:complexContent>
<xs:extension base="StdBasicTags">
<xs:sequence>
<xs:element name="Surname" type="xs:string">
<xs:annotation>
<xs:documentation>Last name</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
我有以下问题,
我使用许可的Altova XmlSpy工具为fullStandard.xsd文件生成Sample xml,但我只能按预期看到Name
元素而不是Surname
元素。任何人都可以告诉它可能的原因是什么,我错过了什么?
我必须提供FullStdBasicTags
的另一个名称来扩展StdBasicTags
并添加新元素。在这种情况下,完整的最终XML文件的输出是什么?我们的想法是将Name
和Surname
放在相同的父complexType StdBasicTags
下。
最后,我期待的架构/输出有什么问题吗?
注意**两个文件都经过正确验证。另外,我的想法是在不对
standard.xsd
文件进行任何更改的情况下实现我刚才提到的内容。
**更新 我很惊讶到现在为止没有人向我提出任何建议。与此同时,我尝试了这个,
<xs:element name="FullNewRoot">
<xs:complexType>
<xs:sequence>
<xs:element ref="rootElementName"/>
</xs:sequence>
</xs:complexType>
</xs:element>
其中rootElementName
是standard.xsd的根元素。现在添加此内容后,我可以看到其他元素。但现在麻烦的是,整个standard.xsd结构首先出现,然后我在fullStandard.xsd中重新定义的内容出现了,而我只想要它们一次。
请提出建议。
答案 0 :(得分:1)
请在下面找到您的问题的答案。
可能的原因是元素的类型。如果您使用StdBasicTags,则类型应为FullStdBasicTags。
父类型不能引用子类型中添加的新属性。这里适用相同的继承原则。
请查看以下示例。
StdSchema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/StdSchema"
xmlns:tns="http://www.example.org/StdSchema" elementFormDefault="qualified">
<complexType name="StdBasicTags">
<sequence>
<element name="Name" type="string" nillable="true">
<annotation>
<documentation>Name</documentation>
</annotation>
</element>
</sequence>
</complexType>
</schema>
FullSchema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/FullSchema"
xmlns:tns="http://www.example.org/FullSchema" elementFormDefault="qualified"
xmlns:tst="http://www.example.org/StdSchema">
<include schemaLocation="StdSchema.xsd" />
<import schemaLocation="StdSchema.xsd" namespace="http://www.example.org/StdSchema"></import>
<complexType name="FullStdBasicTags">
<complexContent>
<extension base="tst:StdBasicTags">
<sequence>
<element name="Surname" type="string">
<annotation>
<documentation>Last name</documentation>
</annotation>
</element>
</sequence>
</extension>
</complexContent>
</complexType>
<element name="TestTag" type="tns:FullStdBasicTags"/>
</schema>
示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<tns:TestTag xmlns:tns="http://www.example.org/FullSchema" xmlns:tns1="http://www.example.org/StdSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/FullSchema FullSchema.xsd ">
<tns1:Name>tns1:Name</tns1:Name>
<tns:Surname>tns:Surname</tns:Surname>
</tns:TestTag>