달력

02

« 2012/02 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  •  
  •  
  •  
2008/12/22 22:19

12. 속성 선언하기 General Web2008/12/22 22:19


이전 블로그(http://blog.naver.com/nashira7)에서 옮겨왔습니다.
작성일 : 2005년 7월 15일
옮긴일 : 2008년 12월 22일

지금까지 XML 문서 타입을 결정하는 DTD문서에 대해 살펴보았다.

정리하면 DTD는 XML 문서의 ELEMENT가 어떤 계층으로 되어 있고 그 엘리먼트가 포함하는 데이터 타입으로 어떤 것들이 올 수 있는지를 결정하는 것이었다.

 

그럼, 이제 속성이라는 것에 대해 살펴보고 선언하는 방법을 알아보도록 하겠다.

 

다음의 XML문서는 엘리먼트로만 이루어진 구조이다.

<BOOK>

   <TITLE></TITLE>

</BOOK>

 

하지만 아래의 구조는 속성이 포함된 경우이다.

<BOOK Binging="1994">

   <TITLE></TITLE>

</BOOK>

 

1. 속성 리스트의 선언 형태

<!ATTRIBUTE Name AttDefs>

Name : 속성에 연결된 엘리먼트의 타입 이름

AttDefs : 하나 혹은 그 이상의 속성 정의(Attribute definition)

 

속성 정의 형태 : Name AttType DefaultDecl

(Name : 속성이름, AttType : 속성에 지정될 수 있는 값의 종류인 속성타입(attribute type)

DefaultDecl : 디폴트 선언)

 

예) FILM 이라는 엘리먼트를 선언

<!ELEMENT FILM (TITLE, (STAR | NARRATOR | INSTRUCTOR))>

다음으로 FILM 엘리먼트에 두 개의 속성을 선언(Class와 Year)

<!ATTLIST FILM Class CDATA "fictional" Year CDATA ##REQUIRED>

 

결과

<?xml version="1.0"?>

<!DOCTYPE FILM

[

<!ELEMENT FILM (TITLE, (STAR | NARRATOR | INSTRUCTOR))>

<!ATTRIBUTE FILM Class CDATA "fictional" Year CDATA ##REQUIRED>

<!ELEMENT TITLE (#PCDATA)>

<!ELEMENT STAR (#PCDATA)>

<!ELEMENT NARRATOR (#PCDATA)>

<!ELEMENT INSTRUCTOR (#PCDATA)>

]

>

<FILM Year = "1984">

<TITLE>The morning After</TITLE>

<STAR>Morgen Attenbury</STAR>

 

2. 속성타입

1) 문자열 타입 - 따옴표로 둘러싸인 문자열로 지정

2) 토큰화된 타입 - 고유한 속성값이 선언되어야 한다. ID라는 키워드 사용

예1) ID

<?xml version="1.0"?>

<!DOCTYPE INVENTORY

[

<!ELEMENT INVENTORY (ITEM*)>

<!ELEMENT ITEM (#PCDATA)>

<!ATTLIST ITEM StockCode ID #REQUIRED>

]

>

<INVENTORY>

<ITEM StockCode = "S021">Peach Tee Pot</ITEM>

<ITEM StockCode = "S034">Electric Coffee Grinder</ITEM>

<ITEM StockCode = "S086">Candy Thermometer</ITEM>

</INVENTORY>

 

예2) IDREF

<!ELEMENT ITEM (#PCDATA)>

<!ATTLIST ITEM StockCode ID #REQUIRED GoesWith IDREF #IMPLIED>

You could then use this attribute to refer to another ITEM element, as shown here:

<ITEM StockCode="S034">Electric Coffee Grinder</ITEM>

<ITEM StockCode="S047" GoesWith="S034">Coffee Grinder Brush</ITEM>

 

예3) IDREFS

<ITEM StockCode="S047" GoesWith="S034 S039">Coffee Grinder Brush</ITEM>

 

예4) ENTITY

파싱되지 않은 데이터

<!ELEMENT IMAGE EMPTY>

<!ATTLIST IMAGE Source ENTITY #REQUIRED>

<IMAGE Source="LOGO" //>

 

예5) ENTITIES

여러개의 파싱되지 않은 데이터 타입 선언

<!ELEMENT IMAGE EMPTY>

<!ATTLIST IMAGE Source ENTITIES #REQUIRED>

<IMAGE Source="LOGO LogoBmp"//>

 

예6) NMTOKEN

<!ELEMENT BOOK (#PCDATA)>

<!ATTLIST BOOK ISBN NMTOKEN #REQUIRED>

<BOOK ISBN="9-99999-999-9">The Portrait of a Lady</BOOK>

 

예7) NMTOKENS

<!ELEMENT SHIRT (#PCDATA)>

<!ATTLIST SHIRT Codes NMTOKENS #REQUIRED>

<SHIRT Codes="38 21 97"></SHIRT>

 

3) 열거형 타입 - Class 속성의 값이 여러개 중의 하나를 가질 수 있도록 정의

Class 지정

<!ATTLIST FILM Class (finctional | instructional | documentary) "fictionsal">

Here's a complete XML document that shows the use of the Class attribute:

 

<?xml version="1.0">

<!DOCTYPE FILM

[

<!ELEMENT FILM (TItle, (STAR | NARRATOR | INSTRUCTOR))>

<!ATTLIST FILM Class (fictional | instructional | documentaty) "fictional">

<!ELEMENT TITLE (#PCDATA)>

<!ELEMENT STAR (#PCDATA)>

<!ELEMENT NARRATOR (#PCDATA)>

<!ELEMENT INSTRUCTOR (#PCDATA)>

]

>

<FILM Class="instructional">

<TITLE>The Use and Care of XML</TITLE>

<NARRATOR>Michael Young</NARRATOR>

</FILM>

Class에 다른 값을 지정하면 유효성 에러가 발생한다.

 

NOTATION 지정

<!ELEMENT EXAMPLE_DOCUMENT (#PCDATA)>

<!ATTLIST EXAMPLE_DOCUMENT Format NOTATION (HTML | SGML | RTF) #REQUIRED>

 

<EXAMPLE_DOCUMENT Format="HTML">

<![CDATA [

<html>

<head>

<title>Mike's Home Page</title>

</head>

<body>

<p>Welcome!</p>

</body>

</html>

]]

>

</EMAMPLE_DOCUMENT>

 

디폴트 선언

#REQUIRED - 모든 엘리먼트의 타입에 대해 연결될 속성의 값을 지정

#IMPLIED - 엘리먼트의 타입에 연결된 속성을 포함할 수도 있고, 생략할 수도 있다.

AttValue - 디폴트 속성

#FIXED AttValue - 고정할 때...

저작자 표시 비영리 변경 금지

'General Web' 카테고리의 다른 글

14. 외부 DTD 서브셋의 일부를 조건부로 무시하기  (0) 2008/12/22
13. 외부 DTD 만들기  (0) 2008/12/22
12. 속성 선언하기  (0) 2008/12/22
11. 엘리먼트 컨텐트 모델  (0) 2008/12/22
10. 엘리먼트 타입 선언하기  (0) 2008/12/22
9. DTD만들기  (0) 2008/12/22
TAG
Posted by -세티-