스키마 및 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;
}
|