XSD架构中的元素强制属性声明:

Vec*_*tor 12 xsd

我想声明一个要包含在复杂类型声明中的元素,并且该元素具有强制属性:"option = MyOption",但"option"属性的值可以是任何值,具体取决于上下文.

也就是说:在使用包含此元素的复杂类型的任何文档中,具有某些未知值的属性"选项"应该是必需的.

例:

    <xs:element name="SpecialOption" type="xs:string"/>

    <xs:complexType name="SpecialOptions">
        <xs:sequence>
            <xs:element ref="SpecialOption" minOccurs="1" maxOccurs="100"/>
            <xs:element ref="XXX"/>     
        </xs:sequence>
    </xs:complexType>   
Run Code Online (Sandbox Code Playgroud)

在这种情况下,复杂类型"SpecialOptions"中的"SpecialOption"元素应具有此必需属性.

我不知道如何在XSD中声明元素的强制属性,或者如何指定属性必须具有尚未知的值.

pma*_*tin 26

您需要修改"SpecialOption"元素的定义以包含必需的属性.更新此代码:

<xs:element name="SpecialOption" type="xs:string"/>
Run Code Online (Sandbox Code Playgroud)

对此:

<xs:element name="SpecialOption">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Option" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

通过此更改,您的复杂类型将在"SpecialOptions"复杂类型中的"SpecialOption"元素的所有实例上包含所需的"Option"属性.将"Option"属性声明为类型xs:string将允许在此字段中传递任何值.


mou*_*sio 16

1)这是一个简单的必需字符串属性

<xs:element name="SpecialOption">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Option" type="xs:string" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element> 
Run Code Online (Sandbox Code Playgroud)

2)要求一个允许值列表中的一个:

<xs:element name="SpecialOption">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Option" use="required">
                    <xs:simpleType>  
                        <xs:restriction base="xs:string">  
                            <xs:enumeration value="DE"/>  
                            <xs:enumeration value="EN"/>  
                        </xs:restriction>  
                    </xs:simpleType>  
                </xs:attribute>  
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element> 
Run Code Online (Sandbox Code Playgroud)

3)可以使用范围作为限制,如下例所示.

<xs:element name="SpecialOption">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Option" use="required">
                    <xs:simpleType>  
                        <xs:restriction base="xs:integer">  
                            <xs:minInclusive value="95"/>  
                            <xs:maxInclusive value="137"/>  
                        </xs:restriction>  
                    </xs:simpleType>  
                </xs:attribute>  
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element> 
Run Code Online (Sandbox Code Playgroud)

4)下面,该属性被声明为包含十进制值的列表.这允许属性包含指定值的子集,例如Option ="6 77 95".

<xs:simpleType name="Items">  
    <xs:restriction base="xs:decimal">  
        <xs:enumeration value="137"/>  
        <xs:enumeration value="95"/>  
        <xs:enumeration value="6"/>  
        <xs:enumeration value="77"/>  
    </xs:restriction>  
</xs:simpleType>  
<xs:element name="SpecialOption">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Option" use="required">
                    <xs:simpleType>  
                        <xs:list itemType="Items"/>  
                    </xs:simpleType>  
                </xs:attribute>  
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element> 
Run Code Online (Sandbox Code Playgroud)

5)这里属性被声明为可选属性,但是提供了一个默认值("test"),这有时足够了:

<xs:element name="SpecialOption">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Option" type="xs:string" use="optional" default="test"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element> 
Run Code Online (Sandbox Code Playgroud)