Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSD:使用XSD作为默认命名空间限制已存在的枚举_Xml_Enums_Xsd - Fatal编程技术网

Xml XSD:使用XSD作为默认命名空间限制已存在的枚举

Xml XSD:使用XSD作为默认命名空间限制已存在的枚举,xml,enums,xsd,Xml,Enums,Xsd,我有一个由XSD定义的web服务。接口本身包含多个操作,其中一些操作在其请求/响应消息中使用相同的枚举。 但是,在其中一个请求中,我希望将可能的输入值限制为枚举的子集。我尝试了与下面的xml类似的东西,但失败了。这可能吗?是否有其他解决方案,或者我必须为此定义一个新的枚举 <element> <simpleType> <restriction base="myEnum"> <enumeration valu

我有一个由XSD定义的web服务。接口本身包含多个操作,其中一些操作在其请求/响应消息中使用相同的枚举。 但是,在其中一个请求中,我希望将可能的输入值限制为枚举的子集。我尝试了与下面的xml类似的东西,但失败了。这可能吗?是否有其他解决方案,或者我必须为此定义一个新的枚举

<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。如果它没有目标名称空间,那么声明默认名称空间可能不是一个好主意,因为它使您无法引用在模式中定义的任何类型。

看一看。您可以尝试为每个用例创建两个枚举,然后对已经拥有所有值的地方使用它们的并集。看一看。您可以尝试为每个用例创建两个枚举,然后对已经拥有所有值的地方使用它们的并集。