복합 유형

스키마 및 XML 문서에서 혼합 컨텐츠를 사용할 수 있습니다.

스키마 및 XML 문서의 혼합 컨텐츠

다음 예제에서는 스키마 및 XML 문서에서 혼합 컨텐츠를 사용하는 방법을 보여줍니다. 스키마에는 int 유형의 요소와 string 유형의 요소가 포함되어 있습니다.

스키마는 다음과 같습니다.

<element name="observation">
    <complexType mixed="true">
       <sequence>
          <element name="temperature" type="int">
          <element name="city" type="string">
       </sequence>
    ...
    </complexType>
</element>

다음은 XML 문서에서 발췌한 것입니다.

<observation>
It is <temperature>10</temperature>degrees in <city>London</city>.
</observation>

XOM 표시는 다음과 같습니다.

class Observation extends IlrXmlObject
{
   int temperature;
   String city;
   String content;
}

관측 요소의 컨텐츠가 모든 문자열을 연결하는 단일 String으로 변환되고 content라는 특수 속성에 추가됩니다.

복합 유형 맵핑

다음 표에서는 스키마 및 동적 모델 간의 몇 가지 복합 유형 맵핑을 보여줍니다.

표 1. 표준 복합 유형 맵핑
케이스 스키마 동적 모델
단항 컴포넌트의 로컬 복합 유형이 있는 요소
<element name=”e1”>
  <complexType>
    <sequence>
     <element name=”e2” type=”t2”/>
     <element name=”e3” type=”t3”/>
    </sequence>
    <attribute name=”a1” type=”t4”/>
  </complexType>
</element>
class E1 extends IlrXmlObject
{
  [map(t2)] e2;
  [map(t3)] e3;
  [map(t4)] a1;
}
E1 e1;
단항 컴포넌트의 로컬 복합 유형이 있는 요소
<element name=”e1”>
  <complexType>
   <sequence>
    <element name=”e2” type=”t2”
              maxOccurs=”unbounded”/>
    <element name=”e3” type=”t3”
              minOccurs=”2” />
   </sequence>
  </complexType>
</element>
class E1 extends IlrXmlObject
{
  // collection of [map(t2)]
  Vector e2List;
  // collection of [map(t3)]
  Vector e3List;
}
E1 e1;
유형 요소
<complexType name=”t1”>
 <sequence>
   <element name=”e2” type=”t2”/>
   <element name=”e3” type=”t3”/>
 </sequence>
</complexType>
<element name=”e1” type=”t1” />
class T1 extends IlrXmlObject
{
  [map(t2)] e2;
  [map(t3)] e3;
}
T1 e1;
콜렉션 그룹의 유형 요소
<complexType name=”t1”>
 <sequence maxOccurs=”1001”>
   <element name=”e2” type=”t2”/>
   <element name=”e3” type=”t3”/>
 </sequence>
</complexType>
<element name=”e1” type=”t1” />
class T1 extends IlrXmlObject
{
  // collection of [map(t2)]
  Vector e2List;
 // collection of [map(t3)]
  Vector e3List;
}
T1 e1;
로컬 복합 유형: 내부 클래스가 허용되는 경우
<complexType name=”t1”>
  <sequence>
    <element name=”e1”>
      <complexType>
      …
      </complexType>
  </complexType>
</element>
class T1 extends IlrXmlObject
{
   class E1 extends IlrXmlObject
   {
       … 
    }
    E1 e1;
}
로컬 복합 유형: 내부 클래스가 허용되는 않는 경우
<complexType name=”t1”>
  <sequence>
    <element name=”e1”>
      <complexType>
      …
      </complexType>
  </complexType>
</element>
Class E1 extends IlrXmlObject
{
}
class T1 extends IlrXmlObject
{
    E1 e1;
}

단순 컨텐츠 맵핑

다음 표에서는 스키마 및 동적 모델 간의 몇 가지 단순 컨텐츠 맵핑을 보여줍니다.

표 2. 단순 컨텐츠 맵핑
케이스 스키마 동적 모델
단순 컨텐츠가 있는 복합 유형
<simpleType name=”st0” >
…
</simpleType>
<complexType name=”ct0”>
 <simpleContent>
  <extension base=”st0”> 
   <attribute name=”a1” type=”st1” />
  </extension>
 <simpleContent>
</complexType>
class Ct0 extends IlrXmlObject
{
  [map(st0)] content;
  [map(st1)] a1;
}
단순 컨텐츠가 있는 복합 유형의 확장기능에서 상속된 복합 유형
<complexType name=”ct0” >
  <simpleContent>
  …
  <simpleContent>
</complexType>
<complexType name=”ct1”>
 <simpleContent>
  <extension base=”ct0”> 
   <attribute name=”a1” type=”st1” />
  </extension>
 </simpleContent>
</complexType>
class Ct0 extends IlrXmlObject
{
  [map(st0)] content;
  …
}
class Ct1 extends Ct0
{
  [map(st0)] content;
  [map(st1)] a1;
  …
}
단순 컨텐츠가 있는 복합 유형의 제한사항에서 상속된 복합 유형
<complexType name=”ct0” >
  <simpleContent>
  …
  <simpleContent>
</complexType>
<complexType name=”ct1”>
 <simpleContent>
  <restriction base=”ct0”> 
   <attribute name=”a1” type=”st1” />
  </restriction>
 <simpleContent>
</complexType>
class Ct0 extends IlrXmlObject
{
  [map(st0)] content;
  …
}
class Ct1 extends Ct0
{
}

복합 컨텐츠 맵핑

다음 표에서는 스키마 및 동적 모델 간의 몇 가지 복합 컨텐츠 맵핑을 보여줍니다.

표 3. 복합 컨텐츠 맵핑
케이스 스키마 동적 모델
확장기능에서 상속된 복합 유형
<complexType name=”ct0”>
   <attribute name=”a1” type=”st1” />
</complexType>
<complexType name=”ct0”>
 <complexContent>
  <extension base=”ct0”> 
   <attribute name=”a2” type=”st2” />
  </extension>
 <complexContent>
</complexType>
class Ct0 extends IlrXmlObject
{
  [map(st1)] a1;
}
class Ct1 extends Ct0
{
  [map(st2)] a2;
}
제한사항에서 상속된 복합 유형
<complexType name=”ct0”>
   <attribute name=”a1” type=”st1” />
</complexType>
<complexType name=”ct0”>
 <complexContent>
  <restriction base=”ct0”> 
   <attribute name=”a1” type=”st2” />
  </restriction>
 <complexContent>
</complexType>
class Ct0 extends IlrXmlObject
{
  [map(st1)] a1;
}
class Ct1 extends Ct0
{
}
확장기능에서 상속된 혼합 컨텐츠가 있는 복합 유형
<complexType name=”ct0” >
  <simpleContent>
  …
  </simpleContent>
</complexType>
<complexType name=”ct0”>
 <complexContent mixed=”true”>
  <extension base=”st0”> 
   <attribute name=”a1” type=”st1” />
  </extension>
 <simpleContent>
</complexType>
class Ct0 extends IlrXmlObject
{
  [map(st0)] content;
}
class Ct1 extends Ct0
{
  [map(st1)] a1;
}