0

テキスト ノードを 1 つだけ含む混合コンテンツ要素を検証しようとしています。たとえば、これは検証する必要があります:

<corner description="ff models, bc RC; high temperature,high vdd">
  <modelSection>fff_pre</modelSection>
  <var value="high">temperature</var>
  <var value="high">vdd</var>
  fff_pre_Thi_Vhi_Vhi
</corner>

しかし、これはすべきではありません:

<corner description="ff models, bc RC; high temperature,high vdd">
  <modelSection>fff_pre</modelSection>
  <var value="high">temperature</var>
  <var value="high">vdd</var>
  <!-- no text, invalid! -->
</corner>

私は試した

corner = element corner {
  description,
  (
    modelSection
    & var+
    & xsd:string
  )
}

(ここでdescriptionmodelSectionvarは以前に定義されています)。上記の最初の例を検証しているときに、rnv は fff_pre_Thi_Vhi_Vhi の「テキストは許可されていません」というエラーを報告します。& textfor を置き換えると textless が検証& xsd:stringされます<corner>が、これは望ましくありません。これは単純でなければならないと感じ、私は何かを見落としています...アドバイスをありがとう。

4

2 に答える 2

2

スキーマを使用して実行しようとするjingと (欠落しているビットを追加し、rnc から rng に変換した後)、次のエラーが発生します。

/tmp/t2/test.rng:4:28: error: interleave of "string" or "data" element

cornerこのエラーは、要素の内容を定義する rng の部分に対応しています。

これは、Relax NG 仕様のセクション 7.2で指定された制限にスマック ダブを実行していることを示唆しています。dataあなたの場合、他の要素とパターンを子として受け入れる要素を持とうとしています。スペックが許しません。

XML を生成している場合は、次のような構造を生成することで問題を解決できます。

<corner description="ff models, bc RC; high temperature,high vdd">
  <modelSection>fff_pre</modelSection>
  <var value="high">temperature</var>
  <var value="high">vdd</var>
  <data>fff_pre_Thi_Vhi_Vhi</data>
</corner>

次のような rnc を使用します。

corner = element corner {
  description,
  (
    modelSection
    & var+
    & data
  )
}

data = element data { xsd:string { minLength = "1" } }

要素の名前として使用dataしましたが、最終的な解決策ではこれよりも具体的なものが必要です。

于 2014-08-26T23:24:51.407 に答える
0

xsd:string最小長を 1 に設定して使用するのはどうですか? RNG での回答については、https://stackoverflow.com/a/21709260/1712389を参照してください。

于 2014-08-26T22:06:03.190 に答える