2012-01-11 15 views
0

配列1で始まり、それが<rule1> , <rule2>, <rule3>などのような多くのルールに終わることができ、複数の<rulex>を有するサンプルXML ....以下複数の要素名をシーケンスで作成する。以下

<?xml version="1.0" encoding="UTF-8"?> 
<AddressChange_181> 
    <rules> 
     <rule1> 
      <conditions>xya</conditions> 
      <response_path>abc</response_path> 
     </rule1> 
     <rule2> 
      <conditions>xxxx</conditions> 
      <response_path>aaaa</response_path> 
     </rule2> 
     <rule3> 
      <conditions>yyyyy</conditions> 
      <response_path>ffff</response_path> 
     </rule3> 
     <rule4> 
      <conditions>zzzz</conditions> 
      <response_path>yyyy</response_path> 
     </rule4> 
     <default> 
      <response_path>uuuuu</response_path> 
     </default> 
    </rules> 
</AddressChange_181> 

iは動的<rulex>要素名を作成しようとしたスキーマであります上記のxmlのために。 このスキーマからxmlを生成すると、上記のxmlと同じxmlフォーマットが得られません。 シーケンス番号で始まる複数の要素名を持つスキーマを作成する方法を教えてください。 私の要件は、xmlファイルに複数のルール(<rule1>,<rule2>,<rule3>など)を追加することです。このxmlファイルはスキーマに対して検証する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="mock_rule_list"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="rules" minOccurs="1" maxOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="rules"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="rule" minOccurs="0" maxOccurs="unbounded"/>   
     <xs:element ref="default" maxOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="rule">  
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:restriction base="xs:anyType"> 
     <xs:pattern value="rule/d{1,3}"></xs:pattern> 
     </xs:restriction> 
    </xs:simpleContent>  
     <xs:sequence> 
     <xs:element ref="conditions" minOccurs="1" maxOccurs="1"/> 
     <xs:element ref="response_path" minOccurs="1" maxOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 

    </xs:element> 

    <xs:element name="default"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="response_path"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="conditions" type="xs:string"> 
    </xs:element> 
    <xs:element name="response_path" type="xs:string"/> 
</xs:schema> 

おかげで、 マドゥ

答えて

1

ruleXタグの数を任意に定義されている場合はXSDを使用してこのような構造を定義する方法はありません。上限を制約することができ、ruleX命名規則に固執する必要がある場合は、ruleTypeなどの複合型を定義するよりも、その型のrule1、rule2、...、ruleN要素の束 - 私はこれを乱雑と呼ぶでしょう...私はこれをお勧めしません。 (6の最大付き)

XSDは:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="mock_rule_list"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="rules" minOccurs="1" maxOccurs="1"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="rules"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="rule1" minOccurs="0"/> 
       <xs:element ref="rule2" minOccurs="0"/> 
       <xs:element ref="rule3" minOccurs="0"/> 
       <xs:element ref="rule4" minOccurs="0"/> 
       <xs:element ref="rule5" minOccurs="0"/> 
       <xs:element ref="rule6" minOccurs="0"/> 
       <xs:element ref="default"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 


    <xs:complexType name="ruleType"> 
     <xs:sequence> 
      <xs:element ref="conditions" minOccurs="1" maxOccurs="1"/> 
      <xs:element ref="response_path" minOccurs="1" maxOccurs="1"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:element name="default"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="response_path"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="conditions" type="xs:string"> 
    </xs:element> 
    <xs:element name="response_path" type="xs:string"/> 

    <xs:element name="rule1" type="ruleType"/> 
    <xs:element name="rule2" type="ruleType"/> 
    <xs:element name="rule3" type="ruleType"/> 
    <xs:element name="rule4" type="ruleType"/> 
    <xs:element name="rule5" type="ruleType"/> 
    <xs:element name="rule6" type="ruleType"/> 
</xs:schema> 

また、あなたは@sequence属性で "ルール" という名前のタグを持つことができます。

XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="mock_rule_list"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="rules" minOccurs="1" maxOccurs="1"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="rules"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="rule" minOccurs="0" maxOccurs="unbounded"/> 
       <xs:element ref="default"/> 
      </xs:sequence> 
     </xs:complexType> 
     <xs:unique name="SequenceKey"> 
      <xs:selector xpath="rule"/> 
      <xs:field xpath="@sequence"/> 
     </xs:unique> 
    </xs:element> 

    <xs:complexType name="ruleType"> 
     <xs:sequence> 
      <xs:element ref="conditions" minOccurs="1" maxOccurs="1"/> 
      <xs:element ref="response_path" minOccurs="1" maxOccurs="1"/> 
     </xs:sequence> 
     <xs:attribute name="sequence" type="xs:int" use="required"/> 
    </xs:complexType> 

    <xs:element name="default"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="response_path"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="conditions" type="xs:string"> 
    </xs:element> 
    <xs:element name="response_path" type="xs:string"/> 

    <xs:element name="rule" type="ruleType"/> 
</xs:schema> 

サンプルXML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) --> 
<rules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <rule sequence="1"> 
     <conditions>conditions1</conditions> 
     <response_path>response_path1</response_path> 
    </rule> 
    <rule sequence="2"> 
     <conditions>conditions2</conditions> 
     <response_path>response_path2</response_path> 
    </rule> 
    <default> 
     <response_path>response_path1</response_path> 
    </default> 
</rules> 

それとも、また1が単に親コレクション内<ルール/>のインデックスを使用することができることである可能性があります。

+0

@Gardea、ありがとうございます...私はその場合、私のXMLテンプレートを変更します。 –

関連する問題