- - PR -
【XML】 条件によってスキーマ定義を変えたい
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-25 09:07
また、初歩的な質問をして申し訳ありません。
以下のXMLフォーマットがあります。 <UnitParameters Type="A"> <Unit Name="AAA"> <Param ID="XXXX$1">1.0<Param> <Param ID="YY$YYY">C0000XXXX01<Param> </Unit> <Unit Name="BBB"> <Param ID="UUU$1">3<Param> <Param ID="XXXX$YYY">6.0<Param> </Unit> </UnitParameters> これをスキーマでElementの型を指定したいのですが、 このままでは無理そうなので下記のように変更しました。 <UnitParameters Type="A"> <Unit Name="AAA"> <ParamFloat ID="XXXX$1">1.0<ParamFloat> <ParamString ID="YY$YYY">C0000XXXX01<ParamString> </Unit> <Unit Name="BBB"> <ParamShort ID="UUU$1">3<ParamShort> <ParamFloat ID="XXXX$YYY">6.0<ParamFloat> </Unit> </UnitParameters> この方針でいいでしょうか。 それとも他に何か良い方法があるでしょうか。 「Param」elementに付く属性にはあまり規則性がないです。 | ||||||||||||
|
投稿日時: 2005-07-25 10:05
Param 要素に型を表す属性を持たせるのが、最も簡単な方法だと思いますがいかがでしょうか。
設計ポリシーの問題かもしれませんが、要素名が型のように副次的な情報まで含んでいるのは、私は好ましいと思いません。 もし Param の値が XML 上ではテキスト要素で表せるもののみであれば、値も属性にしてしまうとより簡単になります。 (下位構造を持つ、単純でない型も扱うならば、この方法は使えませんが(_ _))
| ||||||||||||
|
投稿日時: 2005-07-25 10:14
返信ありがとうございます。
属性に型情報を持たせるのがいいのではないかと思っているのですが、 この場合スキーマでそれぞれのelementの型まで指定できるものなのでしょうか。 | ||||||||||||
|
投稿日時: 2005-07-25 10:33
補足説明です。
2番目のXMLに対応するスキーマを以下のように定義しています。 <xsd:element name="UnitParameters"> <xsd:complexType> <xsd:sequence> <xsd:element name="Unit" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="ParamFloat" type="xsd:float"/> <xsd:element name="ParamShort" type="xsd:short"/> <xsd:element name="ParamString" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="ID" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="Name" type="xsd:string"/> </xsd:complexType> </xsd:element> | ||||||||||||
|
投稿日時: 2005-07-25 13:11
条件によって型を変えるということはできないと思います。
これでxsd:string/xsd:short/xsd:floatどれでもいいという要素の定義はできますが、実質xsd:stringのみと変わらないので役に立ちそうにないですね。 | ||||||||||||
|
投稿日時: 2005-07-25 19:14
要素名と型は Globalに 強固に結びついていて
extension,restriction でも変えられない、baseの型に固着。 カンマ区切りのようには、扱えないのでは。 XSD 以外のメカでは 検証可能と思います。 http://www.schematron.com/ や B.2.2. 属性に依存する内容モデル http://www.kohsuke.org/relaxng/tutorial.ja.html#IDAVZZR など [ メッセージ編集済み 編集者: MMX 編集日時 2005-07-25 19:19 ] DB や プログラム言語に 単純に マップできない 型を使うのは、身の破滅を招きます。 複雑な型を定義する → 相互運用に問題が出る → 問題解決に掛かりきりになる → 資産が100億でも離婚する。 XSD 持て余しの記事 Snow Season in Schemaland http://www.oreillynet.com/lpt/wlg/7372 OAGi: "Complex type derivation by restriction simply does not work." とか 技術者を苦しめる「悪い標準」 http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20050724/165175/ [ メッセージ編集済み 編集者: MMX 編集日時 2005-07-26 09:07 ] | ||||||||||||
1
