对单个元素禁用 XSD 验证?

Disable XSD validation for a single element?

我有一个 XSD 文件,其中包含一些元素

<xs:element name="BasicData">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TTTeacherList" minOccurs="0"/>
                <xs:element ref="NonTeachingActivityList" minOccurs="0"/>
                <xs:element ref="TTStudentList" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
</xs:element> 

<xs:element name="NonTeachingActivityList">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="NonTeachingActivity" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
</xs:element>

<xs:element name="NonTeachingActivity">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NTCode" type="String10"/>
                <xs:element name="Description" type="String100"/>
                <xs:element name="Type" type="MeetingType"/>
            </xs:sequence>
            <xs:attribute name="RefId" type="GUID" use="required"/>
        </xs:complexType>
</xs:element>

我想删除元素 NonTeachingActivity 的所有验证,这样无论它是否发生,都不会检查验证。而且我不会删除整个元素只是忽略这个元素。

XSD 中没有直接支持您提出的问题,但有两种选择:

  1. 如果您希望NonTeachingActivity的内容模型不 验证通过,可以腾空了,

    <xs:element name="NonTeachingActivity"/>
    

    那么它将被允许包含任何 XML.

  2. 如果您希望NonTeachingActivity出现在内容模型中 其他不影响验证的元素,您可以尝试 将对 NonTeachingActivity 的引用替换为

    <xs:any processContents="skip" />
    

    并且,如果您没有造成解析歧义,这将 允许任何元素出现在它的位置。

选项 #1,结合使 NonTeachingActivity 在任何地方使用都可选,可能最接近满足您的要求。

可以使用 "any" 标签:

<xs:element name="NonTeachingActivityList">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
</xs:element>