4

In my XSD, I have a restriction that I use frequently. The same restriction is used in several places and it could be missed when updating it. I understand that there are tools (find/replace) but I think it is nicer to have these restrictions defined globally. This way, we only have to change it in one place in stead of x-times.

An extra problem I have, is that the name of the element is always different and there is no way to change it (e.g. long_summary, short_summary, ...)

Setup of the 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>

Basically I want to define the restriction ([\p{L}\p{M}\p{N}\p{P}\p{Z}\p{S}\p{C}]+)? only once and reuse it for short_summary and long_summary.

Any advice or directions are appreciated. In the meantime, I will look further and if I find the answer, I will put it here.

Dragonix
  • 199
  • 1
  • 1
  • 14

1 Answers1

5

The answer to my question:

Global restriction

<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>

Used in XSD

....
<xs:element name="short_summary" type="Text"/>
<xs:element name="long_summary" type="Text"/>
....
Dragonix
  • 199
  • 1
  • 1
  • 14