Xml XSD:使用XSD作为默认命名空间限制已存在的枚举
我有一个由XSD定义的web服务。接口本身包含多个操作,其中一些操作在其请求/响应消息中使用相同的枚举。 但是,在其中一个请求中,我希望将可能的输入值限制为枚举的子集。我尝试了与下面的xml类似的东西,但失败了。这可能吗?是否有其他解决方案,或者我必须为此定义一个新的枚举Xml XSD:使用XSD作为默认命名空间限制已存在的枚举,xml,enums,xsd,Xml,Enums,Xsd,我有一个由XSD定义的web服务。接口本身包含多个操作,其中一些操作在其请求/响应消息中使用相同的枚举。 但是,在其中一个请求中,我希望将可能的输入值限制为枚举的子集。我尝试了与下面的xml类似的东西,但失败了。这可能吗?是否有其他解决方案,或者我必须为此定义一个新的枚举 <element> <simpleType> <restriction base="myEnum"> <enumeration valu
<element>
<simpleType>
<restriction base="myEnum">
<enumeration value="A"/>
<enumeration value="B"/>
</restriction>
</simpleType
</element>
<simpleType name="myEnum">
<restriction base="xsd:string">
<enumeration value="A"/>
<enumeration value="B"/>
<enumeration value="C"/>
<enumeration value="D"/>
</restriction>
</simpleType>
欢迎来到堆栈溢出。如果您提供了一个完整的、自包含的、可复制的示例,那么这个问题将更容易回答。由于您没有提供完整的模式,也没有准确地引用所得到的错误,因此任何答案都必须基于对您没有提供的信息的推测。下次做得更好,好吗
如果从模式文档中提取的内容是正确的,那么问题要么是名称空间问题,要么是名称空间问题掩盖了问题。simpleType、restriction和enumeration元素没有前缀,这表明您已将XSD名称空间声明为默认名称空间。(另一方面,您在myEnum定义中对xsd:string的引用表明您已将xsd名称空间绑定到前缀“xsd”。也许您已经将两者都绑定到了。)在派生类型的base
属性中对myEnum的引用是非限定的,这意味着它被解释为位于xsd名称空间:{}myEnum中。由于XSD命名空间中没有名为myEnum的类型,因此可能会出现一个基类型not found错误
如果您的模式有一个目标名称空间,则需要使用前缀QName来引用该名称空间中的myEnum。如果它没有目标名称空间,那么声明默认名称空间可能不是一个好主意,因为它使您无法引用模式中定义的任何类型。欢迎使用堆栈溢出。如果您提供了一个完整的、自包含的、可复制的示例,那么这个问题将更容易回答。由于您没有提供完整的模式,也没有准确地引用所得到的错误,因此任何答案都必须基于对您没有提供的信息的推测。下次做得更好,好吗
如果从模式文档中提取的内容是正确的,那么问题要么是名称空间问题,要么是名称空间问题掩盖了问题。simpleType、restriction和enumeration元素没有前缀,这表明您已将XSD名称空间声明为默认名称空间。(另一方面,您在myEnum定义中对xsd:string的引用表明您已将xsd名称空间绑定到前缀“xsd”。也许您已经将两者都绑定到了。)在派生类型的base
属性中对myEnum的引用是非限定的,这意味着它被解释为位于xsd名称空间:{}myEnum中。由于XSD命名空间中没有名为myEnum的类型,因此可能会出现一个基类型not found错误
如果您的模式有一个目标名称空间,则需要使用前缀QName来引用该名称空间中的myEnum。如果它没有目标名称空间,那么声明默认名称空间可能不是一个好主意,因为它使您无法引用在模式中定义的任何类型。看一看。您可以尝试为每个用例创建两个枚举,然后对已经拥有所有值的地方使用它们的并集。看一看。您可以尝试为每个用例创建两个枚举,然后对已经拥有所有值的地方使用它们的并集。