ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. ¾ÆÁÖ ¿¹Àü ¹®¼¶ó¼.. .. ¾÷µ¥ÀÕÀº Á» ±ÍÂú°í.
1 ±³Á¤ °úÁ¤
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 ÇØ¾ßÇÒ °Íµé
2.2 expat ¿¡¼ÀÇ ÇÑ±Û Ã³¸®
expat¿¡¼ ÇѱÛ(euc-kr)À» ó¸®Çϱâ À§Çؼ´Â ´ÙÀ½°ú °°Àº 2°¡Áö ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÑ´Ù.
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ÀÎÄÚµù ¹× µðÄÚµù
#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ÀÎÄÚµù ¹× µðÄÚµù troll¿¡¼ Á¦°øÇÏ´Â QT ¶óÀ̺귯¸®Áß ¹®ÀÚ¿ Á¦¾î¸¦ À§ÇÑ Qstring¶óÀ̺귯¸®´Â ÀÚüÀûÀ¸·Î ¹®ÀÚ¿¿¡ ´ëÇÑ ÀÎÄÚµù µðÄÚµù±â ´ÉÀ» Á¦°øÇÑ´Ù. º°µµ·Î QTlib¸¦ È£ÃâÇØ¾ß ÇÑ´Ù´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ iconv¿¡ ºñÇØ¼ °£´ÜÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ¸´Ï °Å±â¿¡ ¸¸Á·ÇÏ°í »ç¿ëÇß´Ù. »ç¿ë¹æ¹ýÀº °£´ÜÇÏ´Ï º°µµ·Î ¿¹¸¦ µéÁö´Â ¾Êµµ·Ï ÇϰÚÀ¸´Ï °¢ÀÚ Å×½ºÆ® ÇØº¸±æ ¹Ù¶õ´Ù. Qstring¿¡ ´ëÇÑ ³»¿ëÀº 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¿¡ ´ëÇÑ ³»¿ëÀº 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)
<?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
<!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)·Î ¿¤¸®¸ÕÆ®°£ÀÇ »óÈ£ °ü°è¸¦ Áö½ÃÇϱâ À§ÇØ »ç¿ëÇÑ´Ù.
<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)
½ºÆ®¸µ Çü¿¡´Â CDATA¶ó´Â ÅØ½ºÆ®¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ÇüÀÌ ÀÖ°í, ÅäÅ«Çü¿¡´Â ¾îÆ®¸®ºäÆ® °ªÀ» ¿¤¸®¸ÕÆ®ÀÇ °íÀ¯ ½Äº°ÀÚ·Î ¼±¾ðÇÏ´Â ID, ¾îÆ®¸®ºäÆ® °ªÀ» IDÂüÁ¶°ªÀ̳ª ÂüÁ¶°ªÀÇ ¸®½ºÆ®¸¦ ¼±¾ðÇÏ´Â IDREF³ª IDREFS, ¾îÆ®¸®ºäÆ® °ªÀ» ÇöÀç ¼±¾ðµÈ ºÎºÐÀ̳ª ¶Ç´Â µ¥ÀÌÅÍ ¿£Æ¼Æ¼ ¸í, ¿£Æ¼Æ¼ ¸í·ÉÀÇ ¸®½ºÆ®°¡ µÉ ¼ö ÀÖµµ·Ï ¼±¾ðÇÏ´Â ENTITY, ENTITIES, ¼Ó¼º°ªÀ» ¸íĪÅäÅ«À̳ª ¸íĪ ÅäÅ«µéÀÇ ¸®½ºÆ®·Î ¼±¾ðÇÏ´Â NMTOKEN, NMTOKENS ÇüÀÌ ÀÖ´Ù.
EnumerationÇüÀº ¾îÆ®¸®ºÎÆ® °ªÀ» °ýÈ£ ¾È¿¡ ¼±¾ðÇÏ¿© °ªµéÀÇ ¸®½ºÆ®¸¦ ±¸¼ºÇÏ´Â °ÍÀÌ´Ù. ¾îÆ®¸®ºäÆ® ¼±¾ð¿¡ »ç¿ëµÇ´Â µðÆúÆ® °ª¿¡´Â ´ÙÀ½°ú °°Àº 4°¡Áö ŸÀÔÀÌ ÀÖ´Ù.
<!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°³ÀÇ ¿¤¸®¸ÕÆ®¿¡ ´ëÇÑ °¢°¢ÀÇ ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇÇϰí ÀÖ´Ù.
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 ¿¤¸®¸ÕÆ®ÀÇ ¾îÆ®¸®ºäÆ® Á¤ÀÇ
À̰ÍÀ¸·Î ¸ðµç ¿¤¸®¸ÕÆ®°¡ Á¤ÀǵǾú´Ù. ÀÌÁ¦ °¢ ¿¤¸®¸ÕÆ®µéÀÇ ¾îÆ®¸®ºäÆ®¸¦ Á¤ÀÇ ÇØ¾ß ÇÑ´Ù.
<!ELEMENT USER (DocINFO, UINFO*)>
<!ELEMENT DocINFO (SUBJECT, AUTHOR, EMAIL?, Version?, Date?)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT AUTHOR (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ELEMENT VERSION (#PCDATA)> <!ELEMENT DATE (#PCDATA)>
<!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">
´ÙÀ½Àº ÁÖ¼®±îÁö Æ÷ÇÔÇÑ ¿Ï¼ºµÈ 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 |
|
|||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|