質問

以下は、複数のサンプルXMLです <rulex> それはシーケンス1から始まり、そのような多くのルールに終わる可能性があります <rule1> , <rule2>, <rule3> 等....

<?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>

以下は、ダイナミックを作成しようとしたスキーマです <rulex> 上記のXMLの要素名。このスキーマからXMLを生成すると、上記のXMLと同じXML形式は取得されません。シーケンス番号から始まる複数の要素名を持つスキーマを作成する方法を教えてください。私の要件は、複数のルールを追加することです(<rule1>,<rule2>,<rule3> など...)XMLファイルで、この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>

ありがとう、マドゥ

役に立ちましたか?

解決

Rulexタグの数が任意に定義されている場合、XSDを使用してそのような構造を定義する方法はありません。上限を最大値に制限できる場合、Rulex naming Conventionに本当に固執する必要があります。ルールタイプなどの複雑なタイプを定義できます。 - 私はこれを乱雑と呼びます...私はこれをお勧めしません。

XSD(最大6):

<?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>

または、単にのインデックスを単に使用できる可能性もありますu003Crule/>親コレクション内。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top