【问题标题】:XSD validation with all required enumerations使用所有必需的枚举进行 XSD 验证
【发布时间】:2021-06-20 03:26:14
【问题描述】:

我必须使用 XSD 验证下表。

要验证的条件是..

  1. 每次都会有这 9 条唯一记录。
  2. 不允许重复。
  3. 计划应该按照准确的保存顺序。

即使我们从表中删除一条记录或复制任何记录,XSD 也会通过上表。 如何应用上述条件。 我试过 use="required" 枚举,但它不起作用。我已经经历了很多解决方案,但没有一个符合我的要求。

<xs:element name="Plan" minOccurs="0">
             <xs:simpleType> 
               <xs:restriction base="xs:string">
                 <xs:enumeration value="Actual DSP"></xs:enumeration> 
                 <xs:enumeration value="Actual OOR"></xs:enumeration> 
                 <xs:enumeration value="Budget DSP"></xs:enumeration> 
                 <xs:enumeration value="Budget OOR"></xs:enumeration> 
                 <xs:enumeration value="FY Forecast"></xs:enumeration> 
                 <xs:enumeration value="Q1 Forecast"></xs:enumeration> 
                 <xs:enumeration value="Q2 Forecast"></xs:enumeration> 
                 <xs:enumeration value="Q3 Forecast"></xs:enumeration> 
                 <xs:enumeration value="Q4 Forecast"></xs:enumeration> 
               </xs:restriction> 
             </xs:simpleType> 
           </xs:element> 

【问题讨论】:

  • 对我来说有很多未解决的问题。为什么使用 XML 来表示这种数据结构?为什么要使用 XSD 来验证它?这样做的实际目的是什么?
  • @kimbert 我们有一个必须使用 XSD 验证的 excel。所以我们首先将 excel 转换为 XML,然后使用 XSD 进行验证。这是客户的要求。

标签: xml asp.net-mvc-4 c#-4.0 xsd xsd-validation


【解决方案1】:

基于您分享的有限信息。我建议使用将所有 9 个计划选项定义为计划子项的 xml 模式。这样做可以满足所有三个要求并保持 xml 架构简单。 我假设每个计划选项都有专用信息,然后您可以将其存储为计划选项元素的子项。还要记住,xml 元素的名称中不能有空格。

我做了一个简单的例子,你可以如何设置它。 示例:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="Plan">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Actual_DSP"/>
                <xs:element name="Actual_OOR"/>
                <xs:element name="Budget_DSP"/>
                <xs:element name="Budget_OOR"/>
                <xs:element name="FY_Forecast" type="ForecastType"/>
                <xs:element name="Q1_Forecast" type="ForecastType"/>
                <xs:element name="Q2_Forecast" type="ForecastType"/>
                <xs:element name="Q3_Forecast" type="ForecastType"/>
                <xs:element name="Q4_Forecast" type="ForecastType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="ForecastType">
        <xs:sequence>
            <xs:element name="Debit" type="xs:decimal"/>
            <xs:element name="Credit" type="xs:decimal"/>
            <xs:element name="Status" type="StatusType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="StatusType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Behind"/>
            <xs:enumeration value="OnTrack"/>
            <xs:enumeration value="Ahead"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2012-04-13
    • 2014-07-26
    相关资源
    最近更新 更多