私はルールエンジンを記述していますが、ユーザーは任意の順序でルールを指定できますが、一度指定すると、設定された順序で実行されます。何かのように、このxsd:sequenceを使用せずに順序を強制する方法?
<RuleEngine>
<Rule1 ..>
<Rule2 ..>
<Rule3 ...>
</RuleEngined>
(実行:Rule1
- >Rule2
- >Rule3
)
など
この<RuleEngine>
<Rule3 ..>
<Rule1 ..>
<Rule2 ...>
</RuleEngine>
(実行:Rule3
- >Rule1
- >Rule2
)
私はこのためのスキーマを書いており、欲望を得ることができません結果はxsd:all
またはxsd:sequence
となります。 xsd:all
を使用すると、ユーザーに柔軟性を与えることができますが、解析中はコードの順序を保持しません。
<xs:element name="RuleEngine">
<xs:complexType>
<xs:all>
<xs:element ref="Rule1" ..
<xs:element ref="Rule2" ..
<xs:element ref="Rule3" ..
</xs:all>
</xs:complexType>
</xs:element>
私はCODEで、それは開発者がオーダーをお知らせしますけれども、それは、彼らの選択の順に規則を指定してからユーザーを防ぐことができます他に、いずれかのxsd:sequence
を使用することはできません。
<xs:element name="RuleEngine">
<xs:complexType>
<xs:sequence>
<xs:element ref="Rule1" ..
<xs:element ref="Rule2" ..
<xs:element ref="Rule3" ..
</xs:sequence>
</xs:complexType>
</xs:element>
thread1、thread2これはXML/XSDでは直接的な解決方法ではないようです。あなたはどちらかを実行することができますかそれを強制しません、私は夢のように両方を持つことはできません:) "all"を使用して、コードが実行前にルールをソートするヒント。 他の退屈なものがマイグレーションする場合Boost Property Tree
既存のフレームワークで希望の動作を達成できるかどうかを教えてください。
まあ、ルール1、ルール2は「焼き番号」と全く一般的な「ルール」ではありません。それらは、 OR のような全く異なるルールでも構いません。あなたが提案した最後のスキーマは、ここに収まらないでしょう。ユーザーがジャグリングのルールや注文を保持している場合、ユーザーが特別に私を呪うので、「num」を明示的に追加することは好ましくありません。私はそれが既存の形では解決できないと結論づけるだろうと思う。 TImeがBoost PTreeに移行しよう! –
私が提案した最後のスキーマは、実際には明示的な番号付けを削除します。規則ベースのシステムは、通常、マッチングの際のタイブレークを除いて、順序付けに依存しません。 – kjhughes