Java XML complexType 의 확장과 제한
2023. 1. 16. 17:26ㆍJava
프로젝트 내 complex03.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- complexType 의 확장(추가)과 제한(넓->좁)(넓은의미에서->좁은의미로)
콤플렉스 타입은 다른 콤플렉스 타입을 확장 및 제한 할 수 있다.(상속의 개념)
extends, 재사용성 기능도 포함되어 있다.
확장: base속성에 명시된 타입, 즉, 콤플렉스 타입에 속성을 추가하거나, 엘리먼트를
추가하는 것을 의미. 기반이 되는 콤플렉스 타입에다가 속성을 추가한다던지
엘리먼트를 추가
한다던지를 의미합니다.
제한: base속성에 명시된 타입, 즉, 콤플렉스 타입에 속성값의 범위를 제한하거나,
엘리먼트 일부를 제거하는 것을 의미
-->
<xs:element name="도서리스트" type="UserBooklist"/>
<xs:complexType name="UserBooklist">
<!--UserBooklist가 자식을 가질수있도록 컴플렉스타입으로,그러면시퀀스필요-->
<xs:sequence>
<!--<xs:element name="책" maxOccurs="unbounded" type="UserBook"/>-->
<!-- sch_complex03.xml으로 가 보면 -->
<xs:element name="책" maxOccurs="unbounded" type="UserBook2"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="UserBook">
<xs:sequence>
<xs:element name="제목" type="xs:string"/>
<xs:element name="가격" type="xs:int"/>
<!--add element-->
<xs:element name="저자" type="xs:string"/>
<xs:element name="출판사" type="xs:string"/>
</xs:sequence>
<!--두가지속성더넣기-->
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="분류" type="xs:string"/>
</xs:complexType>
<xs:complexType name="UserBook2">
<xs:complexContent>
<xs:restriction base="UserBook">
<xs:sequence>
<xs:element name="제목" type="xs:string"/>
<!--가격에 대한 엘리먼트를 범위를 축소시켜보겠다-->
<!--새롭게 엘리먼트만들어서봐야한다-->
<!-- 가격 엘리먼트에 대한 제한 -->
<xs:element name="가격">
<!-- 데이타와속성을동시에 갖는다 그래서 -->
<xs:simpleType>
<!-- simpleType에 대한 restriction을 이용해서
밑에는 가격에 대한 제한이 일어났다 범위가 좁아졌다 예전의 int보다 -->
<xs:restriction base="xs:int">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="저자" type="xs:string"/>
<xs:element name="출판사" type="xs:string"/>
</xs:sequence>
<!--sequence다음에는 속성이나온다-->
<xs:attribute name="id" type="xs:ID"/>
<!-- 분류 제한 -->
<xs:attribute name="분류">
<!--제한을할땐여러개를못넣으니simpletype으로해야한다-->
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- enumeration해당열거형,열거한거 중에 암거나 선택해도 된다 -->
<xs:enumeration value="컴퓨터"/>
<xs:enumeration value="소설"/>
<xs:enumeration value="역사"/>
<!-- 분류에 대한 제약을 3가지로 제한시켜버리다 -->
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<!--속성에대한제한도가능-->
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<!-- 컴플렉스 타입에서 자식이 생기면 그것은 complex content가 된다 -->
<!-- 유저북이라는놈을확장해서적용해보자 확장하기위해 컴플렉스타입을만들어야한다 -->
<!-- 컴플렉스 컨텐트의 확장 유저북베이스타입-->
<!-- 위두줄은 UserBook이라는 엘리먼트에다가 새롭게 엘리먼트
2개를 추가시켰다는 의미다 -->
<!--여기에 속성을 추가시키겠다면은 attribute다음에추가시키면된다-->
<!--
<xs:complexType name="UserBook2">
<xs:complexContent>
<xs:extension base="UserBook">
<xs:sequence>
<xs:element name="저자" type="xs:string"/>
<xs:element name="출판사" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="분류" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
-->
<!--디자인탭가서 schema 인스턴스 하나 만들기 스키마에 오른쪽버튼눌러
generate sample xml files 해놓고 파일이름접두어를 sch_complex03으로했다-->
<!--
해당타입은 컴플렉스타입으로 서로 참조하는 형태로 됐습니다
-->
<xs:complexType name="UserPrice">
<!--동시에 가격을 갖고 있기 때문에 심플컨텐트로 선언해줘야 해요
데이타와 속성을 동시에 갖으면 심플컨텐트를 사용한다.-->
<xs:simpleContent>
<xs:extension base="xs:int"><!--int가 데이타에 해당-->
<!-- 바로 밑줄이 속성에 해당 -->
<xs:attribute name="단위" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- UserPrice 확장 (complexType을 확장하겠다는 의미) 그럼
위의 가격이라는 엘리먼트로 가서 요놈UserPrice를참조하자는거죠 -->
<!--요complexType도 데이타와 속성을 같이 갖게 되는거죠-->
<!-- UserPrice는 컴플렉스타입인데 요놈을 확장하겠다는 거죠
요놈을기반으로확장하겠다 새로운 속성을 추가하겠다-->
<!-- 여기선 attribute를 추가해주겠다 -->
<!--
<xs:complexType name="UserPrice2">
<xs:simpleContent>
<xs:extension base="UserPrice">
<xs:attribute name="중고" type="xs:boolean" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
-->
<xs:complexType name="UserPrice2">
<xs:simpleContent>
<xs:restriction base="UserPrice">
<!-- xs:int가나와서 요 데이타에 대한 제한이 되겠다 -->
<xs:minInclusive value="10000"/>
<xs:maxInclusive value="100000"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
프로젝트 내 sch_complex031.xml
<?xml version="1.0" encoding="UTF-8"?>
<도서리스트 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:/D:/javaddazua/test/complex03.xsd">
<책 id="b1" 분류="소설"><!--분류="수필"오류-->
<제목>
삼국지
</제목>
<가격>10000</가격>
<!--유저프라이스2에는 단위가없다. 유저프라이스1에 단위가 있다-->
<!--<가격 단위="달러">10000</가격>--><!-- 여기서 속성은 단위이고, 내용이나데이타
는 10000 이 된다.이런형태를 심플컨텐트라고 한다. 이러한엘리먼트에대해서
확장이었고, 확장은 속성을 추가한다는정도이다. -->
<!--
<가격 중고="true" 단위="원">10000</가격>
-->
<저자>김말똥</저자>
<출판사>강남출판사</출판사><!--이런게 컴플렉스컨텐트에 대한 확장이다 컴플렉스 컨텐트와 심플컨텐트는 서로대비된다 -->
</책>
<!--
<책>
<제목>
Java basic
</제목>
<가격 중고="false" 단위="원">20000</가격>
</책>
-->
</도서리스트>
'Java' 카테고리의 다른 글
Java XML nillable (0) | 2023.01.16 |
---|---|
Java XML global 속성 선언과 local 속성 선언 (0) | 2023.01.16 |
Java XML simpleContent (0) | 2023.01.16 |
Java XML <xsd:complexType> (0) | 2023.01.16 |
Java XML 외부 일반 unparsed entity (0) | 2023.01.16 |