xml - 从另一个 XSD 导入复杂类型

标签 xml xsd xsd-validation xml-validation

我发现将复杂类型从一个 XSD 文件导入和引用到另一个文件时遇到困难。让我用一个例子来说明我的场景

学生.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
    xmlns="xyz"
    elementFormDefault="qualified">

    <xsd:element name="student" type="student" />

    <xsd:complexType name="student">
        <xsd:sequence>
            <xsd:element name="id" type="xsd:string" />
            <xsd:element name="birth-date" type="xsd:date" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

这是另一个 XSD,Teacher.xsd,我想在其中引用 student.xsd 中的复杂类型 student

教师.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
    xmlns="xyz"
    elementFormDefault="qualified">

    <xsd:import schemaLocation="student.xsd"
        namespace="xyzzz" />

    <xsd:element name="teacher" type="teacher" />

    <xsd:complexType name="teacher">
        <xsd:sequence>
            <xsd:element name="id" type="xsd:string" />
            <xsd:element name="name" type="xsd:string" />

            // TODO - Refer to student from student.xsd

        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>

我已经看到其他 Stack Overflow 帖子关于实现这一点的语法,例如
<xs:element name="teacher" type="teacher:teacher"/>

随着进口:
<xsd:import schemaLocation="xyz" namespace="xyz"/>

但似乎没有任何效果。

有人可以帮助我实现这一目标吗?

最佳答案

使用 xsd:include而不是 xsd:import因为 XSD 在同一个命名空间中。

备注

  • 您需要包含 Student.xsd,而不是 common.xsd。
  • 由于被引用的类型在同一个命名空间中,你不需要指定命名空间前缀:
    <xsd:element name="student" type="student"/>
    
  • 以不同的方式命名元素和属性是更好的风格。

  • 另见
  • What's the difference between xsd:include and xsd:import?
  • How to reference element in other XSD's namespace? (对于 xsd:import 的完整工作示例 | 用于命名空间不同时)
  • 关于xml - 从另一个 XSD 导入复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47684511/

    相关文章:

    android - 自动调整android中gridview中单元格的大小

    c# - 如何在 C# 中从 XSD 检索 minoccurs 值?

    java - cvc-数据类型-valid.1.2.1 : 'mylns:xsi' is not a valid value for 'NCName'

    java - xjc:两个声明导致 ObjectFactory 类中的冲突

    xsd - 如何在 XSD 模式中定义可变长度的字符串?

    regex - XSD 正则表达式模式 : this or nothing

    XML 验证错误 - 根元素必须匹配文档类型

    javascript - 来自 AutoCad 2011 的 XML 文件

    xml - 在 xml 中使用命名空间时如何通过 xmltable 解析 xml(Oracle)