-
XML 스키마 ?
DTD (Document Type Definition)의 복잡성 해결을 위해 W3C에서 만들어 졌다.
- DTD와 같이 문서의 문법을 지정
- 각 구성요소의 내용에 대한 실제 데이터 형식들을 지정
- 다른 스키마로부터 문법을 상속받거나 스키마의 주석을 만듦
- 다중 Namespace와 함께 사용
- 간단하고 복잡한 데이터 형식들을 만듦
- 목록 형식(list type)을 만들거나 속성 그룹을 만듦
-
XML 스키마 작성하기
복합형(complex type) : 하위 구성요소 또는 속성들을 포함하는 구성요소
단순형(simple type) : 숫자, 문자열이나 날짜 등과 같은 단순한 데이터만 포함, 하위 구성요소를 포함하지 않는 구성요소
-
스키마의 구성요소
형식 |
설명 |
all |
그룹에 속한 구성 요소들이 아무 순서로 나타나는 것을 허용 |
annotation |
주석문을 생성 |
any |
주어진 Namespace의 구성요소가 sequence, choice에 나타나는 것을 허용 |
anyAttribute |
주어진 NS의 속성이 complexType , attributeGroup에 나타내는 것을 허용 |
appinfo |
annotation 내에서 응용 프로그램에서 사용되는 정보들을 지정 |
attribute |
속성을 만듦 |
attributeGroup |
속성 선언을 그룹으로 구성. 복합형 정의에 대한 그룹으로도 사용 가능 |
choice |
그룹에 포함된 구성요소들 중 하나만이 구성요소에 나타나도록 함 |
complexContent |
복합형 구성요소에 대한 확장 또는 제한 조건을 포함 |
complexType |
복합형을 정의하며 속성과 구성요소 내용을 지원한다 |
documentation |
annotation 내에 사용자가 읽거나 사용 가능한 텍스트를 저장 |
element |
구성요소를 만듦 |
extension |
단순형 또는 복합형을 확장시킴 |
field |
상수(unique, key, keyref)를 정의하려고 값을 지정하는 XPath현식 가리킴 |
group |
구성요소 선언문 집합을 그룹으로 만들어, 복합형 정의에 그룹으로 합침. |
import |
스키마에서 참조하는 스키마 컴포넌트의 NS를 가져옴 |
include |
스키마의 targetNamespace에 스키마 문서를 포함 |
key |
속성 또는 구성요소의 값이 반드시 key이어야 함을 가리킴 |
keyref |
속성 또는 구성요소가 주어진 키 또는 고유 값에 해당됨을 가리킴 |
list |
simpleType 구성요소를 주어진 데이터 형식의 값에 대한 목록으로 정의 |
notation |
XML문서 내에 비-XML 데이터 형식을 나타내는 notation 정의를 포함 |
redefine |
단순형, 복합형, 그룹 등을 현재 스키마에서 재정의 |
restriction |
데이터 형식 등의 제한 조건을 정의 |
schema |
스키마 정의를 포함 |
selector |
unique, key, keyref 구성요소의 ID 제한 조건에 대해 구성요소 집합을 선택하는 XPath 표현식을 나타냄 |
sequence |
구성요소 내에서 주어진 순서대로 그룹의 구성요소들이 나타나도록 함 |
simpleContent |
단순형 구성요소에 대한 확장 또는 제한 조건을 포함 |
simpleType |
단순형을 정의 |
union |
simpleType 구성요소를 주어진 단순 데이터 형식 값들의 집합으로 정의 |
unique |
속성 또는 구성요소 값이 반드시 고유해야 함 |
-
형식과 구성요소 선언하기
[XML 스키마에 내장되어 있는 단순형 구성요소]
XML 스키마와 DTD의 호환성을 유지하려면 속성을 사용할 때 ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS 등 단순형만을 사용
-
구성요소들이 나타나는 빈도 지정하기
minOccurs는 최소 빈도수를 나타내고, maxOccurs는 최대 빈도수를 나타낸다.
-
구성요소의 기본값 지정하기
- fixed : 고정 값. 반드시 무조건 고정 값 사용
<xsd:element name="maxTrials" type="xsd:integer" fixed="100"/> |
- default : 기본 값. 실제 문서 적용 시 기본값이 아닌 문서에 지정해놓은 값이 사용
<xsd:element name="maxTrials" type="xsd:integer" default="100"/> |
-
속성의 제한조건과 기본값 지정하기
- 속성은 반드시 단순형(simple type)이어야 한다.
- 기껏해야 한 번 나타날 수 있으므로 minOccurs와 maxOccurs속성을 사용하지 않는다.
- 속성은 <xsd:attribute> 구성요소에서 선언한다.
*use속성
속성을 (필수조건/선택조건)으로 할 것인지를 지정, 속성의 값을 (고정 값/기본 값)을 지정할 것인지 등을 지정할 때 사용
*value속성
필요한 값을 지정할 때 사용
[use 속성에 사용 할 수 있는 값들의 목록]
Required |
속성이 반드시 필요하며 어떤 값을 가질 수 있다 |
Optional |
속성을 생략할 수 있으며 어떤 값을 가질 수 있다 |
Filxed |
속성을 고정시키며 그 값은 value 속성에 지정한다 |
Default |
속성이 나타나지 않는다면 value 속성의 값을 기본값으로 사용한다 |
Prohibited |
속성이 나타나서는 안된다 |
<xsd:attribute name="counter" type="xsd:int" use="fixed" value="400"> |
>> counter라는 이름으로 항상 400이라는 값을 갖는 정수형 속성을 선언
-
단순형 만들기
catalogID는 XML 스키마 규격에 내장되어 있지 않은 단순형이지만, simpleType을 사용하여 정의
단순형의 속성을 세부적으로 정의하려면 XML 스키마의 파셋(facet)을 사용한다.
단순형에서는 텍스트를 표시하기 위한 pattern 파셋을 사용하여 정규 표현식"\d{3}-\d{4}-\d{3}"을 지정해 주어야 한다.
-
파셋을 사용하여 단순형 만들기
dayOfMonth라는 단순형을 만들고 minInclusive와 maxInclusive의 두 가지 파셋을 사용하여 1부터31까지라고 세부적으로 정의
[단순형과 적용 가능한 파셋들]
[순서 배열이 가능한 단순형과 적용 가능한 파셋들]
-
익명(anonymous)의 형식 정의 사용하기
익명의 형식 정의를 사용하면 한 번만 참조하게 되는 형식을 새로 정의하지 않아도 된다.
이제 이름을 부여한 별도의 복합형을 전혀 정의하지 않아도 book 구성요소 내에 원하는 구성요소를 추가할 수 있다
-
빈 구성요소 만들기
빈(empty) 구성요소는 내용을 갖지 않지만 속성을 가질 수 있다
이 때 복합형을 선언하는 <complexContent> 요소를 사용한다
-
혼합-내용 구성요소 만들기
텍스트와 다른 구성 요소를 포함하는 혼합-내용의 구성요소를 스키마와 DTD에서 모두 만들 수 있다.
복합 내용을 처리할 수 있도록 하기 위해 <complexType> 구성요소의 mixed 속성에 "true"를 지정해야 한다.
-
주석문 스키마
스키마에서는 주석문(annotating)을 추가하기 위해 <annotation>, <documentation>, <appInfo> 새로운 구성 요소를 정의해야 한다
<annotation>구성요소는 <documentation>과 <appInfo>를 포함하는 상위 구성 요소이다.
-
선택 만들기
선택 기능에서는 여러 개의 구성요소를 지정하고, 그 중 하나만을 선택하도록 한다.
<xsd:choice> <xsd:element name="books" type="books"/> <xsd:element ref="book"/> <xsd:choice> |
한 권을 빌리거나 여러 권을 빌리거나 선택할 수 있는 구성요소
-
구성요소의 그룹 만들기
bookAndMagazine이라는 새로운 그룹을 만들어서 다른 곳에서 참조할 수 있다.
속성 그룹도 똑 같은 방법으로 만들 수 있다.
-
all 그룹 만들기
- all그룹의 자식들은 모두 개별적인 구성요소 이어야 한다. 절대 그룹을 포함 할 수 없다.
- minOccurs와 maxOccurs의 값으로 0과 1만을 허용한다.
transactionType을 all 그룹으로 변경
- 이 형식의 요소들은 최대한 한 번까지만 나타날 수 있다.
- 추가적으로 구성요소를 선언 할 수 없다.
P.S 근데 저도 잘 모르는 게 왜 XML에 선택 구문을 만들어야하죠 ?
Book, books, magazine 만 xml에 분류해놓고 xml불러와서 사용하는 코드에서 조정해주는 것 아닌가요?ㅜㅜ
고수님들 답변부탁드려요
'옛글 > Database이야기' 카테고리의 다른 글
데이터 베이스에 대한 이야기 - 첫번째 시간 (0) | 2010.10.28 |
---|---|
MS SQL 2008 설치 과정 )상세( (8) | 2010.10.28 |
(XML)javascript 이해하기 (0) | 2010.10.28 |
잘 구성된 XML 문서 만들기 (2) | 2010.10.28 |
(XML)DTD: 엔티티와 속성 (0) | 2010.07.27 |