2012-01-11 2 views
0
이하

는 아래 시퀀스가있는 여러 요소 이름 만들기.

<?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> 요소 이름을 생성하려고 스키마이다 .... 서열 1로 시작하고 <rule1> , <rule2>, <rule3> 등 같은 다양한 규칙에 끝낼 수있는 여러 <rulex>을 갖는 샘플 XML이고 위의 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> 

하거나 하나는 단순히 부모 콜렉션 내에서 < 규칙 />의 인덱스를 사용할 수 있다고 할 수 있습니다.

+0

@Gardea, 고마워 ... 그 경우에는 내 XML 템플릿을 바꿀 것입니다. –