【问题标题】:XML Schema Union getting "string" is not valid for the element error获取“字符串”的 XML Schema Union 对元素错误无效
【发布时间】:2016-12-02 07:09:55
【问题描述】:

我是一位经验丰富的程序员,但最近刚开始维护一个使用 xml 模式的应用程序。他们想对接受经度的项目添加一些验证。他们希望继续接受空白以及 0、0.0000000,或者如果输入了另一个值,他们希望确保至少它在美国。 (即介于 -125 和 -67 之间)

当前的 xml 模式只允许任何值。

<xs:element name="Location">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="LocLongitude"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

有多个供应商发送此信息。以下是他们可能发送的示例:

<Location>
  <LocLongitude xsi:type="xsd:string"></LocLongitude>
</Location>

现在看看用户想要什么,我发现我可以使用联合来封装多个检查。这就是我现在使用的。

<xs:element name="Location">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="LocLongitude" nillable="true">
        <xs:simpleType>
          <xs:union>
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value=""/>
                <xs:enumeration value="0"/>
              </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="xs:double">
                <xs:minInclusive value="0.00000000"/>
                <xs:maxInclusive value="0.00000000"/>
              </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="xs:double">
                <xs:minInclusive value="-125"/>
                <xs:maxInclusive value="-67"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:union>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

如果我使用它会正确验证:

<Location>
  <LocLongitude />
</Location>

现在,如果我使用当前供应商正在使用的东西(见下文):

<Location>
  <LocLongitude xsi:type="xsd:string"></LocLongitude>
</Location>

我们得到一个错误:

XSI:TYPE 属性值“”对于元素“经度”无效,因为它不是从模式中的类型有效派生的类型,或者因为它的 XSI:TYPE 派生被阻止。

我的问题是,我可以在允许供应商包含 xsi:type="xsd:string" 的同时让它工作吗?

【问题讨论】:

    标签: c# xml schema union


    【解决方案1】:

    不,为xs:type 选择的类型必须有效地派生自相关元素提供的类型。您不能一方面定义限制值空间的类型,另一方面又支持更广泛的 xs:type 声明。

    另请参阅:How to restrict the value of an XML element using xsi:type in XSD?

    【讨论】:

    • 非常感谢,我就是这么想的,但我想验证一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多