본문 바로가기

도구의발견

XML - Content model

Content model이란 complex type에서 엘리먼트들을 표현하는데 있어서 어떠한 방법으로 표현 할 수 있을지에 대한 모델을 제공하는 것이다.

기본적으로는 :

 <xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
   <xsd:element name="shipTo" type="USAddress"/>
   <xsd:element name="billTo" type="USAddress"/>
   <xsd:element ref="comment" minOccurs="0"/>
   <xsd:element name="items"  type="Items"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xs:date"/>
</xsd:complexType>

에서  <xsd:sequence> ... </xsd:sequence> 가 Content model을 나타내는 엘리먼트라고 하며, 그에 포함되어 있는 자식들을 일컬어 엘리먼트 그룹이라고 한다.

가장 먼저 sequence 엘리먼트에 대해 설명을 하자면 :

sequence엘리먼트는 그룹에 포함 되어 있는 자식 엘리먼트들을 minOccurs 와 maxOccurs 를 이용해 표현 될 수 있는 개수에 대한 제약을 걸 수 있다. 하지만 그룹에 포함되어 있는 엘리먼트들이 schema에 표시된 것과 동일한 순서로 xml 파일에서 표시 되어야 한다.

그 외에도 group, choice, all 과 같은 group 엘리먼트 들이 있다 :

  • group 엘리먼트는 엘리먼트 선언들을 하나의 complex type 선언으로 그룹화 할 수 있다.
  • choice 엘리먼트는 그룹에 포함되어 있는 자식 엘리먼트들 중 단 하나만이 표현 될 수 있도록 제한한다.

예를 간단하게 들자면 :

<xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
    <xsd:choice>
      <xsd:group   ref="shipAndBill"/>
      <xsd:element name="singleUSAddress" type="USAddress"/>
    </xsd:choice>
    <xsd:element ref="comment" minOccurs="0"/>
    <xsd:element name="items"  type="Items"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

<xsd:group id="shipAndBill">
  <xsd:sequence>
    <xsd:element name="shipTo" type="USAddress"/>
    <xsd:element name="billTo" type="USAddress"/>
  </xsd:sequence>
</xsd:group>

위의 예에서 chioce 그룹에서 표현 될 수 있는 것은 group인 로 묶여 있는 'shipTo 와 billTo' 이거나 'singleUSAddress' 둘 중에 하나여야만 한다.


all 엘리먼트는 다른 content-model의 최상위 레벨에 위치 해야만 한다. all 엘리먼트의 자식 엘리먼트들은 한번만 표현 되거나 아예 표현 되지 않을 수 있다. minOccurs 와 maxOccurs 로 예를 들어 설명을 하면 minOccurs="0" maxOccurs="1"로 표현 될 수 있다는 뜻이다.

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!