これは有効ですが、パターンと maxLength の両方を使用して長さの制約を複製して強制します。
<xsd:simpleType name="MyType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{0,10}" />
<xsd:maxLength value="10" />
</xsd:restriction>
</xsd:simpleType>
パターンだけで十分です。
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{0,10}" />
</xsd:restriction>
または、パターンを単純化して、maxLength に依存することもできます。
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]*" />
<xsd:maxLength value="10" />
</xsd:restriction>
質問:
どちらかを選択した場合の既知のパフォーマンスへの影響はありますか? 両方が提供されている場合、特定のパーサーは最初に len をチェックし、パターンをコンパイルする前に検証を短絡しますか? それとも両方ともチェックされますか?パーサーごとに異なりますか?
ここでのパフォーマンスの違いはおそらく最小限であることを認めます。また、正規表現エンジンが長さの制約を短絡できる可能性があることも期待していますが、それは私が気にしているよりも深いレベルです。
パフォーマンスはさておき、パターンにすべてを含めることを好むと思いますが、それは典型的なベストプラクティスではなく、正規表現に対する私の快適さのレベルを反映している可能性があります.
ありがとう!