使用从导入导入的xsd中的类型

cel*_*ige 6 xsd

给定顶级xsd导入第二级,然后导入第三级,是否可以使用第一级中的第三级类型?或者第一个必须直接导入第三个?

Inf*_*nd' 1

如果type这就是你所说的那么..这<xs:Include>不是<xs:Import>..

答案是:解析器负责将所有 XSD 连接在一起

请参见下面的示例:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <child>trial</child>
  <child2>trial2</child2>
  <trunk>
    <branch>1</branch>
    <branch>2</branch>
  </trunk>
  <specialchild>test</specialchild>
</root>
Run Code Online (Sandbox Code Playgroud)

对于上面的XML我将设计一个XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="include multiple XSDs2.xsd"/>
  <xs:element name="root" type ="root"/>
  <xs:complexType name="root">
    <xs:sequence>
      <xs:element name="child" type="xs:string" />
      <xs:element name="child2" type="xs:string" />
      <xs:element name="trunk" type="trunk"/>
      <xs:element name="specialchild" type="specialchild"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

其中类型 trunk 在文件中定义import multiple XSDs2.xsd并使用<xs:include>..(位于同一文件夹中)链接。代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="include multiple XSDs3.xsd"/>
  <xs:complexType name="trunk">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" name="branch" type="branch" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

而 typebranch 是include multiple XSDs3.xsd文件中定义的简单类型,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="branch">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <xs:simpleType name="specialchild">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

*现在棘手的部分是:在定义的地方specialchild声明,并且这两个 XSD 通过 .. 链接。您可以观察到解析器默认负责链接所有 XSD 并将它们视为一个!*XSD_1XSD_3XSD_2

希望这能解决您的问题!