1

私の目標は、要素のデータ型が親要素のデータ型と一致するように強制するRELAXNGコンパクトスキーマを作成することです。

私は現在次のスキーマを持っています:

start = Tickmarks

Tickmarks = element tickmarks { 
    attribute from { xsd:float | xsd:date },
    attribute to { xsd:float | xsd:date },
    Tick*
}

Tick = element tick { 
    attribute value { xsd:float | xsd:date },
    attribute label { text }
}

私が欲しいのは、Tickmarks / @ fromがfloatである場合、Tickmarks / Tick /@valueもfloatでなければならないドキュメントを記述するスキーマです。

したがって、基本的に次のテストを満たす必要があります。

有効

<tickmarks from="1" to="10">
  <tick value="3" label="3"/>
  <tick value="7" label="7"/>
</tickmarks>

有効

<tickmarks from="2000-01-01" to="2006-01-01">
  <tick value="2002-01-01" label="2002"/>
  <tick value="2004-01-01" label="2004"/>
</tickmarks>

無効

<tickmarks from="2000-01-01" to="2006-01-01">
  <tick value="10" label="10"/>
  <tick value="20" label="20"/>
</tickmarks>

無効

<tickmarks from="1" to="10">
  <tick value="2002-01-01" label="2002"/>
  <tick value="2004-01-01" label="2004"/>
</tickmarks>

これはRELAXNGコンパクトで可能ですか?

4

1 に答える 1

3

純粋な RELAX NG を使い続けたい (そして、埋め込まれた Schematron ルールなどの代替ソリューションを避けたい) 場合は、次を使用できます。

start = Tickmarks

Tickmarks = element tickmarks { 
    (
     attribute from { xsd:float },
     attribute to { xsd:float },
     Tick-float*)
    | (
       attribute from { xsd:date },
       attribute to { xsd:date },
       Tick-date*)
}

Tick-float = element tick { 
    attribute value { xsd:float },
    attribute label { text }
}

Tick-date = element tick { 
    attribute value { xsd:date },
    attribute label { text }
}
于 2013-01-10T12:24:12.780 に答える