我有2个xsd属于2个不同的命名空间。我可以从一个不同的namespance引用一个复杂类型作为xsd中的元素,并将子元素添加到它吗?
Global.xsd - namespace - Namespace
<xs:complexType name = "body" mixed="true">
<xs:sequence>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element name="fontStyle" type="fontStyle"/>
<xs:element name="link" type="link"/>
<xs:element name="mark" type="mark"/>
<xs:element name="orderedList" type="orderedList"/>
<xs:element name="table" type="table"/>
<xs:element name="toc" type="toc"/>
<xs:element name="unorderedList" type="unorderedList"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
test.xsd namespace - test
<xs:element name="body" type="n:body"/>
答案 0 :(得分:1)
当然,为什么不呢。类似的东西:
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:m"
xmlns:m="urn:m"
xmlns:n="urn:n"
elementFormDefault="qualified">
<xsd:import namespace="urn:n" schemaLocation="n.xsd"/>
<xsd:element name="body" type="n:body"/>
<xsd:element name="extendedBody" type="m:extendedBody"/>
<xsd:complexType name="extendedBody">
<xsd:complexContent>
<xsd:extension base="n:body">
<xsd:sequence>
<xsd:element name="additionalElement" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
但请注意,XML会像:
<m:extendedBody>
<n:toc>...</n:toc>
<m:additionalElement>...</m:additionalElement>
</m:extendedBody>
(虽然我没有检查过解决方案,但这只是为了提出一个想法。很可能混合/选择扩展不起作用。)
答案 1 :(得分:1)
是的,你只需要扩展这样的类型:
<xs:complexType name="moreBodyType">
<xs:complexContent>
<xs:extension base="n:body">
<xs:sequence>
// put extra child elements here
<xs:element name="morestuff" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
现在你可以这样做:
<xs:element name="morebody" type="n:MoreBodyType" />