2023. 1. 17. 20:09ㆍJava
프로젝트 내 any01.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.pml.co.kr/pml"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns="http://www.pml.co.kr/pml">
<!-- any 엘리먼트
문서에 선언된 순서 상관없이 어떠한 엘리먼트가 와도 상관없습니다 해당 네임스페이스에
정의된 건 마음대로 순서상관없이 불러와도 상관없습니다
: 엘리먼트가 선언될 위치에 사용한다.
임의의 엘리먼트(일정한 순서에 상관없이 스키마 문서에 선언된 어떠한 엘리먼트)가 올 수 있다.
.속성
<any
maxOccurs=""
minOccurs=""
namespace="사용가능한 엘리먼트의 네임스페이스"
processContents = "유효성 검사 여부" // skip(유효성 검사x) | strict(반드시 유효성검사 한다) |
lax(스키마 정보를 얻을 수 있을 경우에만 유효성검사를 한다.)
-->
<!-- schema문서는 네임스페이스가 있는 문서가 됩니다 요 스키마문서는요
디폴트 xmlns네임스페이스가 http://www.pml.co.kr/pml -->
<!-- 루트 엘리먼트 -->
<xs:element name="출판사" type="publisher"/>
<xs:complexType name="publisher">
<xs:sequence>
<xs:element name="업체명" type="xs:string"/>
<xs:element name="전화번호" type="xs:string"/>
<xs:element name="주소" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!-- anyAttribute 엘리먼트
: 속성선언이 올수 있는 위치에 사용된다.
<anyAttribute
namespace = "사용가능한 속성의 네임스페이스"
processContents="유효성 검사 여부"
/>
-->
</xs:schema>
프로젝트 내 any02.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="도서리스트"/>
<xs:complexType name="책리스트">
<xs:sequence>
<xs:element name="책" type="책1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="책1">
<xs:sequence>
<xs:element name="제목" type="xs:string"/>
<xs:element name="저자" type="xs:string"/>
<xs:any namespace="http://www.pml.co.kr/pml"/>
<!-- 책의 타입은 책1으로 제목과저자가오고 any namespace에
기재된 이 네임스페이스중에 아무거나하나 올 수 있다 요 스키마 문서
를 통해 디자인탭에서 인스턴스를 하나 만들어 봅시다 schema
오른쪽버튼 generate sample xml files file name prefix
는 any02 -->
</xs:sequence>
</xs:complexType>
</xs:schema>
any02.xsd 파일에서 Design 탭에서
상자 안에 schema 를 오른쪽 마우스 버튼을 누르고
Generate Sample XML Files...
창이 팝업되면
File name prefix: 입력란에
any021
이라고 입력한다.
프로젝트 내 any021.xml
<?xml version="1.0" encoding="UTF-8"?>
<도서리스트 xmlns:pml="http://www.pml.co.kr/pml"
xsi:schemaLocation="http://www.pml.co.kr/pml file:/D:/javaddazua/test2/any01.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:/D:/javaddazua/test2/any02.xsd">
<!-- 위에서 보면 여기에는 네임스페이스가 있는 스키마 문서도 있고
noNamespaceSchemaLocation에서 네임스페이스가 없는 스키마 문서도 있다
위에서 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"는 표준
네임스페이스구요 http://www.pml.co.kr/pml은 사용자가 지정한 사용자 지정
네임스페이스입니다 근데 any02.xsd에 보면 elementformdefault 가 퀄리파이드이므로
태그부분에 항상 뭐가들어가야하죠? -->
<책>
<제목>java 기초</제목>
<저자>김말똥</저자>
<!-- 이 중에 아무거나 하나가 와도 된다는게 아니고 컴플렉스 타입 publisher
하나가 오면 된다 자식엘리먼트는 순서를 맞춰서 출판사타입이 온다
<pml:출판사>
<pml:업체명></pml:업체명>
<pml:전화번호></pml:전화번호>
<pml:주소></pml:주소>
</pml:출판사>
-->
<pml:출판사>
<pml:업체명>동아</pml:업체명>
<pml:전화번호>02-123-4564</pml:전화번호>
<pml:주소>서울 강남구</pml:주소>
</pml:출판사>
</책>
</도서리스트>
위 파일을 Validate 하면 Validation successful 이라고 뜬다
=====================================
도서리스트 태그, 책 태그, 제목 태그, 저자 태그를 정의한 xsd 문서는 xsi:noNamespaceSchemaLocation 과 연결된 것으로 볼 때
namespace 가 없기 때문에 접두어가 없는 듯 하다
======================================
elementFormDefault
Optional. The form for elements declared in the target namespace of this schema. The value must be "qualified" or "unqualified". Default is "unqualified". "unqualified" indicates that elements from the target namespace are not required to be qualified with the namespace prefix. "qualified" indicates that elements from the target namespace must be qualified with the namespace prefix
선택적. 이 스키마의 타깃 namespace에 선언된 엘리먼트들의 form. 값은 반드시 "한정된" 또는 "한정되지않은" 둘 중 하나여야만 한다. 기본은 "한정되지않은" 이다. "한정되지않은(unqualified)" 은 타깃 namespace에서 쓰인 엘리먼트들이 namespace 접두사를 함께 쓸 필요가 없다는 것을 가리킨다. "한정된(qualified)" 은 타깃 namespace에서 쓰인 엘리먼트들이 namespace 접두어와 함께 쓰여야만 한다는 것을 가리킨다.
'Java' 카테고리의 다른 글
Java XML - xsd 파일에서 attributeGroup (0) | 2023.01.17 |
---|---|
Java XML - xsd 파일에서 group (0) | 2023.01.17 |
Java XML - element 선언의 종류 (0) | 2023.01.17 |
Java XML annotation (0) | 2023.01.17 |
Java XML #PCDATA 출력 (0) | 2023.01.17 |