2011-08-01 12 views
0

xsdスキーマを持っていますが、シリアライズには使用できません。次のxmlのxsdスキーマの作成

<rulestruct> 
    <rule> 
     <type name="vector" /> 
     <ruleident ruleidentifier="" /> 
     <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="expression" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="vector" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="statement" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="statement" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
</rulestruct> 

各ルールセットは1.Nルールを持つことができます。各ルールは繰り返すことができます。秩序が維持されなければならない。各ルールには1.N要素があり、一部には9要素、その他には10と13があります。9種類のルールタイプがあります。

要素グループを使用して各ルールタイプを表現することを考えていましたが、マップする方法がわかりません。

+0

ここであなたが求めているのは不明です。あなたがクラスをXMLにシリアライズするのに役立つことを望んでいるのか、クラスのためのより良いスキーマを作成したいのですか? –

答えて

2

基本属性が抽象型名と等しいxs:ComplextContent>xs:extensionがあります。 XMLでは、要素の具象型を区別するために、各ルール要素にはxsi:type attriteが必要です。 説明と例はhereです。

ルールタイプごとに異なるエレメント名を使用する場合は、代替グループを使用できます。共通の祖先は、属性抽象で再び定義されます。具体的な型は、共通の祖先の名前に等しい属性substitutionGroupを持つxs:elementとして定義されます。 説明と例はhereです。

+0

私に例を教えてください。 –

+0

がこれを見つけました。http://www.xfront.com/VariableContentContainers.html私は方法3が私が探していたものに最も近いと思われる、これはあなたの最初の方法です。ありがとう。 Bob –

+0

それは働いた。ありがとう。ボブ –

0

jaxbを使用していますか? xsdでは継承を使用することができ、要素が必要な場合はminOccurs/maxOccursで再生できます。ここで

たとえば、私は、おそらくエラーがある、それをテストすることなく、最初からそれを書くいる:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      jaxb:extensionBindingPrefixes="xjc"> 
  
      <xsd:annotation> 
            <xsd:appinfo> 
                  <jaxb:globalBindings> 
                        <xjc:simple /> 
                  </jaxb:globalBindings> 
            </xsd:appinfo> 
      </xsd:annotation> 
  
      <xsd:element name="rulestruct" type="PRuleStruct" /> 
      <xsd:complexType name="PRuleStruct"> 
            <xsd:sequence> 
                  <xsd:element name="rule" type="PRule" minOccurs="1" maxOccurs="unbounded" /> 
            </xsd:sequence> 
       </xsd:complexType> 
  
      <xsd:complexType name="PRule"> 
            <xsd:sequence> 
                  <xsd:element name="vector" type="PVector" minOccurs="1" maxOccurs="unbounded" /> 
            </xsd:sequence> 
       </xsd:complexType> 

あなたは、あなたの問題のために多くのソリューションがしばしばあります見てきました。私の選択は、しばしば継承を使用し、可能なマーカーを少なくして、その名前で遊ぶことです。ここに私の目的:あなたは、さまざまなルールタイプのための要素(ルール)の同じ名前を保持したい場合、あなたは抽象的な要素(属性abstract="true")とそのすべての子を定義し

<rules> 
<ruleVector ruleidentifier="sample" patternType="sample"> 
</ruleVector> 

+0

申し訳ありませんが、私は.net、C#モニカのタグを入れたことはありません。 –

関連する問題