expat¸¦ ÀÌ¿ëÇÑ xml µ¥ÀÌÅÍó¸® - C
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

<!> ¾ÆÁÖ ¿¹Àü ¹®¼­¶ó¼­.. .. ¾÷µ¥ÀÕÀº Á» ±ÍÂú°í.

¸¸µç³¯ 2004/01/30 http://www.joinc.co.kr/images/myavata/2.gif
°ü¸®ÀÚ yundream
ȨÆäÀÌÁö http://www.joinc.co.kr
À̸ÞÀÏ Myundream_at_joinc.co.kr

Contents

1 ±³Á¤ °úÁ¤
2 Åä·Ð¹× Àâ´ã
2.1 ÇØ¾ßÇÒ °Íµé
2.2 expat ¿¡¼­ÀÇ ÇÑ±Û Ã³¸®
2.2.1 iconv¸¦ ÀÌ¿ëÇÑ utfÀÎÄÚµù ¹× µðÄÚµù
2.2.2 QTstringÀ» ÀÌ¿ëÇÑ utfÀÎÄÚµù ¹× µðÄÚµù
3 ¼Ò°³
4 XML¿¡ ´ëÇØ¼­
4.1 XML À̶õ ¹«¾ùÀΰ¡
4.1.1 HTML
4.1.2 SGML
4.1.3 XML
5 XML ½ºÆÑ
5.1 XML ¹®¼­ Æ÷¸Ë
5.1.1 Well-Formed XML
5.2 XML DTD
5.3 ¾îÆ®¸®ºäÆ® ¼±¾ð(Attribute Declarations)
5.4 ¿£Æ¼Æ¼ ¼±¾ð(Entity Declarations)
5.5 ÁÖ¼®
5.6 CDATA ¼½¼Ç(CDATA Section)
6 ½ÇÀü : XML DTD¿Í ÀνºÅϽº »ý¼º
6.1 DTD »ý¼º
6.1.1 ¿¤¸®¸ÕÆ®ÀÇ Á¤ÀÇ
6.1.2 ¿¤¸®¸ÕÆ®ÀÇ ¾îÆ®¸®ºäÆ® Á¤ÀÇ
6.2 DTD Àû¿ëÀ» ¸¶Ä£ XML ÀνºÅϽº
7 expat¸¦ ÀÌ¿ëÇÑ XML Á¦¾î
7.1 °£´Ü ¿¹Á¦
8 Âü°í¹®Çå


1 ±³Á¤ °úÁ¤

  1. ¾ÆÁ÷ ÃʾȴܰèÀ̹ǷΠ¿ë¾îÅëÀϵîÀÌ ÀÌ·ç¾îÁöÁø ¾Ê¾Ò½À´Ï´Ù.

2 Åä·Ð¹× Àâ´ã

  1. À̱ÛÀÇ ¸¹Àº ³»¿ëÀº http://dblab.comeng.chungnam.ac.kr/~dolphin/xml/atoz/xml-9710/xml-9710.html XML (eXtensible Markup Language) Introduction]À» Âü°íÇϰí ÀÖ½À´Ï´Ù.
  2. Âü°íÇÒ ³»¿ëµé
 1. Introduction to XML   
   XML Fundamental Course 
   What is mean XML 
   HTML vs XML 
   Where is Used XML 
   Goals of XML 
   The XML Core  
  
 2. XML BasicMarkup Syntax  
   Characters, Elements 
   The Structure of XML Data 
   The Document Element 
   Special-purpose Markup 
  
 3. XML Namespace  
   What is an XML Namespace 
   XML Namespace in prefix 
   Qualified Names 
   UnQualified Names 
   Declaring Namespace 
   Namespace & Attributes 
   Why Use Namespace 
   MisUnderstanding 
  
 4. Well-formed XML  
   Tag and Text and elements,  
   Rules for Elements 
   What is mean Well-formed XML 
  
 5. Document Type Definitions  
   What is mean Validation 
   Why Validate XML 
   DTD 
   DTD Structure 
   Basic DTD Declaration 
   Entities 
   Standalone 
  
 6. XML SchemaSchema  
   Advantages of XML Schema 
   Use XML Syntax 
   Stronger Support for Content Model 
   Benefits of XML Schemas 
   Basic XML Schemas 
  
 7. Handling XML Data  
   Metadata and XML Processing 
   What is mean XSL 
   What is mean XSLT 
   What is mean XPath 
   What is mean XQuery 
   What is mean DOM 
  
 8. Advanced XPath   
   Introduction to XPath 
   What is mean XPath 
   Why use XPath 
   XPath Structure 
   How XPath works 
   XPath Basics 
  
 9. Advanced XSLT   
   What is mean XSL 
   XSLT 
   XPath Expressions 
   XSLT Fundamentals 
  
 10. Document Object Model  
   What is mean DOM 
   Why Use the DOM 
   XML Object Model 
   XML DOM 
   DOM Implementations 
  
 11. XML Web Services  
   Web Service 
   SOAP 
   WSDL 
   UDDI 
 

2.1 ÇØ¾ßÇÒ °Íµé

  1. ¿ë¾îÅëÀÏ
  2. expat ±ò²û ÇÑ±Û Ã³¸®
  3. ±ò²û ÇѱÛó¸® ¿Ï¼ºµÇ¸é RSS ¸®´õ±â ÀÛ¼º : wxPython°ú QTÁß ¼±ÅÃ
    1. QTÀÇ °æ¿ì ÀÚüÀûÀ¸·Î xml Ŭ·¡½º¸¦ Á¦°øÇϰí ÀÖÀ¸¸ç, UTF8À» ó¸®ÇÑ´Ù.
  4. DSSL ÀÀ¿ë : docbook »çÀÌÆ®¿¡ ÁÁÀº ¹®¼­ ¸¹À½
  5. DSSL Âü°í¹®Çå : http://www.prescod.net/dsssl

2.2 expat ¿¡¼­ÀÇ ÇÑ±Û Ã³¸®

expat¿¡¼­ ÇѱÛ(euc-kr)À» ó¸®Çϱâ À§Çؼ­´Â ´ÙÀ½°ú °°Àº 2°¡Áö ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù.
  • euc-kr ÀÎÄÚµù ÀÎ½Ä ¹®Á¦ : euc-kr ÀÎÄÚµùÀÌ ³ª¿Ã °æ¿ì ÀνÄÇÒ ¼ö ¾ø´Â ÀÎÄÚµù ŸÀÔÀ¸·Î ÇØ¼® ÇØ¼­ ¿¡·¯¸¦ ¸®ÅÏÇØ ¹ö¸°´Ù. expat¿¡¼­ UnknownEncoding°ü·Ã ÇÔ¼ö¸¦ »ìÆìº¸±ä ÇßÁö¸¸ Á¦´ë·Î ´ëÀÀµÇÁö ¸øÇÏ´Â °Í °°¾Æ¼­ expat ¼Ò½º¸¦ ¼öÁ¤Çß´Ù. ¼öÁ¤ÇÑ expat¹öÁ¯Àº 1.95.7ÀÌ´Ù.
xmltok.c 
========= 
  UTF_16_ENC, 
  UTF_16BE_ENC, 
  UTF_16LE_ENC,   // 1420 line 
+  EUC_KR,    
  /* must match encodingNames up to here */ 
  NO_ENC 
}; 
 
static const char KW_UTF_16LE[] = {  // 1448 line 
  ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, 
  '\0' 
}; 
+ static const char KW_EUC_KR[]= { 
+   ASCII_E, ASCII_U, ASCII_C, ASCII_MINUS, ASCII_K, ASCII_R, '\0' 
+ }; 
 
2.2.1 iconv¸¦ ÀÌ¿ëÇÑ utfÀÎÄÚµù ¹× µðÄÚµù
  • À§ÀÇ ÄÚµå ¼öÁ¤À¸·Î xml encoding¹®Á¦´Â ÇØ°áµÇ¾ú´Ù. µÎ¹øÂ° ¹®Á¦´Â xmlµ¥ÀÌÅÍ Áß ÇѱÛÀÌ Æ÷ÇԵǾî ÀÖÀ» ÆÄ½ÌÀ» Á¦´ë·Î ¸øÇϰí Á¾·¡ÇØ ¹ö¸®´Â ¹®Á¦´Ù. ÀÌ ¹®Á¦´Â iconv¸¦ ÀÌ¿ëÇØ¼­ expat°¡ Àνİ¡´ÉÇÑ ¹®ÀÚ¿­·Î º¯°æ½ÃŰ´Â °ÍÀ¸·Î ÇØ°á Çß´Ù. ´ÙÀ½Àº ´ë·«ÀûÀÎ ÄÚµå·Î euc-kr, ÇѱÛÀνºÅϽº ¹®¼­µµ Á¦´ë·Î ÆÄ½ÌÇÑ´Ù. º»¹® ¿¹Á¦ÀÇ ¼öÁ¤ÆÇÀ¸·Î ¿Ï¼ºµÇ´Â ´ë·Î º»¹®¿¹Á¦¸¦ ±³Ã¼ÇÒ °ÍÀÌ´Ù. iconv()ºÎºÐÀº ÇÔ¼öÈ­ ½ÃÄѼ­ °£´ÜÈ÷ »ç¿ë°¡´É Çϵµ·Ï ¼öÁ¤ÇÒ »ý°¢ÀÌ´Ù.
#include <stdio.h> 
#include <expat.h> 
#include <stdio.h> 
#include <string.h> 
#include <iconv.h> 
#include <errno.h> 
 
#define ICONV_DONE() (r>=0) 
#define ICONV_INVAL() (r<0) && (errno==EILSEQ) 
#define ICONV_OVER() (r<0) && (errno==E2BIG) 
#define ICONV_TRUNC() (r<0) && (errno==EINVAL) 
 
char ibuf[BUFSIZ]; 
char obuf[BUFSIZ]; 
 
 
int Depth = 0; 
int is_value = 0; 
 
const char *current_el;   // °¡Àå ÃÖ±Ù ÅÂ±× ±â¾ï¿ë 
const char **current_id;  // ű×ÀÇ Æ¯¼º°ª ±â¾ï¿ë 
 
int  user_num = 0;   // ¸î°³ÀÇ ·¹Äڵ尡 ÀúÀåµÇ¾ú´ÂÁö °Ë»ç  
 
// xml (űװ¡ ¾Æ´Ñ) µ¥ÀÌÅ͸¦ ¸¸³µÀ» ¶§ È£ÃâµÈ´Ù. 
void parser(void *data, const char *s, int len) 
{ 
    int i = 0;  
    int index =  0;     
    char buf[1024] = {0x00, }; 
    char obuf[1024] = {0x00, }; 
 
    iconv_t cd; 
    char *ip, *op; 
    int ileft, oleft; 
    // °³Çà,Åǹ®ÀÚ Á¦°Å 
    for (i = 0; i < len; i++) 
    { 
        if (s[i] != '\n' && s[i] != '\t' && i < len) 
        { 
            buf[index] = s[i];  
            index++; 
        } 
    } 
 
 
    if (is_value && current_el && (buf[0] != 0x00)) 
    { 
 
        cd = iconv_open("euc-kr", "utf-8"); 
        ip = buf; 
        op = obuf;  
        oleft = 1024; 
        ileft = strlen(buf); 
        iconv(cd, &ip, &ileft, &op, &oleft); 
        if (current_id[0]) 
            printf("==> %s : %s (%s)\n", current_el, current_id[1], obuf); 
        else 
            printf("==> %s (%s)\n", current_el, obuf); 
        iconv_close(cd); 
    } 
} 
 
// xml (¿©´Â)ű׸¦ ¸¸³µÀ» ¶§ È£ÃâµÇ´Â ÇÔ¼ö´Ù. 
// depth¸¦ 1Áõ°¡ ½Ã۰í, depth°¡ 0Áï óÀ½ ¸¸³ª³ª´Â Å×±×¶ó¸é  
// versionÀ» °Ë»çÇÑ´Ù. ¹°·Ð Å×±×(el)¸¦ Á÷Á¢ ºñ±³Çصµ µÉ °ÍÀÌ´Ù.        
void 
start(void *data, const char *el, const char **attr) { 
    is_value = 1; 
    current_el = el; 
 
    current_id = attr; 
    if(Depth == 0)  
    { 
        printf("Configuration Version is %s\n\n", current_id[1]);  
    } 
    if (strcmp(current_el,"uinfo") == 0) 
    { 
        printf("==================\n", current_el); 
        user_num++; 
    } 
    Depth++; 
} 
 
// xml (´Ý´Â)ű׸¦ ¸¸³µÀ» ¶§ È£ÃâµÇ´Â ÇÔ¼ö´Ù. 
// ´ÝÈ÷°Ô µÇ¹Ç·Î depth°¡ 1°¨¼ÒÇÒ °ÍÀÌ´Ù.  
void 
end(void *data, const char *el)  
{ 
    is_value = 0; 
    Depth--; 
}  
 
int main(int argc, char **argv) { 
    // xml ÆÄ¼­¸¦ »ý¼ºÇÑ´Ù. 
    XML_Parser p = XML_ParserCreate(NULL); 
    void *enData;     
    int first = 1; 
    iconv_t cd; 
    int r;  
    int oleft; 
    int ileft=0; 
    char *ip, *op; 
    if (! p)  
    { 
        fprintf(stderr, "Couldn't allocate memory for parser\n"); 
        exit(-1); 
    } 
 
    // xmlÀÇ element¸¦ ¸¸³µÀ» ¶§ È£ÃâµÉ ÇÔ¼ö¸¦ µî·ÏÇÑ´Ù.  
    // start´Â óÀ½Å±×, end´Â ¸¶Áö¸· ű׸¦ ¸¸³µÀ» ¶§ È£ÃâµÈ´Ù. 
    XML_SetElementHandler(p, start, end); 
 
    // ½ÇÁ¦ µ¥ÀÌÅÍ (¿¹ : <tag>data</tag>ÀÇ data)¸¦ ó¸®Çϱâ À§Çؼ­  
    // È£ÃâµÉ ÇÔ¼ö¸¦ µî·ÏÇÑ´Ù. 
    XML_SetCharacterDataHandler(p, parser);     
    cd = iconv_open("utf-8", "euc-kr"); 
 
    for (;;)  
    { 
        int done; 
  
        ileft = fread(ibuf, 1, BUFSIZ, stdin); 
        if (ferror(stdin)) { 
          fprintf(stderr, "Read error\n"); 
          exit(-1); 
        } 
        done = feof(stdin); 
        oleft = BUFSIZ; 
        ip = ibuf; 
        op = obuf;  
        ileft = strlen(ibuf);     
        r = iconv(cd, &ip, &ileft, &op, &oleft);      
        printf("OK\n"); 
        //fwrite(obuf, 1, BUFSIZ-oleft, stdout); 
        /* 
        if (ICONV_TRUNC() || ICONV_OVER()) 
                memcpy(ibuf, ip, ileft); 
        */ 
        if (! XML_Parse(p, obuf, strlen(obuf), done)) { 
          fprintf(stderr, "Parse error at line %d:\n%s\n", 
              XML_GetCurrentLineNumber(p), 
              XML_ErrorString(XML_GetErrorCode(p))); 
          exit(-1); 
        } 
        if (done) 
              break; 
    } 
    printf("\n\n¸®½ºÆ®ÀÇ Å©±â : %d\n", user_num); 
    return 0; 
} 
 
À§ÀÇ °æ¿ì iconv¸¦ »ç¿ëÇØ¼­ ¾î´ÀÁ¤µµ ÆÄ½Ì È¿À²ÀÌ ¶³¾îÁö´Â°É °¨¼öÇØ¾ß ÇÒ °ÍÀÌ´Ù. °¡Àå ÁÁÀº ¹æ¹ýÀº euc-kr ¹®ÀÚ¿¡ ´ëÇØ¼­ expat°¡ Á¦´ë·Î ÀνÄÇÏ°Ô ÇØÁÖ´Â °ÍÀε¥, ¾à°£ÀÇ ³ë·ÂÀÌ ÇÊ¿äÇÒ °Í °°´Ù. °°Àº ¹®ÀÚ±ÇÀÎ ÀϺ»°³¹ßÀÚµé ¿ª½Ã ÀÌ·± °í¹ÎÀ» Çϰí ÀÖ´Â °ÍÀ¸·Î º¸ÀÌ¸ç ½ÇÁ¦ euc-jpÆÐÄ¡°¡ ºñ·Ï ¿¹Àü ¹öÀü¿¡ ´ëÇÑ ÆÐÄ¡Áö¸¸ ³ª¿Â °ÍÀ» ºÃ´Ù.(¸µÅ©¸¦ ±î¸Ô¾ú´Ù -.-;, ´Ù½Ã ã¾ÆºÁ¾ßÁö) ½Ã°£ÀÌ µÈ´Ù¸é ÀÌ ÆÐÄ¡¸¦ ÀÌ¿ëÇØ¼­ euc-krÀ» Àνİ¡´ÉÇϵµ·Ï ¸¸µé¾î º¸´Â °Íµµ ÁÁÀ» °Í °°´Ù.

2.2.2 QTstringÀ» ÀÌ¿ëÇÑ utfÀÎÄÚµù ¹× µðÄÚµù
[http]troll¿¡¼­ Á¦°øÇÏ´Â QT ¶óÀ̺귯¸®Áß ¹®ÀÚ¿­ Á¦¾î¸¦ À§ÇÑ Qstring¶óÀ̺귯¸®´Â ÀÚüÀûÀ¸·Î ¹®ÀÚ¿­¿¡ ´ëÇÑ ÀÎÄÚµù µðÄÚµù±â ´ÉÀ» Á¦°øÇÑ´Ù. º°µµ·Î QTlib¸¦ È£ÃâÇØ¾ß ÇÑ´Ù´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ iconv¿¡ ºñÇØ¼­ °£´ÜÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ¸´Ï °Å±â¿¡ ¸¸Á·ÇÏ°í »ç¿ëÇß´Ù. »ç¿ë¹æ¹ýÀº °£´ÜÇÏ´Ï º°µµ·Î ¿¹¸¦ µéÁö´Â ¾Êµµ·Ï ÇϰÚÀ¸´Ï °¢ÀÚ Å×½ºÆ® ÇØº¸±æ ¹Ù¶õ´Ù. Qstring¿¡ ´ëÇÑ ³»¿ëÀº [http]qstring¸¦ Âü°íÇϱ⠹ٶõ´Ù. ´ÙÀ½Àº °£´ÜÇÑ Å×½ºÆ® ÇÁ·Î±×·¥ÀÌ´Ù.
#include <qstring.h> 
#include <iostream> 
#include <string> 
 
using namespace std; 
 
int main(int argc, char **argv) 
{ 
    const char *my; 
    string mystr; 
    QString hoho,data = "¾È³çÇϼ¼¿ä Hello world"; 
    hoho = data.utf8(); 
    cout << hoho << endl; 
    cout << hoho.fromUtf8(data.utf8(), 256) << endl; 
    //cout << (const char *)hoho.local8Bit() << endl; 
} 
 
´ÙÀ½Àº ÄÄÆÄÀÏ ¹æ¹ýÀÌ´Ù.
# g++  -o qstring qstring.o   -L/usr/lib/qt-3.1/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm 
 

3 ¼Ò°³

¾îÂî ¾îÂî ÇÏ´Ù°¡ º¸´Ï XML¿¡ °ü½ÉÀ» °¡Áö°Ô µÇ¾ú´Ù. ¹°·Ð °ü½ÉÀ» °¡Áö±â Àü¿¡µµ Docbook¸¦ »ç¿ëÇÏ´Ù º¸´Ï °ü½ÉÀº ¾ø¾ú´õ¶óµµ Âß ½á¿À±ä ÇßÀ¸´Ï °ü½ÉÀº ¾ø¾ú´õ¶óµµ ¾î¶µç »ç¿ëÀº Çϰí ÀÖ¾ú´Ù°í º¼ ¼ö ÀÖ°Ú´Ù.

±×·¯´Ù°¡ ½ÇÁ¦ XMLµ¥ÀÌÅ͸¦ Á¦¾îÇÏ°í »ý¼ºÇØ¾ßµÉ »óȲ¿¡ ³õÀÌ°Ô µÇ¾ú´Ù. óÀ½¿£ ±×³É °£´ÜÇÑ ÆÄ½Ì¶óÀ̺귯¸® ¸¸µé¾î¼­ Á¦ÇÑÀûÀÎ ¿ëµµ·Î »ç¿ëÇÏ·Á°í Çß¾úÀ¸³ª, ÀÌ¿Õ ÇѰŠÇѹø Á¦´ë·Î? ÇØº¸ÀÚ°í ¸¶À½¸Ô°Ô µÇ¾ú°í ¸¹Àº XML°ü·Ã ¶óÀ̺귯¸® Áß °¡Àå ´ëÁßÀûÀ̶ó°í »ý°¢µÇ´Â expat¸¦ ÀÌ¿ëÇØ¼­ XMLÀ» Á¦¾îÇØ º¸±â·Î Çß´Ù. XMLÀÇ ¼º°ÝÀ» ÆÄ¾ÇÇϱâ À§ÇÑ °øºÎµµ ´õºÒ¾î Çϱâ·Î ¸¶À½ ¸Ô°í ÀÌ À§Å°¸¦ ¸¸µé°Ô µÇ¾ú´Ù.

4 XML¿¡ ´ëÇØ¼­

XMLÀÌ µ¥ÀÌÅ͸¦ °ü¸®Çϱâ À§ÇÑ Â÷¼¼´ë Æ÷¸ËÀÌ µÉ°Å¶ó¸ç XMLÀ» ´çÀå ÀÍÈ÷Áö ¾ÊÀ¸¸é ½Ã´ë¿¡ µÚ¶³¾îÁú °ÍÀ̶ó°í ¼±ÀüÀ» ÇÏ´ø°Ô ¾Æ¸¶ 5³âÀüÀÌ¿´´ø °Í°°´Ù. ±×µÚ·Î ¿À·£ ½Ã°£ÀÌ Áö³µÁö¸¸ ¾ÆÁ÷±îÁöµµ ±×¸® ´ëÁßÈ­ µÇÁö ¸øÇÑ°Í °°À¸¸ç(Àû¾îµµ ÀÏ¹Ý °³¹ßÀÚµéÀÌ ÇǺηΠ´À³¢±â¿¡´Â) ¸¶Ä¡ ¼¼»óÀ» µÚ ¹Ù²Ù±â¶óµµ ÇÒ °Í°ú °°Àº ¿­±â´Â ½Ä¾î¼­ ÀÌÁ¦ Á» ³ÃÁ¤ÇÏ°Ô XMLÀ̶õ °ÍÀ» ¹Ù¶óº¸±â ½ÃÀÛÇÑ °Í °°´Ù.

XMLÀÌ HTMLÀ» ´ëüÇϰí, ±â¾÷¿¡¼­ »ç¿ëÇÏ´Â ÀÀ¿ë¿¡¼­µµ XMLÀÌ ÁÖ¸¦ ÀÌ·ê °Í °°¾ÒÁö¸¸ ¿ª½Ã 90%ÀÌ»óÀÇ ¹®¼­´Â HTMLȤÀº TEXT·Î »ý»êµÇ¾î Áö°í ÀÖÀ¸¸ç ±â¾÷¿¡¼­ »ç¿ëÇÏ´Â ÀÀ¿ëµé ¿ª½Ã ´ëºÎºÐ TEXTȤÀº Àü¿ë Æ÷¸ËÀ» »ç¿ëÇϰí ÀÖ´Ù. XMLÀ» »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀº ¾ÆÁ÷±îÁö´Â ÇÑÁ¤ÀûÀ̸ç ÀÏ¹Ý °³¹ßÀÚµéÀÌ Á¢Çϱâ Èûµç Áß/´ëÇü ÀÌ»óÀÇ SI¼º°ÝÀÌ °­ÇÑ ½ÃÀå¿¡¼­ Á¦ÇÑÀûÀ¸·Î »ç¿ëµÇ´Â °Í °°´Ù.

±×·¯³ª ÃÖ±Ùµé¾î XMLÀÌ ´ëÁßÀûÀÎ ¿µ¿ª±îÁö ¹üÀ§¸¦ ³ÐÈ÷°í ÀÖ´Ù. (Á¦ÇÑÀûÀ¸·Î XMLÀÌ »ç¿ëµÇ°í ÀÖ±ä ÇßÀ¸³ª) ¹®¼­ÀÛ¼ºÅøµéÀÌ ÀÚü Æ÷¸ËÀ» ¹ö¸®°í XMLÀ» Àû±ØÀûÀ¸·Î »ç¿ëÇϱâ·Î ÇßÀ¸¸ç À¥ ¾ÖÇø®ÄÉÀ̼Ç, ¸Þ½ÅÀú, ¾îÇø®ÄÉÀÌ¼Ç ·Î±×, µ¥ÀÌÅÍ ±³È¯À» À§Çؼ­ Æø³Ð°Ô »ç¿ëµÇ¾î Áö°í ÀÖ´Ù. ƯÈ÷ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ±× Ȱ¾àÀÌ µÎµå·¯ Áö´Â°Í °°´Ù.

ÀÌ ¹øÀå¿¡¼­´Â ÀÌ·¯ÇÑ XMLÀÇ ¸é¸ð¿¡ ´ëÇØ¼­ °£´ÜÇÏ°Ô ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

4.1 XML À̶õ ¹«¾ùÀΰ¡

XMLÀº eXtensible Markeup LanguageÀÇ ¾àÀÚ·Î 1996³â W3C(World Wide Web Consortium)¿¡¼­ Á¦¾ÈµÈ °ÍÀ¸·Î½á À¥¿¡¼­ ±¸Á¶È­µÈ µ¥ÀÌÅÍÀÇ Àü¼ÒÀÌ °¡´ÉÇϵµ·Ï ¼³°èµÈ ¾ð¾îÀÌ´Ù. (À¥)ÀÎÅͳݻ󿡼­ÀÇ µ¥ÀÌÅÍ ±³È¯À̶ó¸é HTMLÀ̶õ ¾ð¾î°¡ ÀÖ±ä ÇßÁö¸¸ HTMLÀº µ¥ÀÌÅ͸¦ "¾î¶»°Ô º¸¿©ÁúÁö"¿¡ ´ëÇØ¼­ ±âÁØÀ»µÎ°í ¸¸µé¾îÁø ¾ð¾î¶ó¼­ ±¸Á¶ÀûÀÎ(Áï ¹®¼­ ÀÚü°¡ Á¤º¸°¡ µÇ°Å³ª Á¤º¸ÀÇ ÀϺΰ¡ µÇ´Â) Á¤º¸ÀÇ ±³È¯¿¡´Â Àû´çÇÏÁö°¡ ¾Ê¾Ò´Ù.

XMLÀº ±âº»ÀûÀ¸·Î´Â HTMLÀÇ ÇѰ踦 ±Øº¹Çϱâ À§ÇÑ ¸ñÀû¿¡¼­ ź»ýÇÑ ¾ð¾îÀÌ´Ù. XMLÀ» ÀÌÇØÇϱâ À§Çؼ­´Â XMLÀÇ Á·º¸¿¡ ´ëÇØ¼­ Á» »ìÆìºÁ¾ß ÇÒ °Í °°´Ù.

4.1.1 HTML
À¥ÀÌ Áö±Ýó·³ ¼ºÀåÇÒ ¼ö ÀÖ¾ú´ø °¡Àå Å«¿µÇâ·ÂÀ» ³¢Ä£ ÀÏµî °ø½ÅÀ̶ó¸é HTMLÀ» »©³õÀ» ¼ö ¾øÀ» °ÍÀÌ´Ù. ÇöÀç ÀÎÅͳݿ¡¼­ »ç¿ëµÇ¾îÁö°í ÀÖ´Â ´ëºÎºÐ(¾Æ¸¶µµ 90%ÀÌ»ó)ÀÇ ¹®¼­´Â HTML·Î µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. HTML(HyperText Markup Language)¶ó´Â À̸§¿¡¼­ º¼ ¼ö ÀÖµíÀÌ ÇÏÀÌÆÛ ÅØ½ºÆ®, ÇÏÀÌÆÛ ¹Ìµð¾îÀÇ Áö¿øÀ» Ư¡ÀûÀ¸·Î ÇÏ´Â ¾ð¾îÀÌ´Ù. HTMLÀº ´©±¸¶óµµ ¸î ½Ã°£¸¸ ÅõÀÚÇÏ¸é ¾î·ÆÁö ¾Ê°Ô ±¸»çÇÒ ¼ö ÀÖÀ» Á¤µµ·Î ½¬¿î ¾ð¾î Àε¥´Ù°¡ ÀÏ¹Ý ÅØ½ºÆ®¸¦ ÅëÇØ¼­ ±â¼ú µÇ±â ¶§¹®¿¡ È®À强°ú À̽ļºÀÌ ¸Å¿ì Æí¸®ÇÏ¿´´Ù. À¥¼­¹ö¸¸ µ¹¾Æ°¡°í ÀÖ´Ù¸é ±×°Ô À©µµ¿ì°Ç À¯´Ð½º°Ç ¸®´ª½º°Ç ÀÓº£µðµå Àåºñ°Ç °£¿¡ »ó°ü¾øÀÌ µ¿ÀÏÇÏ°Ô µ¥ÀÌÅ͸¦ Àü´Þ ÇÒ ¼ö ÀÖ´Ù.

HTMLÀº ¾î´À³¯ °©Àڱ⠸¸µé¾îÁø ÀüÇô µ¶¸³ÀûÀÎ ¾ð¾î´Â ¾Æ´Ï´Ù. SGMLÀ̶ó°í ÇÏ´Â ¾ð¾îÀÇ DTD·Î Á¤ÀǵǾî ÀÖ´Â ¾ð¾î´Ù. SGML ¿ª½Ã HTML°ú ºñ½ÁÇÑ ¸¶Å©¾÷ ¾ð¾îÀ̱ä ÇÏÁö¸¸ À¥»ó¿¡¼­ °£´ÜÇÏ°Ô µ¥ÀÌÅ͸¦ ¼­ºñ½ºÇϱ⿡´Â ³Ê¹« º¹ÀâÇϰí Å©°í ¸Å¿ì±â ¾î·Á¿ü´Ù. ±×·¡¼­ SGMLÀÇ ¼­ºê¼Â ÇüÅ·ΠHTMLÀÌ ¸¸µé¾î Áø °ÍÀÌ´Ù.

HTMLÀº °£´ÜÇϰí È®À强°ú À̽ļºÀÌ ÁÁ´Ù´Â ÀåÁ¡À» °¡Á³À¸³ª ´ÜÁö º¸¿©ÁÖ´Â ±â´É ÀÌ¿ÜÀÇ ´Ù¸¥ ±â´ÉÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù´Â ´ÜÁ¡À» °¡Áø´Ù. ÀÌ´Â °³ÀΠȨÆäÀÌÁö¿Í °°Àº º¸¿©ÁÖ´Â Àϸ¸À» ÇÏ´Â ´Ü¼ø ȨÆäÀÌÁö¿¡´Â »ç¿ëÇϱâ Àû´çÇßÀ¸³ª µ¥ÀÌÅ͸¦ °¡°ø/ó¸® ÇØ¾ß ÇÏ´Â ±â¾÷ ¼öÁØÀÇ º¹ÀâÇÑ È¨ÆäÀÌÁö¿¡ »ç¿ëÇϱ⿡´Â ¸Å¿ì ºÒÆíÇß´Ù.

À§¿Í °°Àº ´ÜÁ¡À» ÀÏºÎ ÇØ°áÇϱâ À§Çؼ­ CSS(Cascading Style Sheet)°¡ °³¹ß µÇ±ä ÇßÀ¸³ª HTMLÀÌ °íÁ¤ÀûÀÎ ÅÂ±× ¼Â(tag set)¸¸À» Áö¿øÇÑ´Ù´Â ±Ùº»ÀûÀÎ ¹®Á¦¿Í ¹®¼­ÀÇ ±¸Á¶ÀûÀÎ Á¤º¸¸¦ ´ãÀ» ¼ö ¾ø´Ù´Â °ÍÀº Á¤º¸¸¦ ó¸®Çϴµ¥ Å« Àå¾Ö¹°ÀÌ µÈ´Ù.

HTML¿¡¼­´Â ¹Ì¸® Á¤ÀÇµÈ Ç¥ÁØ Å±׿ܿ¡ ÀÓÀÇÀÇ Å±׸¦ ¸¸µé ¼ö ¾ø´Ù.  
¹®¼­ÀÇ Á¤º¸¸¦ Á¦´ë·Î Ç¥ÇöÇÏ·Á¸é ÀÓÀÇÀÇ Å±׸¦ ¸¸µé ¼ö ÀÖ¾î¾ß Çϰí ű׿¡  
´ëÇÑ Á¤º¸¸¦ °¡Áø DTD¸¦ Àаí ÇØ¼®ÇÒ ¼ö ÀÖ´Â ºê¶ó¿ìÀú°¡ ÀÖ¾î¾ß ÇÑ´Ù.    
 

HTMLÀÇ ´Ü¼øÇÔÀÌ À¥ÀÌ ¹ßÀüÇϴµ¥ Å« °øÇåÀ» ÇÑ°Ô »ç½ÇÀÌÁö¸¸ Áö±Ý¿¡ ¿Í¼­´Â ¿ÀÈ÷·Á ¹ßÀüÀ» ´õµð°Ô ÇÏ´Â ¸ð½ÀÀ» º¸À̰í ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇØ¼­ ¿©ÀüÈ÷ À¥À» ÀÎÅͳݿ¡¼­ÀÇ Á¤º¸±³È¯ÀÇ Á߽ɿ¡ ÀÖµµ·Ï Çϱâ À§Çؼ­ XMLÀÌ Á¦¾ÈµÈ´Ù.

4.1.2 SGML
XML°ú HTMLÀÌ ÀÖ±âÀü ÅÂÃÊ¿¡ SGMLÀ̶ó´Â ¾ð¾î°¡ ÀÖ¾ú´Ù. SGMLÀº 1986³â ISO8879¿¡ Á¤ÀÇµÈ Ç¥ÁØÀ¸·Î ¹®¼­ÀÇ ³í¸®ÀûÀÎ ±¸Á¶¿Í ³»¿ëÀ» ±â¼úÇϱâ À§Çؼ­ ¸¸µé¾îÁø ¾ð¾î´Ù. SGMLÀ» ÀÌ¿ëÇÏ¸é ¹®¼­ÀÇ ±â¼ú¿¡ ÇÊ¿äÇÑ ´Ù¾çÇÑ Å±׸¦ »ý¼ºÇÒ ¼ö ÀÖÀ¸¸ç, ¹®¼­ÀÇ ³»¿ëÀ̳ª ³»¿ë ±¸Á¶¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. À̸¦ ÀÌ¿ëÇØ¼­ ±¸Á¶È­µÈ µ¥ÀÌÅÍÀÇ »óÈ£±³È¯ÀÌ °¡´ÉÇØÁö¸ç µ¥ÀÌÅÍ¿¡¼­ ½±°Ô Á¤º¸¸¦ ÃßÃâÇØ ³»°í À̸¦ ÀÀ¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÌ·¯ÇÑ ÀÌÀ¯·Î SGMLÀÌ ¹®¼­(Á¤º¸)󸮸¦ À§ÇÑ ¾÷°è Ç¥ÁØÀ¸·Î Á¤ÂøÇÏ¿© »ç¿ëµÇ¾î Áö°í ÀÖ±â´Â Çѵ¥, ³Ê¹« º¹ÀâÇÑ ÀÌÀ¯·Î °ü·Ã ÀÀ¿ëÀÇ °³¹ßÀÌ ¿ëÀÌÇÏÁö ¾Ê¾Ò´Ù. ¶ÇÇÑ ³Ê¹« ÀϹÝÀû(¹ü¿ëÀûÀ¸·Î)¸¸µé¾îÁ® Àֱ⠶§¹®¿¡ È­ÇÐ,¹°¸®,Àü±â¿Í °°Àº Ư¼öÇÑ ¸ñÀûÀ¸·Î ¸¸µé¾îÁø ¹®¼­¸¦ ó¸®ÇÏ·Á¸é ÀÏÀÏÀÌ ÀÀ¿ëÀ» ¸¸µé¾î¾ß¸¸ Çß´Ù. Áï È­ÇÐ, ¹°¸®, Àü±â¸¦ ´Ù·ç´Â »ê¾÷ÀÇ °æ¿ì »ç¿ëÇϱⰡ ¸Å¿ì ²¨·ÁÁø´Ù´Â ´ÜÁ¡ÀÌ »ý±ä´Ù.

SGML·Î ÀÛ¼ºµÈ ¹®¼­¸¦ º¸°í ½Í´Ù¸é docbook/zlib_progÀ» Âü°íÇϱ⠹ٶõ´Ù. »ç¿ëÀÚ Á¤ÀÇµÈ Å±׵éÀÌ »ç¿ëµÈ´Ù´Â °Í¸¸À» Á¦¿ÜÇÑ´Ù¸é ÀüüÀûÀ¸·Î HTML¿Í ¸Å¿ì À¯»çÇÏ´Ù´Â°É È®ÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

4.1.3 XML
À§¿¡¼­ ¾ð±ÞÇÑ HTML°ú SGMLÀÇ ÀåÁ¡À» ¼ö¿ëÇÏ°í ´ÜÁ¡À» º¸¿ÏÇÑ°Ô XMLÀÌ´Ù. XMLÀº SGML¿¡¼­ °ÅÀÇ »ç¿ëÇÏÁö ¾Ê´Â °ÍµéÀ» ¾ø¾Ö°í ÇÊ¿äÇÑ ±â´ÉÀ» ¼ö¿ëÇØ¼­ »ç¿ëÀ» ´Ü¼øÈ­ ½ÃÄ×´Ù. ±×·¸Áö¸¸ SGMLÀÇ ÁÖ¿äÇÑ ±â´ÉµéÀº ¼ö¿ëÇϰí ÀÖ´Ù. SGMLÀÇ ¼­ºê¼ÂÀ̶ó°í ÀÌÇØÇÏ¸é µÈ´Ù.

¶ÇÇÑ ÇØ¼­ ÇÊ¿äÇÑ Å±׸¦ Á¤ÀÇÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï HTMLÀÇ ´ÜÁ¡À» º¸¿ÏÇß´Ù.

ÀüüÀûÀ¸·Î SGML > XML > HTML Á¤µµ·Î ÀÌÇØÇÏ¸é µÇ°Ú´Ù.

5 XML ½ºÆÑ

XMLÀÇ °¡Àå Å« Ư¡Àº HTML°ú ´Þ¸® DTD°¡ °íÁ¤µÇ¾î ÀÖÁö ¾Ê°í, »ç¿ëÀÚ°¡ Çʿ信 µû¶ó¼­ ¸¸µé ¼ö Àִٴµ¥ ÀÖ´Ù. À̵éÀ» ÀÌ¿ëÇØ¼­ ƯÁ¤ÇÑ ¹®¼­¸¦ È¿°úÀûÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Â DTD¸¦ ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. ÀÎÅͳݿ¡¼­ ¹èÆ÷µÇ´Â ¹®¼­¸¦ È¿°úÀûÀ¸·Î ÀÛ¼ºÇϱâ À§ÇÑ XML Docbook DTDµîÀÌ ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù. XML DocBook¿¡ ´ëÇÑ ³»¿ëÀº [http]docbook Çѱ¹ »çÀÌÆ®¸¦ Âü°íÇϱ⠹ٶõ´Ù.

¿©±â¿¡¼­´Â XMLÀÇ DTD¸¦ ¸¸µå´Â ¹æ¹ý°ú XML ¹®¼­¸¦ Ãâ·ÂÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

5.1 XML ¹®¼­ Æ÷¸Ë

XML¹®¼­´Â ´ÙÀ½°ú °°Àº Æ÷¸ËÀ» °¡Áø´Ù.
À¯¸íÇÑ Hello, WorldÃâ·ÂÀÇ XML¹öÁ¯ÀÌ´Ù.
<?XML version="1.0" encoding="UTF-8" RMD='INTERNAL'?> (1) 
<!DOCTYPE greeting [                   --+ 
  <!ELEMENT greeting (#PCDATA)>          | (2) 
]>                                     --+  
 
<greeting>Hello, World</greeting>          (3) 
 
  1. Àº XMLÀÇ Çì´õºÎºÐÀ¸·Î ¹®¼­ÀÇ ¹öÁ¯, ÀÎÄÚµù ¹æ½Ä, DTD¸¦ ¼±ÅÃÀûÀ¸·Î ÁöÁ¤ÇÒ °ÍÀÎÁö¸¦ ¸í½ÃÇÏ´Â RMD¸¦ ±â¼úÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Àå¿¡¼­ ´Ù·ê °ÍÀÌ´Ù.
  2. ´Â DTDºÎºÐÀ¸·Î ÀνºÅϽº(½ÇÁ¦ ³»¿ë)ÀÇ ÇØ¼®À» À§Çؼ­ »ç¿ëµÈ´Ù.
  3. Àº ÀνºÅϽº(½ÇÁ¦ ³»¿ë) ºÎºÐÀ¸·Î ¹®¼­°¡ ±â¼úµÈ´Ù.

À§ÀÇ °æ¿ì´Â DTD¿Í ÀνºÅϽº°¡ ÇϳªÀÇ ¹®¼­¿¡ Æ÷ÇԵǴ °æ¿ìÀε¥, C¿¡¼­ÀÇ include¿Í ¸¶Âù°¡Áö·Î DTD ºÎºÐÀ» º°µµÀÇ ¹®¼­·Î °ü¸®ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·² °æ¿ì ´ÙÀ½°ú °°Àº Æ÷¸ËÀ» °¡Áø´Ù.
<?XML version="1.0" encoding="UTF-8" RMD='INTERNAL'?> (1) 
<!DOCTYPE greeting SYSTEM "hello.dtd">     (2)  
<greeting>Hello, World</greeting>          (3) 
 

5.1.1 Well-Formed XML
Well-Formed XMLÀ̶õ DTD°¡ Á¸ÀçÇÏÁö ¾Ê´Â ÀνºÅϽº¶óµµ ±¸¹®¿¡ ¸Â°Ô ÅÂ±× »ç¿ëÀÌ Àß ±¸¼ºµÈ ¹®¼­¸¦ ÀǹÌÇÑ´Ù.
<?XML  version="1.0"  encoding="UTF-8"  RMD='INTERNAL'?> 
<greeting>Hello, world!</greeting> 
 

5.2 XML DTD

´ÙÀ½°ú °°Àº XML¹®¼­°¡ ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ..
<?XML version="1.0" encoding="UTF-8"?> 
<userinfo> 
    <name>yundream</name> 
    <email>yundream@joinc.co.kr</email> 
    <homepage>http://www.joinc.co.kr</homepage> 
</userinfo> 
 
¿ì¸®´Â ôº¸¸é À§ÀÇ XML¹®¼­°¡ À¯ÀúÀÇ Á¤º¸¸¦ Ç¥ÇöÇϱâ À§ÇÑ Çü½ÄÀ» ÃëÇϰí ÀÖÀ½À» °¨ÀâÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ°Ç Àΰ£Âë µÇ±â ¶§¹®¿¡ °¡´ÉÇѰŰí ÄÄÇ»ÅͶó¸é Àú°ÍÀÌ ¾î¶² Á¤º¸¸¦ Ç¥ÇöÇÏ´Â °ÍÀÎÁö ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾øÀ» °ÍÀÌ´Ù. ÀÀ¿ë¿¡ »ç¿ëÇÒ·Á¸é userinfo´Â À¯Àú Á¤º¸¸¦ ³ªÅ¸³»±âÀ§ÇÑ Å±×, nameÀº À¯ÀúÀÇ À̸§À» ³ªÅ¸³»±â À§ÇÑ Å±׶ó´Â µîµîÀÇ Á¤º¸¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù.

ÀÌ·¯ÇÑ Á¤ÀÇµÈ Á¤º¸¸¦ DTD¶ó°í ÇÑ´Ù.

DTDÀÇ ÁÖ¿ä ±¸¼º¿ä¼Ò´Â Element, Attribute, Entity·Î À̵鿡 ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

Element´Â ű׷ΠǥÇöµÉ ¼ö ÀÖÀ¸¸ç ³»¿ëÀÇ Æ¯¼ºÀ» Á¤ÀÇÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.
<ulink>http://www.joinc.co.kr</ulink> 
 
À§¿¡¼­ ¹Ù·Î ulink°¡ Element°¡ µÈ´Ù. Attribute(¿¡Æ®¸®ºäÆ®)´Â ElementÀÇ ºÎ°¡ÀûÀÎ ¼Ó¼ºÀ» ³ªÅ¸³»±â À§Çؼ­ »ç¿ëµÈ´Ù.
<ulink url=http://www.joinc.co.kr>joinc ȨÆäÀÌÁö</ulink> 
 

¿¤¸®¸ÕÆ®´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÈ´Ù.
 +----+---------+---+---------------+---+------+---+ 
 | <! | ELEMENT | S | ¿¤¸®¸ÕÆ® À̸§ | S | Ư¼º | > | 
 +----+---------+---+---------------+---+------+---+ 
   1      2       3         4         5    6     7 
 
  1. ¸¶Å©¾÷ÀÇ ½ÃÀÛÀ» ¾Ë¸®´Â ¿­±â ¹®ÀÚ
  2. ELEMENTÀÇ ¼±¾ðÀ» À§ÇØ »ç¿ëÇÏ´Â DTD ¿¹¾à¾î
  3. ±¸ºÐÀÚ
  4. ¿¤¸®¸ÕÆ®ÀÇ °íÀ¯ À̸§
  5. ¿¤¸®¸ÕÆ® Ư¼º
  6. ¸¶Å©¾÷ÀÇ Á¾·á¸¦ ¾Ë¸®´Â ´Ý±â ¹®ÀÚ

¿¤¸®¸ÕÆ® Ư¼º(5)¿¡´Â EMPTY, ANY, Mixed, ³»¿ë ¸ðµ¨Áß Çϳª°¡ ¿Ã ¼ö ÀÖ´Ù.
  1. EMPTY : HTMLÀÇ <BR>, <IMG>¿Í DocbookÀÇ <xref>¿Í °°ÀÌ ³»¿ëÀ» °¡ÁöÁö ¾Ê´Â ¿¤¸®¸ÕÆ®
  2. ANY : Æ÷°ýÀûÀÌ°í ±¸Á¶ÀûÀÎ ¿ä¼Ò¸¦ ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ» ¶§ (ÇÏÀ§ ¿¤¸®¸ÕÆ®·Î ¾î¶² °ÍÀÌ ¿ÍµÂ »ó°üÀÌ ¾øÀ» ¶§) »ç¿ëÇÑ´Ù.
  3. Mixed : #PCDATA¿Í ÇÏÀ§ ¿¤¸®¸ÕÆ®¸¦ ¼¯¾î¼­ Ç¥ÇöÇÒ ¶§ »ç¿ë
  4. ³»¿ë ¸ðµ¨Àº ÇϳªÀÇ ¿¤¸®¸ÕÆ®·Î ¼±¾ðÀÌ µÇ°Å³ª ¿©·¯ ¿¤¸®¸ÕÆ®°¡ ¼ø¼­¸¦ °¡Áö°í ¼±¾ðµÇ¾îÁø °ÍÀ» ÀǹÌÇÑ´Ù.

´ÙÀ½Àº ¿¤¸®¸ÕÆ®ÀÇ ¼±¾ð ¿¹ÀÌ´Ù.
<!ELEMENT  br  EMPTY>                             ------ (1) 
<!ELEMENT  container  ANY>                        ------ (2) 
<!ELEMENT  p  (#PCDATA | a | ul | b | i | em)*>   ------ (3) 
<! ELEMENT spec  (front, body, back?)>            ------ (4) 
 
ù¹øÂ° ¶óÀÎÀǰæ¿ì brÀ̶ó´Â ű׸¦ Á¤ÀÇÇϰí Àִµ¥ EMPTY¶ó°í µÇ¾î ÀÖÀ¸¹Ç·Î ¾î¶°ÇÑ ³»¿ëµµ °¡ÁöÁö ¾Ê°Ô µÈ´Ù. À§ÀÇ ¼±¾ð¿¹¸¦ º¸¸é ,'¿Í '|'±âÈ£°¡ »ç¿ëµÇ¾ú´Âµ¥ À̵éÀº ¿¤¸®¸ÕÆ®¸¦ ¼±¾ðÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿¬°áÀÚ(connectors)·Î ¿¤¸®¸ÕÆ®°£ÀÇ »óÈ£ °ü°è¸¦ Áö½ÃÇϱâ À§ÇØ »ç¿ëÇÑ´Ù.
¿¬°áÀÚ »ç¿ë ¼³¸í
, X, Y X ´ÙÀ½¿¡ Y
| X|Y X ¶Ç´Â Y

µÎ¹øÂ° ¶óÀÎÀº ÇÏÀ§¿¡ ¾î¶² ¿¤¸®¸ÕÆ®¶óµµ ¿Ã ¼ö ÀÖ´Â container¶ó´Â ű׸¦ Á¤ÀÇÇϰí ÀÖ´Ù. ¾î¶² ¿¤¸®¸ÕÆ®¶óµµ ¿Ã ¼ö ÀÖÀ¸¹Ç·Î Áß°£¿¡ brű׵îÀÌ ¿À´ÂÀÏÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù.
<container> 
    hello world <br> 
    Im korean <br> 
</container> 
 

¼¼¹øÂ° ¶óÀÎÀÇ p ¿¤¸®¸ÕÆ®´Â ´Â mixed·Î ¼±¾ðµÇ¾î Àִµ¥, ÇÏÀ§ ¿¤¸®¸ÕÆ®·Î #PCDATA, a, ul, b, I, em Áß Çϳª ÀÌ»óÀÌ Áߺ¹µÇ¾î¼­ ³ª¿Ã ¼ö ÀÖ´Ù.

³×¹øÂ° ¶óÀÎÀÇ spec ¿¤¸®¸ÕÆ®´Â ¸ðµ¨ÇüÅ·Π¼±¾ðµÇ¾î Àִµ¥, ¼­ºê ¿¤¸®¸ÕÆ®·Î front, body, back¸¦ ¼øÂ÷ÀûÀ¸·Î °¡Áö¸ç back´Â »ý·«µÉ ¼öµµ ÀÖÀ½À» ÀǹÌÇÑ´Ù. docbook¸¦ ¿¹·Î µé¾îº¸ÀÚ¸é <section>´ÙÀ½¿¡´Â <title>ÀÌ ³ª¿Í¾ß µÇ°í ±×´ÙÀ½¿¡´Â <para>°¡ ³ª¿Í¾ß Çϸç, <para>´Â »ý·« µÉ ¼öµµ ÀÖÀ¸¸ç, ¹Ýº¹ÀûÀ¸·Î »ç¿ëµÉ ¼öµµ ÀÖ´Ù. ´ÙÀ½°ú °°Àº ¹®¼­ ±¸Á¶¸¦ ³ªÅ¸³»°íÀÚ ÇÏ´Â °æ¿ìÀÌ´Ù.
<section> 
    <title>What ? Linux Programming</title> 
    <para> 
        Linux Programming .. is hello world 
    </para> 
    <para> 
        hahahaha 
    </para> 
</section> 
 
À§ÀÇ °æ¿ì ¾Æ·¡¿Í °°ÀÌ section ¿¤¸®¸ÕÆ® ¼±¾ðÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù.
<!ELEMENT section (title, para*)> 
 
Á¦¸ñÀº ¹Ýµå½Ã (Çϳª¸¸)¿Í¾ß ÇÏÁö¸¸ ³»¿ëÀº ¾øÀ» ¼öµµ ÀÖ°í ¿©·¯°³ÀÇ ¹®´ÜÀ¸·Î ±¸¼ºµÉ ¼öµµ ÀÖÀ¸¹Ç·Î paraµÚ¿¡ "*"Áö½ÃÀÚ°¡ »ç¿ëµÇ¾ú´Ù. "*"¿Ü¿¡µµ ´ÙÀ½°ú °°Àº Áö½ÃÀÚ°¡ ÁغñµÇ¾î ÀÖ´Ù.
Áö½ÃÀÚ ÀǹÌ
Çѹø ¹ß»ý
+ Çѹø ÀÌ»ó ¹ß»ýÇÒ ¼ö ÀÖÀ½
? ¹ß»ýÇÒ ¼öµµ ÀÖ°í ¾ÈÇÒ ¼öµµ ÀÖÀ½
* ¹Ýº¹ÀûÀ¸·Î ¹ß»ýÇÒ ¼öµµ ÀÖ°í ¾ÈÇÒ ¼öµµ ÀÖÀ½

5.3 ¾îÆ®¸®ºäÆ® ¼±¾ð(Attribute Declarations)

¾îÆ®¸®ºäÆ®´Â ¸»±×´ë·Î ¹®¼­³ª ¿¤¸®¸ÕÆ®ÀÇ ¼Ó¼ºÀ» Á¤ÀÇÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. °ü°èµÈ¿¤¸®¸ÕÆ®ÀÇ Çü°ú ¾îÆ®¸®ºäÆ®ÀÇ À̸§, µ¥ÀÌÅÍ Çü, µðÆúÆ® °ªµîÀ» ±â¼úÇÒ ¼ö ÀÖ´Ù.
+----+---------+---+--------------------+----+------------------------+---+ 
| <! | ATTLIST | S | °ü°èµÈ ¿¤¸®¸ÕÆ® Çü | S? | ¿¡Æ®¸®ºäÆ® Á¤ÀÇ ¸®½ºÆ® | > | 
+----+---------+---+--------------------+----+------------------------+---+ 
         (1)                (2)                        (3) 
 
  1. ¾îÆ®¸®ºäÆ® ¼±¾ðÀ» À§ÇØ »ç¿ëµÇ´Â ¿¹¾à¾î.
  2. ¼±¾ðÇÒ ¾îÆ®¸®ºäÆ®¸¦ °®À» ¿¤¸®¸ÕÆ® Çü
  3. ¾îÆ®¸®ºäÆ® À̸§°ú Çü ±×¸®°í µðÆúÆ®°ªÀ¸·Î ±¸¼ºµÈ´Ù.

¾îÆ®¸®ºÎÆ®´Â ½ºÆ®¸µ Çü(String), ÅäÅ« Çü(Tokenized), Enumeration ÀÇ 3°¡Áö ÇüÀ¸·Î ³ª´­ ¼ö ÀÖ´Ù.

½ºÆ®¸µ Çü¿¡´Â CDATA¶ó´Â ÅØ½ºÆ®¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ÇüÀÌ ÀÖ°í, ÅäÅ«Çü¿¡´Â ¾îÆ®¸®ºäÆ® °ªÀ» ¿¤¸®¸ÕÆ®ÀÇ °íÀ¯ ½Äº°ÀÚ·Î ¼±¾ðÇÏ´Â ID, ¾îÆ®¸®ºäÆ® °ªÀ» IDÂüÁ¶°ªÀ̳ª ÂüÁ¶°ªÀÇ ¸®½ºÆ®¸¦ ¼±¾ðÇÏ´Â IDREF³ª IDREFS, ¾îÆ®¸®ºäÆ® °ªÀ» ÇöÀç ¼±¾ðµÈ ºÎºÐÀ̳ª ¶Ç´Â µ¥ÀÌÅÍ ¿£Æ¼Æ¼ ¸í, ¿£Æ¼Æ¼ ¸í·ÉÀÇ ¸®½ºÆ®°¡ µÉ ¼ö ÀÖµµ·Ï ¼±¾ðÇÏ´Â ENTITY, ENTITIES, ¼Ó¼º°ªÀ» ¸íĪÅäÅ«À̳ª ¸íĪ ÅäÅ«µéÀÇ ¸®½ºÆ®·Î ¼±¾ðÇÏ´Â NMTOKEN, NMTOKENS ÇüÀÌ ÀÖ´Ù.

EnumerationÇüÀº ¾îÆ®¸®ºÎÆ® °ªÀ» °ýÈ£ ¾È¿¡ ¼±¾ðÇÏ¿© °ªµéÀÇ ¸®½ºÆ®¸¦ ±¸¼ºÇÏ´Â °ÍÀÌ´Ù. ¾îÆ®¸®ºäÆ® ¼±¾ð¿¡ »ç¿ëµÇ´Â µðÆúÆ® °ª¿¡´Â ´ÙÀ½°ú °°Àº 4°¡Áö ŸÀÔÀÌ ÀÖ´Ù.
  1. ¸íÈ®È÷ ÀνÄÇÒ ¼ö ÀÖ´Â °ª
  2. REQUIRED : ¼Ó¼º°ªÀÌ ¹Ýµå½Ã ÀÔ·Â µÇ¾î¾ß ÇÏ´Â °æ¿ì
  3. IMPLIED : ¼Ó¼º°ªÀÌ Á¤ÀǵÇÁö ¾Ê¾Ò´Ù¸é ÇÁ·Î±×·¥¿¡¼­ ±× °ªÀ» ºÎ¿©ÇÏ´Â °æ¿ì
  4. FIXED : °íÁ¤µÈ µðÆúÆ® ¼Ó¼º°ª¸¸À» °®µµ·Ï ÇÏ´Â °æ¿ì
<!ATTLIST termdef                       --- 1 
    id      ID     #REQUIRED  
    name    CDATA  #IMPLIED  
<!ATTLIST  list                         --- 2 
    type   (bullets | ordered | glossary ) "ordered"> 
<!ATTLIST  form                         --- 3 
    method CDATA   #FIXED   "POST">   
 
À§¿¡´Â termdev, list, form 3°³ÀÇ ¿¤¸®¸ÕÆ®¿¡ ´ëÇÑ °¢°¢ÀÇ ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇÇϰí ÀÖ´Ù.
  1. termdef ¿¤¸®¸ÕÆ®¿¡ ´ëÇØ ÅäÅ«ÇüÀÇ ID¿Í µðÆúÆ® °ªÀ» REQUIRE·Î ÇÏ´Â ¾îÆ®¸®ºäÆ® id¸¦ ¼±¾ðÇß°í, ½ºÆ®¸µÇüÀÇ CDATA¿Í µðÆúÆ® °ªÀ» IMPLIED·Î ÇÏ´Â ¾îÆ®¸®ºäÆ® nameÀ» ¼±¾ðÇß´Ù. ¾îÆ®¸®ºäÆ®´Â id´Â termdef ¿¤¸®¸ÕÆ®¸¦ ÀνºÅϽº¿¡¼­ »ç¿ëÇÒ ¶§ »ý·«ÇÒ ¼ö ÀÖ´Ù.
  2. list ¿¤¸®¸ÕÆ®¿¡ ´ëÇØ (bullets|ordered|glossary)¿Í °°ÀÌ Enumeration ÇüÀÇ Å¸ÀÔÀ» ¼±¾ðÇÏ°í µðÆúÆ® °ªÀ¸·Î ordered¸¦ ÁöÁ¤Çß´Ù. ¸¸¾à ÀνºÅϽº(½ÇÁ¦ ³»¿ë)¿¡¼­ list ¿¤¸®¸ÕÆ®ÀÇ ¾îÆ®¸®ºäÆ® ŸÀÔ¿¡ °ªÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ±âº»ÀûÀ¸·Î ordered°¡ ÁöÁ¤µÈ´Ù. RDBMS¸¦ ´Ù·ç¾î º¸¾Ò´Ù¸é Çʵ带 Á¤ÀÇ ÇÒ ¶§ µðÆúÆ® °ªÀ» NULLÀÌ ¾Æ´Ñ Ưº°ÇÑ °ªÀ¸·Î ÁöÁ¤ÇÑ °æ¿ì¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ¿Í °°Àº °æ¿ì¶ó°í »ý°¢ÇÏ¸é µÈ´Ù.
  3. form ¿¤¸®¸ÕÆ®¿¡ method ¿¡Æ®¸®ºäÆ®°¡ ½ºÆ®¸µ ÇüÀÇ CDATA·Î ¼±¾ð µÇ¾î ÀÖ°í, µðÆúÆ® °ªÀº FIXED¸¦ ÀÌ¿ëÇØ¼­ POST·Î °íÁ¤ ½ÃÄ×´Ù.

(À̵鿡 ´ëÇØ¼­ docbook¸¦ ÅëÇÑ ½ÇÁ¦¿¹¸¦ µé°í ½ÍÁö¸¸ ¾ÆÁ÷ Á¤È®ÇÏ°Ô ÀÌÇØ¸¦ ÇÏÁö ¸øÇÑ °ü°è·Î ³ªÁßÀ¸·Î ¹Ì·ç±â·Î Çß´Ù)

5.4 ¿£Æ¼Æ¼ ¼±¾ð(Entity Declarations)

¿£Æ¼Æ¼´Â ¹®¼­ ³»¿¡¼­ ÂüÁ¶µÉ ¼ö ÀÖ´Â ¹®ÀÚ ÁýÇÕÀÇ ´ÜÀ§·Î, ÀÏ¹Ý ¿£Æ¼Æ¼¿Í ¸Å°³ º¯¼ö ¿£Æ¼Æ¼·Î Å©°Ô ³ª´­ ¼ö ÀÖ´Ù. À§Ä¡¿¡ µû¶ó¼­ ³»ºÎ ¿£Æ¼Æ¼ ȤÀº À§ºÎ ¿£Æ¼Æ¼°¡ µÉ¼ö ÀÖ´Ù. ¶ó°í º¹ÀâÇÏ°Ô ¼³¸íµÇ¾î ÀÖÁö¸¸ °£´ÜÈ÷ ¸»Çؼ­ HTML, Docbook³»¿¡¼­ »ç¿ëµÇ´Â &¿Í °°Àº ¹®ÀÚ¿­ÀÌ´Ù. &¿Í °°Àº ÅØ½ºÆ® ¿£Æ¼Æ¼´Â ÀÏ¹Ý ¿£Æ¼Æ¼·Î¼­ '&'¿Í ';'À» »ç¿ëÇÑ´Ù. ¸Å°³ º¯¼ö ¿£Æ¼Æ¼´Â DTD³ª Á¶°Ç 󸮸¦ ÇÒ ¶§ »ç¿ëÇÏ´Â ÅØ½ºÆ® ¿£Æ¼Æ¼·Î '%'¿Í ';'¸¦ »ç¿ëÇÑ´Ù.

ÀÏ¹Ý ¿£Æ¼Æ¼´Â C¿Í °°Àº ÇÁ·Î±×·¡¹Ö¾ð¾î¿¡¼­ÀÇ µðÆÄÀÎ(#define)¿Í ¸Å¿ì ºñ½ÁÇÏ´Ù. ¿¹¸¦ µé¾î Republic Of Korean À̶ó´Â ´Ü¾î°¡ XML ÀÎÆ®ÅϽº¿¡ ÀÚÁÖ µé¾î°£´Ù°í °¡Á¤ÇØ º¸ÀÚ. ÀÌ·² °æ¿ì ÀÏÀÏÀÌ ÀÔ·ÂÇØ ÁÙ ¼öµµ ÀÖ°ÚÁö¸¸, <!ENTITY ROK "Republic Of korean">·Î ¿£Æ¼Æ¼¸¦ ¼±¾ðÇØ¼­ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ±×·¯¸é ÀνºÅϽº ÀÛ¼ºÁß Republic Of KoreanÀÌ µé¾î°¡¾ßµÉ ÀÏÀÌ ÀÖ´Ù¸é &ROK¸¦ ½á ³ÖÀ¸¸é µÈ´Ù.

¿ÜºÎ ¿£Æ¼Æ¼´Â ¿ÜºÎÀÇ XML ¹®¼­³ª ºñ XML ¹®¼­¸¦ °¡¸®Å°±â À§Çؼ­ ȤÀº ÇϳªÀÇ XML ½Ã½ºÅÛ¿¡¼­ »ç¿ëµÉ¼ö ÀÖµµ·Ï ¼³°è ¼±¾ðµÈ ¿£Æ¼Æ¼¸¦ Æ÷ÇÔÇϱâ À§Çؼ­ ¼±¾ðµÉ ¼ö ÀÖ´Ù.
<!ENTITY  open-hatch 
 SYSTEM  "http://www.textuality.com/boilerplate/OpenHatch.xml"> 
<!ENTITY  open-hatch 
 PUBLIC  "-//Textuality//TEXT Standard open-hatch boilerplate//EN" 
 "http://www.textuality.com/boilerplate/OpenHatch.xml"> 
<!ENTITY  hatch-pic 
 SYSTEM  "../grafix/OpenHatch.gif" 
 NDATA  gif> 
 

5.5 ÁÖ¼®

XMLµµ ¾ð¾îÀ̹ǷΠÁÖ¼®À» Á¦°øÇÑ´Ù. ÁÖ¼®Àº ½ÇÁ¦·Î ÇØ¼®µÇÁö ¾ÊÀ¸¸ç ´ÜÁö °³¹ßÀÚ¿¡°Ô
¹®¼­¿¡ ´ëÇÑ ºÎ°¡ Á¤º¸¸¦ Á¦°øÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù. HTML¿¡¼­¿Í ¸¶Âù°¡Áö·Î
<!-- ÁÖ¼® -->ÀÇ ÇüÅ·Π»ç¿ëµÈ´Ù.
<!-- made by yundream --> 
<!-- www.joinc.co.kr  --> 
 

5.6 CDATA ¼½¼Ç(CDATA Section)

XML ÆÄ¼­°¡ ÀÎÁöÇÏ´Â ¹®ÀÚÁ¤º¸¸¦ Àϸ¸ ¹®ÀÚ Á¤º¸Ã³·³ ÀνĽÃÄÑ¾ß ÇÒ¶§, CDATA
¼½¼ÇÀ¸·Î ¼±¾ðÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

<greeting>Hello, World!</greeting>¸¦ ÆÄ¼­°¡ ÀνÄÇÏÁö ¸øÇÏ°Ô ÇÒ·Á¸é ¾Æ·¡¿Í °°ÀÌ
Ç¥ÇöÇÏ¸é µÈ´Ù.
<![CDATA[<greeting>Hello, World!</greeting>]]> 
 

6 ½ÇÀü : XML DTD¿Í ÀνºÅϽº »ý¼º

Áö±Ý ±îÁöÀÇ ³»¿ëÀ» Åä´ë·Î XML DTD¿Í ÀνºÅϽº¸¦ ½ÇÁ¦ Çà¼ºÇØº¸µµ·Ï ÇÏÀÚ. ¸¸µé ¹®¼­´Â »ç¿ëÀÚ Á¤º¸¸¦ °¡Áö´Â ¹®¼­ USER INFO ¹®¼­´Ù.
Subject : USERINFO                ----+          -------+ 
Author  : JOINC                       |                 | 
Email   : yundream@joinc.co.kr        | Document INFO   | USER 
Version : 1.0                         |                 | 
Date    : 2004/02/04              ----+                 | 
                                                        | 
Name  : yun                       ----+                 | 
ID    : yundream                      |                 | 
Email : yundrea@joinc.co.kr           |                 | 
HOME  : www.joinc.co.kr               |                 | 
Birth : 1974/02/08                    | User INFO       | 
                                      |                 | 
Name  : yun mung                      |                 | 
ID    : mung                          |                 | 
Email : mung@joinc.co.kr              |                 | 
Home  : NONE                          |                 | 
Birth : 1974/05/11                    |                 | 
                                      |                 | 
......                            ----+           ------+ 
 
¹®¼­´Â Å©°Ô µÎºÎºÐÀ¸·Î ³ª´¶´Ù. Çϳª´Â ¹®¼­ ÀÚüÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â Document INFO ºÎºÐÀÌ¸ç ´Ù¸¥ ÇѺκÐÀº ½ÇÁ¦ À¯Àú Á¤º¸¸¦ ´ã°í ÀÖ´Â User INFO ºÎºÐÀÌ´Ù.


6.1 DTD »ý¼º

±×·³ DTD¸¦ »ý¼ºÇØ º¸µµ·Ï ÇÏÀÚ. DTD¸¦ »ý¼º Çϱâ À§Çؼ­´Â ¿¤¸®¸ÕÆ®¿Í ¿¤¸®¸ÕÆ®ÀÇ ¾îÆ®¸®ºäÆ®¿¡ ´ëÇØ¼­ ¸íÈ®È÷ Á¤ÀÇ µÇ¾î¾ß ÇÑ´Ù.

6.1.1 ¿¤¸®¸ÕÆ®ÀÇ Á¤ÀÇ
°¡Àå »óÀ§ ¿¤¸®¸ÕÆ®ÀÇ À̸§Àº USER·Î Á¤Çϵµ·Ï ÇÏÀÚ. USERÀº ´Ù½Ã Document INFO¿Í User INFO Å©°Ô µÎ°³ÀÇ ±¸¼º¿ä¼Ò·Î ³ª´µ°Ô µÈ´Ù. À̵éÀº °¢°¢ DocINFO¿Í UINFOÀÇ ¿¤¸®¸ÕÆ® À̸§À» ºÎ¿©Çϵµ·Ï ÇÑ´Ù.

DocINFO¿¤¸®¸ÕÆ®´Â ´Ù½Ã Subject, Author, Email, Version, DateÀÇ ¿¤¸®¸ÕÆ®µéÀ» °¡Áö¸ç, UINFO¿¤¸®¸ÕÆ®´Â Name, ID, Email, Home, Birth ¿¤¸®¸ÕÆ®µéÀ» °¡Áø´Ù.

6.1.2 ¿¤¸®¸ÕÆ®ÀÇ ¾îÆ®¸®ºäÆ® Á¤ÀÇ
À̰ÍÀ¸·Î ¸ðµç ¿¤¸®¸ÕÆ®°¡ Á¤ÀǵǾú´Ù. ÀÌÁ¦ °¢ ¿¤¸®¸ÕÆ®µéÀÇ ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇ ÇØ¾ß ÇÑ´Ù.

  1. ÃÖ»óÀ§ ¿¤¸®¸ÕÆ®ÀÎ USERÀÇ °æ¿ì ¹Ýµå½Ã ¹®¼­ÀÇ Á¤º¸¸¦ À§Çؼ­ ¹Ýµå½Ã DocINFO ¾îÆ®¸®ºäÆ®¸¦ Æ÷ÇÔÇØ¾ß¸¸ ÇÒ °ÍÀÌ´Ù. ¹Ý¸é UINFO¾îÆ®¸®ºäÆ®´Â °í°´ÀÌ ÇÑ¸íµµ ¾øÀ» °æ¿ì°¡ ÀÖÀ¸´Ï Æ÷ÇÔµÇÁö ¾ÊÀ» ¼öµµ ÀÖÀ¸¸ç, ¿©·¯¸íÀÇ °í°´À» È®º¸Çϰí ÀÖ´Ù¸é Çϳª ÀÌ»óÀÇ UINFO°¡ »ç¿ëµÉ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. °í·Î USERÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀÇ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
<!ELEMENT USER (DocINFO, UINFO*)> 
 
  1. DocINFOÀÇ °æ¿ì 5°³ÀÇ ¼­ºê ¿¤¸®¸ÕÆ®¸¦ °¡Áö´Âµ¥, Ư¡À» ±ÔÁ¤ÁöÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. Subject, AuthorÀº DocInfoÀÇ Æ¯¼º»ó ¹Ýµå½Ã ÇÊ¿äÇÑ ¿¤¸®¸ÕÆ®µéÀ̸ç, ³ª¸ÓÁö ¿¤¸®¸ÕÆ®µéÀº ÇÊ¿äÇÏÁö ¾Ê´Ù¸é ±»ÀÌ »ç¿ëÇÏÁö ¾Ê¾Æµµ µÉ°ÍÀÌ´Ù.
<!ELEMENT DocINFO (SUBJECT, AUTHOR, EMAIL?, Version?, Date?)> 
<!ELEMENT SUBJECT (#PCDATA)> 
<!ELEMENT AUTHOR (#PCDATA)> 
<!ELEMENT EMAIL (#PCDATA)> 
<!ELEMENT VERSION (#PCDATA)> 
<!ELEMENT DATE (#PCDATA)> 
 
  1. UINFO´Â ½ÇÁ¦ À¯Àú Á¤º¸¸¦ ´Ù·ç°Ô ´Ù·ç°Ô µÇ¸ç ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
<!ELEMENT UINFO (NAME, ID, EMAIL?, HOME?)> 
<!ELEMENT NAME (#PCDATA)> 
<!ELEMENT ID (#PCDATA)> 
<!ELEMENT EMAIL (#PCDATA)> 
<!ELEMENT HOME (#PCDATA)> 
<!ELEMENT Birth (#PCDATA)> 
 
  1. ÀÌÁ¦ ¿¤¸®¸ÕÆ®¿¡ ´ëÇÑ ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇÇØ º¸µµ·Ï ÇÏÀÚ. À̹ø¿¡ ¿¹·Îµç ¹®¼­¿¡ ´ëÇÑ DTD´Â À¯Àú¿¡ ´ëÇÑ °£´ÜÇÑ Á¤º¸¸¸À» Á¦°øÇØ ÁֹǷΠ¾îÆ®¸®ºäÆ® ¿ª½Ã °£´ÜÇÏ°Ô Á¤ÀÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Birth(»ýÀÏ)ÀÇ °æ¿ì À½·Â°ú ¾ç·ÂÁß ¼±ÅÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯¹Ç·Î Birth¿¡ ´ëÇØ¼­´Â ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇÇϵµ·Ï ÇϰڴÙ. ¾îÆ®¸®ºäÆ®¸íÀº solar·Î ÇÏ°í »ý·«°¡´ÉÇϵµ·Ï ÇÒ °ÍÀÌ´Ù. »ý·«µÇ¸é ±âº»À¸·Î ¾ç·Â °ªÀÌ µé¾î°¡µµ·Ï ¼³Á¤ÇϰڴÙ.
<!ATTLIST Birth 
    SOLAR (sun | moon)  "sun"> 
 

´ÙÀ½Àº ÁÖ¼®±îÁö Æ÷ÇÔÇÑ ¿Ï¼ºµÈ DTD´Ù. ÀÌ DTD´Â user.dtd¿¡ ÀúÀåÇϵµ·Ï ÇÑ´Ù.
<!-- DTD NAME --> 
<!ELEMENT USER (DocINFO, UINFO*)> 
 
<!-- Document Information --> 
<!ELEMENT DocINFO (SUBJECT, AUTHOR, EMAIL?, Version?, Date?)> 
<!ELEMENT SUBJECT (#PCDATA)> 
<!ELEMENT AUTHOR (#PCDATA)> 
<!ELEMENT EMAIL (#PCDATA)> 
<!ELEMENT VERSION (#PCDATA)> 
<!ELEMENT DATE (#PCDATA)> 
 
<!-- User Information --> 
<!ELEMENT UINFO (NAME, ID, EMAIL?, HOME?)> 
<!ELEMENT NAME (#PCDATA)> 
<!ELEMENT ID (#PCDATA)> 
<!ELEMENT EMAIL (#PCDATA)> 
<!ELEMENT HOME (#PCDATA)> 
<!ELEMENT Birth (#PCDATA)> 
 
<!ATTLIST Birth 
    SOLAR (sun | moon)  "sun"> 
 

6.2 DTD Àû¿ëÀ» ¸¶Ä£ XML ÀνºÅϽº

´ÙÀ½Àº Áö±Ý±îÁö ÀÛ¼ºÇÑ user.dtdÀÇ Á¤ÀǸ¦ ¸¸Á·ÇÏ´Â XML ÀνºÅϽºÀÇ ¿¹ÀÌ´Ù.
<?XML VERSION="1.0" ENCODING="UTF-8" RMD="NONE"?> 
<!DOCTYPE USER SYSTEM "user.dtd"> 
 
<USER> 
    <DocINFO> 
        <SUBJECT>JOINC USER INFO</SUBJECT> 
        <AUTHOR>yundream</AUTHOR> 
        <EMAIL>yundream@joinc.co.kr</EMAIL> 
        <VERSION>1.0</VERSION> 
        <DATE>2004/01/24</DATE> 
    </DocINFO> 
 
    <UINFO> 
        <NAME>yun SanHa</NAME> 
        <ID>SanHa</ID> 
        <EMAIL>SanHa@joinc.co.kr</EMAIL> 
        <BIRTH solar="sun">1987/01/02</BIRTH> 
    </UINFO> 
 
    <UINFO> 
        <NAME>yun dream</NAME> 
        <ID>dream</ID> 
        <EMAIL>dream@joinc.co.kr</EMAIL> 
        <HOME>http://www.joinc.co.kr</HOME> 
        <BIRTH solar="moon">1978/11/12</BIRTH> 
    </UINFO> 
</USER> 
 


7 expat¸¦ ÀÌ¿ëÇÑ XML Á¦¾î

XML ½ºÆÑ¿¬±¸ º¸´Ù expat¸¦ ÅëÇÑ XML Å×½ºÆ®°¡ ¸ÕÀú ¸¸µé¾îÁø °ü°è·Î(Áï XML¿¡ ´ëÇÑ Á¤È®ÇÑ ÀÌÇØ°¡ ¾øÀÌ ¸¸µé¾îÁ³À½) ¿¹Á¦ ÀÚüÀÇ ¿Ï¼ºµµ°¡ ¶³¾îÁø´Ù. Á¶¸¸°£ Á»´õ Çö½ÇÀûÀÎ ¿¹Á¦¸¦ ¸¸µé °èȹÀÌ´Ù. - 2004/02/05

7.1 °£´Ü ¿¹Á¦

XML¿¡ ´ëÇÑ ½ºÅ͵ð´Â ¿ì¼± µÚ·ÎÇÏ°í °ú¿¬ ³»°¡ ½á¸ÔÀ» °÷¿¡ À¯¿ëÇÏ°Ô ½á¸ÔÀ» ¼ö ÀÖÀ»·±Áö È®ÀÎ Çϱâ À§Çؼ­ expat ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ °£´ÜÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ º¸±â·Î Çß´Ù. °¡Àå ¸ÕÀú ½á¸ÔÀ» °÷Àº ¼³Á¤ÆÄÀÏÀÇ À¯ÁöÀε¥ expat¸¦ ÀÌ¿ëÇØ¼­ È¿°úÀûÀ¸·Î À¯ÁöÇÒ ¼ö ÀÖÀ» °ÍÀÎÁö¿¡ ´ëÇÑ °¨À» Àâ±â À§Çؼ­ ¿¹À縦 ¸¸µé¾î º¸¾Ò´Ù.

ºÐ¼®ÇϰíÀÚ ÇÏ´Â ´ÙÀ½°ú °°Àº XML·Î ±¸¼ºµÈ ÆÄÀÏÀÌ´Ù. º°µµÀÇ DTD¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀº Well-Formed XML ¹®¼­´Ù. À§¿¡¼­ ´Ù·ç ¾ú´ø XML³»¿ë°ú °ÅÀÇ µ¿ÀÏÇÏ´Ù.
<?xml version="1.0" encoding="UTF-8"?> 
 
<user ver="1.0"> 
    <docinfo> 
        <SUBJECT>JOINC USER INFO</SUBJECT> 
        <AUTHOR>yundream</AUTHOR> 
        <EMAIL>yundream@joinc.co.kr</EMAIL> 
        <VERSION>1.0</VERSION> 
        <DATE>2004/01/24</DATE> 
    </docinfo> 
 
    <uinfo> 
        <NAME>yun SanHa</NAME> 
        <ID>SanHa</ID> 
        <EMAIL>SanHa@joinc.co.kr</EMAIL> 
        <BIRTH solar="sun">1987/01/02</BIRTH> 
    </uinfo> 
 
    <uinfo> 
        <NAME>yun dream</NAME> 
        <ID>dream</ID> 
        <EMAIL>dream@joinc.co.kr</EMAIL> 
        <HOME>http://www.joinc.co.kr</HOME> 
        <BIRTH solar="moon">1978/11/12</BIRTH> 
    </uinfo> 
</user> 
 
Âü°í·Î expat´Â EUC_KRÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ÇѱÛÀ» »ç¿ëÇÏ·Á¸é iconv¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇØ¼­ UTF-8·Î º¯°æ ÈÄ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷Àº ²Ï ±ÍÂúÀº ÀÛ¾÷À̹ǷΠ¿©±â¿¡¼­´Â (ÁÖ¼ÓÀ» Æ÷ÇÔÇÑ)XML ÀνºÅϽºÀÇ ¸ðµç °ÍÀ» ¿µ¾î¸¦
»ç¿ëÇß´Ù.

´ÙÀ½Àº °£´ÜÇÑ ¿¹Á¦´Ù. ¿¹Á¦´Â expatÀÇ ·¹ÆÛ·±½º °¡À̵带 º¸°í ÀÛ¼ºÇß´Ù. ¾ÆÁ÷Àº expatÀÇ ÀÌ·± Àú·± ÀÚ¼¼ÇÑ ¼³¸íÀº ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÛµ¿¿¡ ±Þ±ÞÇÑ ÄÚµå´Ù.
#include <stdio.h> 
#include <expat.h> 
#include <stdio.h> 
#include <string.h> 
 
#define BUFFSIZE    8192 
 
char Buff[BUFFSIZE]; 
 
int Depth = 0; 
int is_value = 0; 
 
const char *current_el;   // °¡Àå ÃÖ±Ù ÅÂ±× ±â¾ï¿ë 
const char **current_id;  // ű×ÀÇ Æ¯¼º°ª ±â¾ï¿ë 
 
int  user_num = 0;   // ¸î°³ÀÇ ·¹Äڵ尡 ÀúÀåµÇ¾ú´ÂÁö °Ë»ç  
 
// xml (űװ¡ ¾Æ´Ñ) µ¥ÀÌÅ͸¦ ¸¸³µÀ» ¶§ È£ÃâµÈ´Ù. 
void parser(void *data, const char *s, int len) 
{ 
    int i = 0;  
    int index =  0;     
    char buf[1024] = {0x00, }; 
    // °³Çà,Åǹ®ÀÚ Á¦°Å 
    for (i = 0; i < len; i++) 
    { 
        if (s[i] != '\n' && s[i] != '\t' && i < len) 
        { 
            buf[index] = s[i];  
            index++; 
        } 
    } 
 
 
    if (is_value && current_el && (buf[0] != 0x00)) 
    { 
        if (current_id[0]) 
            printf("==> %s : %s (%s)\n", current_el, current_id[1], buf); 
        else 
            printf("==> %s (%s)\n", current_el, buf); 
    } 
} 
 
// xml (¿©´Â)ű׸¦ ¸¸³µÀ» ¶§ È£ÃâµÇ´Â ÇÔ¼ö´Ù. 
// depth¸¦ 1Áõ°¡ ½Ã۰í, depth°¡ 0Áï óÀ½ ¸¸³ª³ª´Â Å×±×¶ó¸é  
// versionÀ» °Ë»çÇÑ´Ù. ¹°·Ð Å×±×(el)¸¦ Á÷Á¢ ºñ±³Çصµ µÉ °ÍÀÌ´Ù.        
void 
start(void *data, const char *el, const char **attr) { 
    is_value = 1; 
    current_el = el; 
 
    current_id = attr; 
    if(Depth == 0)  
    { 
        printf("User Info Version is %s\n\n", current_id[1]);  
    } 
    if (strcmp(current_el,"uinfo") == 0) 
    { 
        printf("==================\n", current_el); 
        user_num++; 
    } 
    Depth++; 
} 
 
// xml (´Ý´Â)ű׸¦ ¸¸³µÀ» ¶§ È£ÃâµÇ´Â ÇÔ¼ö´Ù. 
// ´ÝÈ÷°Ô µÇ¹Ç·Î depth°¡ 1°¨¼ÒÇÒ °ÍÀÌ´Ù.  
void 
end(void *data, const char *el)  
{ 
    is_value = 0; 
    Depth--; 
}  
 
int main(int argc, char **argv) { 
    // xml ÆÄ¼­¸¦ »ý¼ºÇÑ´Ù. 
    XML_Parser p = XML_ParserCreate(NULL); 
    if (! p)  
    { 
        fprintf(stderr, "Couldn't allocate memory for parser\n"); 
        exit(-1); 
    } 
 
    // xmlÀÇ element¸¦ ¸¸³µÀ» ¶§ È£ÃâµÉ ÇÔ¼ö¸¦ µî·ÏÇÑ´Ù.  
    // start´Â óÀ½Å±×, end´Â ¸¶Áö¸· ű׸¦ ¸¸³µÀ» ¶§ È£ÃâµÈ´Ù. 
    XML_SetElementHandler(p, start, end); 
 
    // ½ÇÁ¦ µ¥ÀÌÅÍ (¿¹ : <tag>data</tag>ÀÇ data)¸¦ ó¸®Çϱâ À§Çؼ­  
    // È£ÃâµÉ ÇÔ¼ö¸¦ µî·ÏÇÑ´Ù. 
    XML_SetCharacterDataHandler(p, parser);     
 
    for (;;)  
    { 
        int done; 
        int len; 
  
        len = fread(Buff, 1, BUFFSIZE, stdin); 
        if (ferror(stdin)) { 
          fprintf(stderr, "Read error\n"); 
          exit(-1); 
        } 
        done = feof(stdin); 
  
        if (! XML_Parse(p, Buff, len, done)) { 
          fprintf(stderr, "Parse error at line %d:\n%s\n", 
              XML_GetCurrentLineNumber(p), 
              XML_ErrorString(XML_GetErrorCode(p))); 
          exit(-1); 
        } 
        if (done) 
              break; 
    } 
    printf("\n\n¸®½ºÆ®ÀÇ Å©±â : %d\n", user_num); 
    return 0; 
} 
 
¾ÆÁ÷ XML¿¡ ´ëÇÑ º»°ÝÀûÀÎ ½ºÅ͵𰡠¾ø´Â »óÅÂ¶ó¼­ Á¤È®ÇÑ ¿ë¾î¸¦ »ç¿ëÇÏÁö ¾Ê¾ÒÀ½À» ÀÌÇØÇØ Áֱ⠹ٶõ´Ù.

´ÙÀ½Àº MakefileÀÌ´Ù.
CPPFLAGS = 
LDFLAGS = 
LIBS = -lexpat 
CFLAGS = -O2 -march=i386 -mcpu=i686 -Wall 
 
all: testxml  
 
testxml: testxml.o 
    $(CC) -o testxml testxml.o $(LDFLAGS) $(LIBS) 
 
clean: 
    rm -rf *.o core testxml  
 

´ÙÀ½Àº ½ÇÇà °á°ú´Ù.
[root@localhost test]# ./expat < test.txt  
User Info Version is 1.0 
 
==> SUBJECT (JOINC USER INFO) 
==> AUTHOR (yundream) 
==> EMAIL (yundream@joinc.co.kr) 
==> VERSION (1.0) 
==> DATE (2004/01/24) 
================== 
==> NAME (yun SanHa) 
==> ID (SanHa) 
==> EMAIL (SanHa@joinc.co.kr) 
==> BIRTH : sun (1987/01/02) 
================== 
==> NAME (yun dream) 
==> ID (dream) 
==> EMAIL (dream@joinc.co.kr) 
==> HOME (http://www.joinc.co.kr) 
==> BIRTH : moon (1978/11/12) 
 
 
¸®½ºÆ®ÀÇ Å©±â : 2 
 

8 Âü°í¹®Çå

  1. [http]expat ȨÆäÀÌÁö;
  2. [http]expat ¼Ò°³¹®¼­
  3. [http]A Technical Introduction to XML
  4. [http]Extensible Markup Language (XML) 1.0 (Second Edition)
  5. [http]XML (eXtensible Markup Language) Introduction


Cache Error
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.