通过 XSD 重新定义附加限制模式

Append restriction pattern via XSD redefine

我有一个基地 XSD (base.xsd):

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="TenantId">
    <xs:annotation>
      <xs:documentation>
        Represents a tenant id.
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9\.]{3,62}" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

我正在尝试在 extension.xsd 中修改它:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:redefine schemaLocation="./base.xsd">
        <xs:simpleType name="TenantId">
            <xs:restriction base="TenantId">
                <xs:pattern value="\{Settings:.*\}" />
            </xs:restriction>
        </xs:simpleType>
    </xs:redefine>
</xs:schema>

添加一个额外的允许模式。我正在根据 extension.xsd 验证 XML,'{Settings:Something}' 形式的字符串仍被标记为不匹配 "[A-Za-z0-9.]{3,62} ”。如何在不修改 base.xsd 文件的情况下附加额外的允许限制模式?

使用 xs:redefine,您可以通过限制或扩展来优化类型。

有了限制,你只能减少允许值的集合,不能增加它。

扩展允许您允许额外的内容,但不允许您为现有内容允许额外的值。

基本上,模式是您的数据必须遵守的一组规则,xs:redefine 的设计目的是让数据仍然遵守这些规则。您不能按照您尝试的方式使用它。

如果你有 XSD 1.1,你可以使用 xs:override,它有不同的理念。