### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
@@@ : 태그 용도 
,,, : 같은 항목 내에 구분 기호

목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드 또는 실습
4. 과제

###################################
1. 이론 및 정보
-----------------------------------
          5) ATTRIBUTE 선언
                    - <!ATTLIST 엘리먼트명
                              속성명    속성유형    디폴트 선언
                              ...
                      >
                    - 속성 유형
                              CDATA : 문자 데이터
                              ENUMERATION : DTD에 나열된 값 중 하나가 와야함
                              ID : 유일한 값을 지정
                              IDREF/IDREFS : ID 값을 참조
                              NMTOKEN/NMTOKENS : 이름 작성 규칙을 준수하는 데이터만 사용
                              NOTATION : dtd에 명시적으로 선언된 notation명만 사용 가능
                              ENTITY : dtd에 명시적으로 선언된 entity만 사용 가능

          6) Entity 선언(재사용 될 객체를 별도로 선언해두고 사용)
                    - XML 문서를 구성하는 물리적인 저장 단위
                    - 종류(XML,DTD 같은 문서도 Entity)
                              도큐먼트 엔티티(XML)
                              DTD 엔티티(DTD)
                              Built-in 엔티티(기존에 만들어진 것들 - &nbsp;,&copy;,&lt;,&gt;...)

                              : DTD안에 만들면 '내부'
                              : 별도의 파일로 따로 만들어졌으면 '외부'

                              : XML에서 참조해서 쓰는 경우 '일반'
                              : DTD에서 참조해서 쓰는 경우 '파라미터'

                              : 파싱이 가능하냐, 분석이 가능한 경우, 문자 데이터인 경우 parsed 
                              : 파싱이 불가능 한 경우, 문자데이터가 아닌 경우(이미지,동영상...) unparsed

                              내부 일반 parsed 엔티티
                              외부 일반 parsed 엔티티
                              외부 일반 unparsed 엔티티
                              내부 파라미터 엔티티
                              외부 파라미터 엔티티

(5) 네임 스페이스(자바 패키지와 비슷)
이름 충돌을 방지하기 위해서 씀

     (1)문법
               xmlns:접두사명="네임스페이스 이름"   
               네임스페이스 이름은 중복되지 않는 값, 대부분 URI가 들어감

               네임스페이스 이름 일반적인 URI 작성 방법
                    프로토콜명://웹서버명.도메인이름/작성년도/구체적인 이름
               ------------------------------------------------------------
               기본 네임스페이스 - 접두사가 없는 것을 쓸 수 있음
               xmlns="네임스페이스 이름"
-----------------------------------
* 네임 스페이스 필요성에 대한 예시

CML(고객관리 언어 만듬) 
-----------------------
<?xml version="1.0">
<정보>
          <고유번호>1111111-1111111</고유번호>
          <이름>홍길동</이름>
          ...
</정보>

PML(상품관리 언어 만듬)
-----------------------
<?xml version="1.0">
<정보>
          <고유번호>LC100</고유번호>
          <이름>캠코더</이름>
          ...
</정보>

위 고객이 아래 상품을 구입했음

OML(주문관리 언어)
------------------
<?xml version="1.0">
<주문정보>
          <주문번호>1</주문번호>
          <주문수량>10</주문수량>
          <결재>
                    <방법>현금</방법>
                    <금액>9000000</금액>
          </결재>

          <고유번호>1111111-1111111</고유번호>
          <이름>홍길동</이름>

          <고유번호>LC100</고유번호>
          <이름>캠코더</이름>
</주문정보>

프로그래밍시 고유번호로 고객을 조회할 수가 없음!
문제 발생!!
그래서 태그명 앞에 접두사를 사용(JSP에서 <jsp:, <c: ...)
동일한 태그가 생길 것을 미리 방지 하기 위해서 사용

아래와 같이 해결

OML(주문관리 언어)
------------------
<?xml version="1.0">
<주문정보>
          <주문번호>1</주문번호>
          <주문수량>10</주문수량>
          <결재>
                    <방법>현금</방법>
                    <금액>9000000</금액>
          </결재>

          <고객:고유번호>1111111-1111111</고객:고유번호>
          <고객:이름>홍길동</고객:이름>

          <상품:고유번호>LC100</상품:고유번호>
          <상품:이름>캠코더</상품:이름>
</주문정보>

접두사를 쓰기위해서는 반드시 네임스페이스가 선언되어 있어야함!

네임스페이스를 사용되는 태그들을 포함하는 태그에서 사용

네임스페이스 사용한 예제

OML(주문관리 언어)
------------------
<?xml version="1.0">
<주문정보 xmlns:고객="http://www.netsong7.com/2015/Custom"
          xmlns:상품="http://www.netsong7.com/2015/Product"
          xmlns:="http://www.netsong7.com/2015/Order">
          <주문번호>1</주문번호>
          <주문수량>10</주문수량>
          <결재>
                    <방법>현금</방법>
                    <금액>9000000</금액>
          </결재>

          <고객:고유번호>1111111-1111111</고객:고유번호>
          <고객:이름>홍길동</고객:이름>

          <상품:고유번호>LC100</상품:고유번호>
          <상품:이름>캠코더</상품:이름>
</주문정보>

----------------------------------- 
* XML 엔진
XML을 해석하는 엔진이 브라우저, 운영체제 마다 다름

MSXML,...

아래와 같이 설치되어 있음


----------------------------------- 

* XML 설계
데이터를 어떤식으로 저장하겠다는 의미
데이터를 담을 수 있는 언어를 만들 수 있음
소비자가 아닌 생산자임
----------------------------------- 
* JAVA에서의 XML 활용(여기서 배우는 내용이 안드로이드에서 그대로 쓰임)
1. DOM
     - DOM은 XML 전체 데이터를 메모리에 올릴때,
     전체 데이터를 받아서 트리 구조로 만든뒤 접근할 수 있게 만들어 준다 
     - 문서의 양이 적을때 주로 사용

     장점
     - 전체 데이터에 대한 구조가 한눈에 파악이 된다
     - 접근이 매우 쉽고 이동이 편함
     
     단점
     - 메모리 부담(모든 노드를 다 받음)

2. SAX
     - 필요한 태그만, 일부분만 메모리에 로드한다
     움직이는 동선에 따라서 필요한 부분만 불러오는 방식
     - 문서의 양이 크면 주로 사용

     장점
     - 메모리 부담이 없음
     - 속도 빠름
     
     단점
     - 전체 데이터에 대한 파악이 힘듬
     - 데이터를 내 맘대로 움직이기 힘듬(지나간 데이터 못 불러옴)
-----------------------------------  
###################################
2. 설정 및 그 밖에
-----------------------------------
----------------------------------- 
###################################
3. 소스코드 또는 실습 
-----------------------------------
3-1
생성 - XML 연습 - ex04.dtd를 xml로 만듬
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex04.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 
booklist SYSTEM "ex04.dtd">
<booklist>    
     <book kind="소설" price="10000" >
          <title>홍길동전</title>
          <author>허균</author>
          <image>c:\img\hong.gif</image>
     </book>
     <book kind="수필" nation="국내" >
          <title>빛과 그림자</title>
          <author>아무개</author>
          <image>c:\img\light.gif</image>
     </book>
</booklist>
-----------------------------------  
3-2
생성 - XML 연습 - Entity - 내부 엔티티 생성
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex05.dtd

<?xml version="1.0" encoding="UTF-8"?>

<!ENTITY kr "대한민국">
<!ENTITY fr "프랑스">
<!ENTITY us "미국">

<!ELEMENT booklist (book*)>
     <!ELEMENT book (title, author, nation)>
          <!ELEMENT title (#PCDATA)>
          <!ELEMENT author (#PCDATA)>
          <!ELEMENT nation (#PCDATA)>
         
<!ATTLIST author
     nation ENTITY #IMPLIED    
>
-----------------------------------  
3-3
생성 - XML 연습 - Entity - 내부 엔티티 사용
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex05.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE booklist SYSTEM "ex05.dtd">
<booklist>    
     <book>
          <title>홍길동전</title>
          <author nation="&kr;">허균</author>
          <nation>&kr;</nation>
     </book>
     <book>
          <title>빛과 그림자</title>
          <author nation="&fr;">아무개</author>
          <nation>&fr;</nation>
     </book>
</booklist>
----------------------------------- 
3-4
생성 - XML 연습 - Entity - 외부 엔티티
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex06.dtd

<?xml version="1.0" encoding="UTF-8"?>

<!ENTITY kind SYSTEM "ex06_entity.xml">

<!ELEMENT booklist (kinds,book+)>
     <!ELEMENT kinds (kind*)>
          <!ELEMENT kind (#PCDATA)>
     <!ELEMENT book (title, author)>
          <!ELEMENT title (#PCDATA)>
          <!ELEMENT author (#PCDATA)>
         
<!ATTLIST kind
     id ID #REQUIRED    
>
<!ATTLIST book
     id ID #REQUIRED
     kind IDREF #REQUIRED
>
----------------------------------- 
3-5
생성 - XML 연습 - 
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex06_entity.xml

<?xml version="1.0" encoding="UTF-8"?>
<kinds>
     <kind id="k1">수필</kind>
     <kind id="k2">소설</kind>
     <kind id="k3">시</kind>
</kinds>
----------------------------------- 
3-6
생성 - XML 연습 - 
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex06.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE booklist SYSTEM "ex06.dtd">
<booklist>
<!--
     <kinds>
     <kind id="k1">수필</kind>
     <kind id="k2">소설</kind>
     <kind id="k3">시</kind>
     </kinds>
-->
     &kind;
     <book kind="k1" id="b1">
          <title>시인과 도둑</title>
          <author>임꺽정</author>
     </book>
    
     <book kind="k1" id="b2">
          <title>JSP</title>
          <author>고슬링</author>
     </book>
</booklist>
----------------------------------- 
3-7 
생성 - XML 연습 - 파라미터 엔티티
Workspace : ~\JSP\EclipseWork
/XmlApp/WebContent/ex07.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!-- % 는 파라미터 엔티티, maninfo를 씀 -->
<!-- DTD 안에서만 사용 -->
<!ENTITY % maninfo "(name, age, tel)">

<!ELEMENT members (chief|manager|waiter)*>
<!--<!ELEMENT chief (name, age, tel)>-->
<!--<!ELEMENT manager (name, age, tel)>-->
<!--<!ELEMENT waiter (name, age, tel)>-->

     <!ELEMENT chief %maninfo;>
     <!ELEMENT manager %maninfo;>
     <!ELEMENT waiter %maninfo;>

          <!ELEMENT name (#PCDATA)>
          <!ELEMENT age (#PCDATA)>
          <!ELEMENT tel (#PCDATA)>
-----------------------------------  
3-8 
생성 - XML 활용(JAVA) - DOM
Workspace : ~\JSP\EclipseWork
/XmlApp/src/dom/Ex1.java

package dom;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;


public class Ex1 {

     public static void main(String[] args) throws ParserConfigurationException, FileNotFoundException, SAXException, IOException {
          //인스턴스를 생성하는 팩토리 생성
          DocumentBuilderFactory factory =
                    DocumentBuilderFactory.newInstance();
          
          DocumentBuilder builder = factory.newDocumentBuilder();
          
          //XML을 메모리에 불러옴, 트리 구조로
          Document doc = builder.parse(new FileInputStream("D:\\test.xml"));
          
          //root 위치를 가져옴
          Element root = doc.getDocumentElement();
          System.out.println(root.getNodeName());
          System.out.println(root.getNodeValue());
          System.out.println(root.getNodeType());
          System.out.println("------------------------------");

          //공백이 나옴, 그래서 xml에 공백을 제거 
          Node n1 = root.getFirstChild();
          System.out.println(n1.getNodeName());
          System.out.println(n1.getNodeValue());
          System.out.println(n1.getNodeType());
          System.out.println("------------------------------");
          System.out.println(n1.getFirstChild().getNodeName());
          System.out.println(n1.getFirstChild().getNodeValue());
          System.out.println(n1.getFirstChild().getNodeType());
          System.out.println("------------------------------");
          System.out.println(n1.getFirstChild().getFirstChild().getNodeName());
          System.out.println(n1.getFirstChild().getFirstChild().getNodeValue());
          System.out.println(n1.getFirstChild().getFirstChild().getNodeType());
          System.out.println("------------------------------");
          System.out.println(n1.getFirstChild().getLastChild().getNodeName());
          System.out.println(n1.getFirstChild().getLastChild().getNodeValue());
          System.out.println(n1.getFirstChild().getLastChild().getNodeType());
          System.out.println("------------------------------");
          System.out.println(n1.getLastChild().getFirstChild().getNodeName());
          System.out.println(n1.getLastChild().getFirstChild().getNodeValue());
          System.out.println(n1.getLastChild().getFirstChild().getNodeType());
          System.out.println("------------------------------");
          System.out.println(n1.getLastChild().getLastChild().getNodeName());
          System.out.println(n1.getLastChild().getTextContent());
          System.out.println(n1.getLastChild().getLastChild().getNodeType());
          System.out.println("------------------------------");
          Node n2 = root.getLastChild();
          System.out.println(n2.getNodeName());
          System.out.println(n2.getNodeValue());
          System.out.println(n2.getNodeType());
     }

}
-----------------------------------  
3-9 
생성 - XML 활용(JAVA) - DOM
Workspace : ~\JSP\EclipseWork
/XmlApp/src/dom/test.xml
D:\\test.xml  에 복사해서 공백을 전부 제거함

<?xml version="1.0" encoding="UTF-8"?>
<students>
     <student>
          <name>홍길동</name>
          <age>18</age>
     </student>
     <student>
          <name>임꺽정</name>
          <age>24</age>
     </student>
</students>
----------------------------------- 
###################################
4. 과제
-----------------------------------
4-1




----------------------------------- 
4-2
----------------------------------- 
4-3
----------------------------------- 
4-4
----------------------------------- 
4-5
-----------------------------------
###################################
5. 과제 해결
-----------------------------------
-----------------------------------
###################################
6. 기타
----------------------------------- 

----------------------------------- 


'OpenFrameWork' 카테고리의 다른 글

오픈프레임워크_Day60  (0) 2015.06.09
오픈프레임워크_Day59  (0) 2015.06.08
오픈프레임워크_Day57  (0) 2015.06.04
오픈프레임워크_Day56  (0) 2015.06.03
오픈프레임워크_Day55  (0) 2015.06.02
,