通过 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
,它有不同的理念。
我有一个基地 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
,它有不同的理念。