在 XSD 中定义和重用限制

Defining and reusing restriction in XSD

在我的 XSD 中,我有一个经常使用的限制。相同的限制在多个地方使用,更新时可能会遗漏。我知道有一些工具 (find/replace),但我认为最好在全局范围内定义这些限制。这样,我们只需要修改一个地方,而不用修改x次。

我还有一个额外的问题,就是元素的名称总是不同的,并且无法更改它(例如 long_summary、short_summary、...)

XSD

的设置
<xs:schema>
    <xs:complexType name="eventType">
        <xs:sequence>
            <xs:element name="short_summary">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="([\p{L}\p{M}\p{N}\p{P}\p{Z}\p{S}\p{C}]+)?"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="long_summary">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="([\p{L}\p{M}\p{N}\p{P}\p{Z}\p{S}\p{C}]+)?"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
         </xs:sequence> 
    </xs:complexType>
</xs:schema>

基本上我只想定义一次限制 ([\p{L}\p{M}\p{N}\p{P}\p{Z}\p{S}\p{C}]+)? 并将其重新用于 short_summary 和 long_summary。

如有任何建议或指示,我们将不胜感激。同时,我会进一步寻找,如果找到答案,我会把它放在这里。

我的问题的答案:

全局限制

<xs:simpleType name="Text">
        <xs:restriction base="xs:string">
            <xs:pattern value="([\p{L}\p{M}\p{N}\p{P}\p{Z}\p{S}\p{C}]+)?"/>
        </xs:restriction>
</xs:simpleType>

用于XSD

....
<xs:element name="short_summary" type="Text"/>
<xs:element name="long_summary" type="Text"/>
....