Xml 从另一个XSD导入复杂类型
我发现从一个XSD文件到另一个XSD文件导入和引用复杂类型很困难。让我用一个例子来说明我的场景 Student.xsdXml 从另一个XSD导入复杂类型,xml,xsd,xsd-validation,xml-validation,Xml,Xsd,Xsd Validation,Xml Validation,我发现从一个XSD文件到另一个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="
<?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>
<?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>
这里是另一个XSD,Teacher.XSD,我想在这里引用student.XSD中的复杂类型student
Teacher.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>
<?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>
//TODO-参考student.xsd中的学员
我看到过其他关于实现这一点的语法的堆栈溢出帖子
<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"/>
- 更好的方式是以不同的方式命名元素和属性
- (有关
在名称空间不同时使用的完整工作示例)xsd:import
xsd:import
的完整工作示例。我在尝试引用教师中的复杂类型student时遇到此错误元素“element”中“ref”的属性值无效。记录原因:未声明的prefix:无法将'student:student'解析为QName:前缀'student'未声明。您能检查一下吗?嗨,我问了另一个问题。您能调查一下吗?非常感谢