定义我的 sympleTypes 给出 "Type is not declared, or is not a simple type"
Defining my sympleTypes gives "Type is not declared, or is not a simple type"
我已经定义了两个 sympleTypes (CommonTypes.xsd),我想在其他几个 XSD 文件中使用它们(例如 MotorList.xsd)。
我用的是Visual Studio来开发。 Visual Studio 不抱怨任何麻烦。这两个文件都将 'Build Action' 设置为 'Embedded Resource'。但是当我 运行 我的应用程序验证 XSD 文件时,我得到 'Type http://Ford/Mustang/PowerPlugin/CommonTypes:powerType' 未声明,或者不是简单类型'。
怎么了?
感谢您的帮助。
文件CommonTypes.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Ford/Mustang/PowerPlugin/CommonTypes">
<xs:simpleType name="powerType" >
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="unitType" final="restriction" >
<xs:restriction base="xs:string">
<xs:enumeration value="kW" />
<xs:enumeration value="PS" />
<xs:enumeration value="Nm" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
文件MotorList.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://MyNamespace/MyTypes"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:commonTypes="http://Ford/Mustang/PowerPlugin/CommonTypes">
<xs:import namespace="http://Ford/Mustang/PowerPlugin/CommonTypes"
schemaLocation="CommonTypes.xsd"/>
<xs:element name="MotorList">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Prime">
<xs:complexType>
<xs:attribute name="cylinder" type="xs:positiveInteger" use="required" />
<xs:attribute name="power" type="commonTypes:powerType" use="required" />
<xs:attribute name="unit" type="commonTypes:unitType" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
您的架构文档没有问题(我用 Saxon 测试了它们)。因此,问题与您使用它们的方式有关(您很少告诉我们)。一种可能是模式处理器实际上没有找到 CommonTypes.xsd 文档 - 一种检查它的好方法是引入故意错误并查看它是否被报告。然后告诉我们您如何调用失败的验证(以及您使用的模式处理器)。
我已经定义了两个 sympleTypes (CommonTypes.xsd),我想在其他几个 XSD 文件中使用它们(例如 MotorList.xsd)。
我用的是Visual Studio来开发。 Visual Studio 不抱怨任何麻烦。这两个文件都将 'Build Action' 设置为 'Embedded Resource'。但是当我 运行 我的应用程序验证 XSD 文件时,我得到 'Type http://Ford/Mustang/PowerPlugin/CommonTypes:powerType' 未声明,或者不是简单类型'。
怎么了?
感谢您的帮助。
文件CommonTypes.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://Ford/Mustang/PowerPlugin/CommonTypes">
<xs:simpleType name="powerType" >
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="unitType" final="restriction" >
<xs:restriction base="xs:string">
<xs:enumeration value="kW" />
<xs:enumeration value="PS" />
<xs:enumeration value="Nm" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
文件MotorList.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://MyNamespace/MyTypes"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:commonTypes="http://Ford/Mustang/PowerPlugin/CommonTypes">
<xs:import namespace="http://Ford/Mustang/PowerPlugin/CommonTypes"
schemaLocation="CommonTypes.xsd"/>
<xs:element name="MotorList">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Prime">
<xs:complexType>
<xs:attribute name="cylinder" type="xs:positiveInteger" use="required" />
<xs:attribute name="power" type="commonTypes:powerType" use="required" />
<xs:attribute name="unit" type="commonTypes:unitType" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
您的架构文档没有问题(我用 Saxon 测试了它们)。因此,问题与您使用它们的方式有关(您很少告诉我们)。一种可能是模式处理器实际上没有找到 CommonTypes.xsd 文档 - 一种检查它的好方法是引入故意错误并查看它是否被报告。然后告诉我们您如何调用失败的验证(以及您使用的模式处理器)。