Content model이란 complex type에서 엘리먼트들을 표현하는데 있어서 어떠한 방법으로 표현 할 수 있을지에 대한 모델을 제공하는 것이다.
기본적으로는 :
<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: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"로 표현 될 수 있다는 뜻이다.