2

タイプ xsd:token の有効な XML 要素のコンテンツを制限する XSD を作成して、検証時に xsd:string でラップされた同じコンテンツと区別できないようにします。

つまり、キャリッジ リターン (#xD)、ライン フィード (#xA)、タブ (#x9) 文字を含まず、スペース (#x20) 文字で開始または終了し、2 つ以上の隣接するシーケンスを含まないスペース文字。

使用する正規表現は次のとおりだと思います。

\S+( \S+)*

(一部の非空白、省略可能 [1 つ以上の非空白の隣の単一スペース]、常に非空白で閉じることを含む)

これはさまざまな正規表現テスト ツールで動作しますが、oXygen XML エディターを使用してチェックできないようです。文字列内のダブル スペース、前後のスペース、タブ、および改行により、XML インスタンスは引き続き検証に合格できるようです。

XSD の実装は次のとおりです。

<xs:simpleType name="Tokenized500Type">
    <xs:restriction base="xs:token">
      <xs:maxLength value="500"/>
      <xs:minLength value="1"/>
      <xs:pattern value="\S+( \S+)*"/>
    </xs:restriction>
  </xs:simpleType>

何か特徴あるのかな

  • XML

また

  • XSD

また

  • oXygen XML エディター

この作業を妨げますか?

4

2 に答える 2

2

基本型は xsd:string である必要があります。

xsd:Token を使用すると、入力がトークン化され、THEN がトークンかどうかがチェックされます。それは冗長です。

于 2016-11-01T13:16:08.630 に答える
1

元の([^\s])+( [^\s]+)*([^\s])*正規表現にはいくつかの冗長なパターンが含まれています: 1+ 非空白の各反復に一致してキャプチャし、次に 0+ スペースのシーケンスと 1+ 非空白に一致してから、再び非空白の各反復に一致してキャプチャしようとします.

似ているが短いものを使用できます

\S+( \S+)*

XML スキーマの正規表現はデフォルトで固定されているため、次の式が一致します。

  • \S+- 空白以外の 1 つ以上の文字、具体的には&#20;(スペース)、\t(タブ)、\n (改行)、および\r(リターン)
  • ( \S+)*- 0 個以上のスペースと 1 個以上の空白のシーケンス。

この式では、重複する連続するスペースは許可されず、先頭/末尾の位置にスペースは許可されません。

正規表現の使用方法は次のとおりです。

<xs:simpleType name="Tokenized500Type">
  <xs:restriction base="xs:string">
    <xs:pattern value="\S+( \S+)*"/>
    <xs:maxLength value="500"/>
    <xs:minLength value="1"/>
  </xs:restriction>
</xs:simpleType>
于 2016-11-01T09:04:43.457 に答える