2017-04-20 1 views
0

는 다음 XML 유효성을 검사하도록 XSD 스키마를 작성하는 방법 : 이러한 유형의 모든 내 경우에는 준비가XML - 요소의 목록 고정 타입 - 적절한 스키마

<myElement> 
    <dogs> 
    <dog> .... </dog> 
    <dog> .... </dog> 
    .... 
    </dogs> 

    <cats> 
    <cat> .... </cat> 
    <cat> .... </cat> 
    .... 
    </cats> 

</myElement> 

, 나는 요소를 의미 : myElement, dog, cat의를 문제가있는 것은 catsdogs의 두 목록을 만드는 것입니다. 그것을하는 방법? 스키마에서

답변

0

, 당신은 이런 식으로 뭔가를 추가 할 수 있습니다

<xs:complexType name="catsType"> 
    <xs:sequence> 
     <xs:element ref="cat" minOccurs="1" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:element name="cats" type="catsType" /> 

이 컨텐츠는 하나 개 이상의 cat 요소의 순서임을 주장 catsType라는 이름의 복합 형식을 만듭니다. 다음에 그 유형의 이름이 cats 인 요소가 정의됩니다. 이 요소는 예를 들어 의 정의에서 참조 될 수 있습니다. 또는 선택한 이름으로 요소를 정의 할 수 있으며 해당 유형이 catsType임을 명시 할 수 있습니다.

<xs:element name="cats"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="cat" minOccurs="1" maxOccurs="unbounded" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

cats 요소 수 있습니다 지금 :

그것은 당신이 cats 요소의 외부를 다시 사용할 필요가없는 경우 그냥 괜찮 인라인 정의를 제공 할 수도 있습니다 이전처럼 사용 되겠지만 그 정의는 지역적이다.

당신이 결정한 것은 인라인이며, 어떤 정의 또는 요소가 여러 곳에서 발생하는지에 따라 달라지며, 또한 약간의 스타일 문제입니다. 중첩 정의를 너무 깊게하여 XML 스키마에서 "화살표"를 피하는 것을 선호합니다. 사용되는 곳과 별도로 항목을 정의하면 나중에 필요한 경우 나중에 더 쉽게 리팩토링 할 수 있습니다.