Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
无法在子元素中从父元素取消属性(xsd限制)_Xsd - Fatal编程技术网

无法在子元素中从父元素取消属性(xsd限制)

无法在子元素中从父元素取消属性(xsd限制),xsd,Xsd,我想在子元素组合的ConsumerSubjectResponseType中添加subjectIdentifier属性(在父元素ConsumerSubjectResponseType中声明)。我认为在子元素中不重复属性声明就足够了,但显然不是这样。这可以在xsd中实现吗 这可以在xsd中实现吗 在你的例子中:不,或者不是那样 通过限制派生的类型必须重复所有粒子组件,但属性不需要在派生类型定义中重复,它们是从基本类型继承的。无法从受限类型中删除必需的属性。您可以为所需的属性指定某个固定(可能

我想在子元素组合的ConsumerSubjectResponseType中添加subjectIdentifier属性(在父元素ConsumerSubjectResponseType中声明)。我认为在子元素中不重复属性声明就足够了,但显然不是这样。这可以在xsd中实现吗


这可以在xsd中实现吗

在你的例子中:不,或者不是那样

通过限制派生的类型必须重复所有粒子组件,但属性不需要在派生类型定义中重复,它们是从基本类型继承的。无法从受限类型中删除必需的属性。您可以为所需的属性指定某个固定(可能为空)值,也可以使用
use=“违禁”
删除属性

通常,您试图做的是以一种倒退的方式,因为“类型a的成员,其定义是另一个类型B定义的限制,始终也是类型B的成员”,并且“除了另一个指定类型定义所允许的内容外,还允许元素或属性内容的复杂类型定义称为扩展”(引用自W3C模式定义,)

解决方案1,改用
xs:extension
创建
ConsumerSubjectResponseType
作为基本类型,并通过扩展从中派生
CombinedConsumerSubjectResponseType

<xs:complexType name="CombinedConsumerSubjectResponseType-base">
    <xs:sequence>
        <xs:element minOccurs="0" name="Sources" type="xs:string" />
        <xs:element minOccurs="0" name="AdditionalOutputData" type="xs:string" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="ConsumerSubjectResponseType-extension">
    <xs:complexContent>
        <xs:extension base="CombinedConsumerSubjectResponseType-base">
            <xs:sequence>
                <xs:element minOccurs="0" name="CustomerReferenceNumber" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="subjectIdentifier" type="xs:string" use="required" />
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

在这种情况下,影响这两种类型的更改应该在组上进行,而不是在类型上进行。

非常感谢-提示“使用=禁止”为我省去了很多痛苦!+1 for
修复了
。请参阅。
<xs:complexType name="CombinedConsumerSubjectResponseType-base">
    <xs:sequence>
        <xs:element minOccurs="0" name="Sources" type="xs:string" />
        <xs:element minOccurs="0" name="AdditionalOutputData" type="xs:string" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="ConsumerSubjectResponseType-extension">
    <xs:complexContent>
        <xs:extension base="CombinedConsumerSubjectResponseType-base">
            <xs:sequence>
                <xs:element minOccurs="0" name="CustomerReferenceNumber" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="subjectIdentifier" type="xs:string" use="required" />
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<xs:group name="CombinedConsumerSubjectResponse-group">
    <xs:sequence>
        <xs:element minOccurs="0" name="Sources" type="xs:string" />
        <xs:element minOccurs="0" name="AdditionalOutputData" type="xs:string" />
    </xs:sequence>
</xs:group>

<xs:complexType name="ConsumerSubjectResponseType-group">
    <xs:sequence>
        <xs:element minOccurs="0" name="CustomerReferenceNumber" type="xs:string" />
        <xs:group ref="CombinedConsumerSubjectResponse-group" />
    </xs:sequence>
    <xs:attribute name="subjectIdentifier" type="xs:string" use="required" />
</xs:complexType>

<xs:complexType name="CombinedConsumerSubjectResponseType-group">
    <xs:group ref="CombinedConsumerSubjectResponse-group" />
</xs:complexType>