Java
Java XML standalone
승모근뭉치
2023. 1. 13. 10:52
프로젝트 내 book01.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
선언부 : version, encoding, standalone 속성이 있다.
standalone 은 ...
xml parser 가 요 작성된 문서를 해석하는데 외부문서를 참조하는 경우가있고
혼자 알아서 요 문서만 가지고 바로 사용하는 경우가 있습니다. 외부문서 참조않고
현재 이 문서를 독자적으로 바로 해석을 하겠다는 속성값이 yes no는 외부문서를
참고를 해야한다는 의미이다.
version: XML 권고안 버전을 지정
encoding : 문서의 인코딩 방식을 지정
standalone = yes|no : 문서를 해석할 때 외부문서를 참조 여부 지정
XML 문서는 단순한 텍스트 파일이기때문에 각국언어를 이용해저장가능한것이다.
다국어언어를 이용할수있게 할건지 영어만으로저장할건지 설정가능 인코딩부분이 잘못
이 된다면 아예 저장이 안됩니다. 이걸 꼭 설정해야 하죠. 가장 많이 사용하는인코딩
체계는 ascii 알파벳을십육진수형태로표시한다.아스키는 거의 1바이트.키보드상의문
자들은 거의다아스키형식으로표현이가능하다는거죠.프로세서가 인코딩방식을 이용해서
아스키방식을 해석이 가능하다는것이죠. 1바이트 문자로는 ISO-8895-1 라는 코드
가있습니다. 이것은 아스키문자의 코드를 갖다가 그대로전부다수용을하고있습니다.요
코드체계는 서유럽에서사용하는문자들까지사용할수있는형태의문자코드집합.ISO-8895-1
로 해놓고 만약에 한글로 저장한다면 저장이 안됩니다. 이 문자체계는1바이트로저장
할수있는문자체계라한글로저장하면바로에러가난다.한글은 euc-kr형태로인코딩형식을
지정해주면되는데요요것은ksc5601표준안인데요보통 완성형 한글을 표현할때 사용을하는
데 이체계가 바로 2바이트 체계입니다.하나의문자한글은2바이트로저장이된다는거죠.몇
년전만해도 euc-kr 코드체계로 데이타를모두사용했어요.이경우영문까지모두표현이
가능하다.최근에는다국어언어체계유니코드를많이사용하죠.3
바이트체계..등모두포함하는게utf-8인데기존의인코딩체계를 모두포함합니다.유니코드
에는utf-8,utf-16체계가있고utf-8은 아스키문자체계를그대로허용하기도하고2바이
트나그이상의인코딩방식을함께 포함을하고있습니다.유니코드체계에서 한글의경우3바이
트로인코딩을하게되구요.아스키무나로이루어진그런문자들은1바이트로동일하게인식을합
니다.utf-8은기존의아스키코드체계와모두호환이가능하기때문에인터넷에서교환할때
선호를합니다.될수있으면utf-8로형식을잡아주시면되겠구요.인코딩방식을 기재하지않으
면xml parser 자체가 해석을 못하여 저장도 안된다.다큐먼트형식과 프로세싱지시자
는생략해도무방합니다.외부문서를참조시에는있어야합니다.
DOCTYPE은 기본적인 예약어
문서유형을 선언하는 방식
1. <!DOCTYPE 루트엘리먼트 SYSTEM "SYSTEM 식별자">
XML 문서를 비공개적으로 사용할 때 사용하는 예약어 시스템
현재문서의 이름만 적으시면 된다는거죠 문서의경로와함께이름만
2. <!DOCTYPE 루트엘리먼트 PUBLIC "PUBLIC 식별자" "SYSTEM 식별자">
공개적으로 사용을 하겠다.앞의퍼블릭 식별자는
DTD를 일단 참고해야 하니깐 DTD를 개발한 회사라던지 유지보수업체들의 정보를기록
하도록 되었습니다.뒤의시스템 식별자는 해당 참조하고자 하는 식별자를 적어주면되죠
public 식별자
"국제공인업체유무//개발및 유지보수//DTD 이름과 버전//개발언어"
예를들어 이경우 HTML 같은 경우 퍼블릭으로 사용을 하죠
해당 HTML문서 같은 경우 해당없체의 유지보수와DTD이름을 모두공개를하고
있으며 시스템식별자도 이용합니다.그 시스템식별자같은경우 DTD문서들이
전부들어가있는거죠.
3. <!DOCTYPE 루트엘리먼트 SYSTEM [DTD정의부]>
내부정의에서 사용하는 경우 외부 문서를 참조하지 않을 경우 내부에서 DTD정의부
가있겠죠 그를 이용해서 해당 문서를 내부에서 참조해서 처리하는 경우로 STANDALONE
값이 선언부에서 YES로 설정해줘야 되겠죠.문서 유형 설정에서 요와같이도 설정가능.
DTD:사용자.어떤참조문서를 참고할때 이 DTD를 참고해서 우리가 해석을해줘야되거든요
이러한 문서를 참고해야만 어떤 사용자가 작성한 문서를 해석할 수 있는 그러한
문서 유형을 선언하는 방식에는 외부파일이 있는 경우, 외부파일이 있으면서 공개된 DTD를
사용하는 경우, 내부에 정의해서 사용하는 경우
DTD(Document Type Definition, 문서 원형 정의 document type definition)
사용자가 작성한 태그들의 의미를 다른 사용자가 파악할 수 있도록, XML문서가 태그 정의를
참조할 수 있도록 하는 선언파일
[엘리먼트 작성 규칙]
. 루트 엘리먼트는 한번만 작성한다.
. 루트 엘리먼트는 여러개의 자식 엘리먼트를 가질 수 있다.
. 루트 엘리먼트 아래 자식 엘리먼트들은 트리구조로 구성된다.
. 엘리먼트는 시작태그와 끝태그로 구성
. 엘리먼트의 이름에는 공백이나 특수문자가 들어갈 수 가 없다. '_', '-', '.', ':'은 제외된다.
. 엘리먼트 이름의 시작은 문자나 '_'만 가능하다.
. 엘리먼트 이름은 xml로 시작할 수 없다.
. 엘리먼트 이름은 대소문자 구별한다.
. 엘리먼트의 시작태그와 끝태그는 중첩되어 사용될 수 없다. 시작태그안에 시작태그 또 있을 수 없다.
. 엘리먼트이 시작태그와 끝태그는 이름이 동일해야한다.
. 엘리먼트의 시작태그는 <로 시작하고 끝태그는 </로 시작한다.
. 엘리먼트 태그에서 '<'와 '</' 다음에는 공백이 올 수 없다. (validator가 다 검사한다.)
. 내용부가 없는 엘리먼트는 <엘리먼트/>와 같은 형식으로 시작 태그와 끝태그를 혼합해서
사용해도 된다.
. 엘리먼트는 속성과 내용부를 가질 수 있다.
예>
<name last = "김">관우</name>
. 끝 태그에는 속성을 사용할 수 없다.
. 엘리먼트 내용부에서 이미 예약된 '&'나 '<' 같은 기호는 사용할 수 없다.
<엘리먼트>
<이름> <김관우>&<이민우> </이름>
[다음과 같이 바꿔서 사용한다.
<이름> <김관우>& <이민우> </이름>
참고 : "("), '(') 년도입력할때 어포스트로피 이용
]
</엘리먼트>
이와같은 <과&는 예약어라 이런 내용부를 만들수가 없습니다. 빌트인 엔티티라는
내장 엔티티를 사용해야 <이나 &를 사용할 수 가 있다. 내장된 엔티티는 <
> & 요런 것들이다.
CDATA 섹션 : XML 파서가 해석하지 않고 바로 응용프로그램에
전달하기 위한 문자 데이터를 사용하고 자 할때 CDATA섹션내에 기록(정의)
정의 형식: <![CDATA[ 문자 데이터 ]]>
요 문자 데이터는 XML 파서가 해석하지 않겠다는 의미
PCDATA(Parsed Character DATA) : XML파서가 해석이 가능한 데이타
XML 파서가 해석 가능한 문자데이터 문자데이터 안에 XML 권고안에 있는
그런 문자들이 쓰여져 있는지 확인하고, 내장 엔티티들도 XML 파서가 엔티티
를 참조를 해서 해석을 할 수 있다라는 거죠 요런 것들이 PCDATA
CDATA 섹션 내에서는 부등호라던지 이러한 문자들을 마음대로 사용할 수 있다
는거죠 CDATA 섹션과 PCDATA를 구분하셔야 한다는거죠.
마크업 언어 개발의 의미 Document Type Definition DTD 문서 원형 정의
사용자가 작성한 태그들의 의미를 다른 사용자가 파악할 수 있도록 또는 xml문서가
태그 정의를 참조할 수 있도록 하는 선언 파일. DB 로 이용하는 XML XML은 데이터
로서 전달할때 프로토콜이 필요한데 예를들어 HTTP처럼 마크업 언어 개발의의미는 어떤
프로토콜의통일을 의미한다고볼수있겠습니다.DTD를 만듦으로써 그런 프로토콜의통일을
의미한다고보시면되죠.문서의통일화라는것은업무를상당히효율적으로할수있고업무의복잡성도
해결하고어떤자동화도해결할수있다.어떤공통된프로토콜을만들기때문에쉽게쉽게데이타문서
를교환할수있다는겁니다.XML은 메타언어이다.즉 DTD나 Schema를 이용해서 xml문서의
구조를 정의함으로서 새로운마크업 언어를개발할수있다.일종의약속이필요한데데이타를주고
받는데어떤복잡함제거와자동화제어할수있으므로훨씬더데이타교환을효율적으로할수있기때문
이다.새로운마크업언어를개발하면(=dtd를 만든다는것)모든xml에대한어떤구조들을dtd
에서정의하기때문에사람과사람사이의데이타교환뿐아니라응용프로그램과응용프로그램사
이의 데이타교환을위해서도 dtd가 개발되어야한다는의미입니다.여러분이html을만들게
되면그 html은어디서해석하죠그html들을웹브라우저들을통해서그문서를보게됩니다.이때에
요웹브라우저는이html을자동으로자기가알아서해석해서사용자들한테문서를보여주게되죠
요때웹브라우저는하나의응용프로그램이에요.요프로그램은html을자동으로해석해서보기좋게
사용자에게제공.html은일종의마크업언어입니다.웹브라우저가어떻게html이해해서출
력해주나면여기에또다른 DTD가있기때문에.이 DTD를이용해서웹브라우저가HTMLD의
각종태그들을해석한다는거죠.이공개적인퍼블릭적인다큐먼트유형에서공개적인HTML DTD를
만들어놓고그DTD를웹브라우저가해석하기때문에사용자에게보여주게되는거죠.새로운마크
업언어를만들면DTD구조를만들어서응용프로그램이그것을해석할수있도록해야한다는겁니다.
DTD구조정의대로웹브라우저가알기쉽게해석해서프로그램화해서사용자들에게보여준다는거죠
마크업언어는DTD로정의되어있는것을해석을해서데이타교환을할때사용한다라는점이아주중요
합니다.
유효한 문서의 개념 특정 DTD구조 대로 작성된 문서를 해당 DTD에 대해 유효한
문서라 한다.VALID한 문서. Well-formed + 특정 마크업 언어(DTD or Schema)
XML형태에 잘 맞게 꾸며져있는문서와 DTD의 구조대로 제대로 정의가 되어있느냐.
이것이 바로 유효한문서의개념이됩니다 HTML의 DTD가 있습니다. 웹브라우저의경우
이것은 공개적인문서형식으로써 모든어떤HTML을사용하는응용프로그램에서는 이 DTD를
공개적으로다노출이되어서이DTD를사용한다.웹브라우저는이HTML DTD를완벽하게이해하고
있구요.어떤 다른 마크업언어로 작성된문서를웹브라우저에게넘겨주게되면웹브라우저는
그문서를해석할수없겠죠.왜냐하면HTMLDTD를 해석할수있도로설정되어있기때문에따라서
웹브라우저는다른DTD문서를해석할수없다고출력하게되는거죠.XML = 1.0 XML문법권고안대로
잘짜여져있으면서DTD 스키마처럼 잘짜여져있는구조에맞게되있는거를유효한문서라고합니다.이건
넓은의미의개념이되겠고.C라는 DTD가 있다고가정했을때 이 DTD를 시스템에서도 이해할수있고
이 C라는 DTD를 토대로 문서를만들었다면 새로만들어진 X라는 문서는 넓은의미에서도
유효한 문서가될수있구요.시스템에서도 유효한 문서라 이경우에는 좁은 의미에서의 유효한
문서가됩니다. 유효한 문서란 시스템에서도 유효하며 DTD구조에서도 잘짜여져야하는문서라는
거.
dtd에는 내부dtd와 외부 dtd가 있습니다. 서두에 데이타유형선언이들어갑니다.
dtd가 외부에파일형태로형성되있으면 외부dtd xml문서내에 어떤dtd가 정해져있다면
내부 dtd라고설명합니다. 내부 DTD서브셋 작성 위치 마크업 언어에대한 정의가
xml 문서 내부에서작성되는것을 내부dtd서브셋이라한다.대부분은 내부 dtd
서브셋은 주로 외부 DTD 서브셋의 일부 내용을 재정의해서XML문서에 적용할
목적으로 이용된다.내부DTD형태로어떤문서를 만들지는않습니다.아주특별한내용을
제외를하구요.내부DTD는 거의잘사용하지않는다.
외부DTD서브셋 작성위치
외부의DTD형태의파일형태로만들고별도의파일을참조해서문서를만듦
외부 DTD서브셋은 "dtd"라는 확장자를 사용한다. 확장자 자체는 의미없음
마크업 언어에 대한 정의가 별도의 파일로 작성된 것을말한다.
새로운 마크업 언어를 개발한다는 것은 새로운 외부 DTD 서브셋을 작성한다는것
하나의XML문서가있다.여기에는서두가있고본문이있고나머지기타영역이있다.서두영역
에는 내부 dtd 셋이 들어갈수있습니다.이것이 내부dtd의 작성위치가 되는거구요
외부 dtd같은경우 xml문서와 별개로 여기 xml문서가 있구요.그옆에 이 xml
문서를 정의하는 외부파일.dtd가 있습니다. 이 외부파일.dtd를 참조합니다.xml
파일이.
-->
<book>
<책제목>XML basics</책제목>
</book>
<!-- 선언부 다음에는 바로 엘리먼트를 만들수있습니다 북이라는 태그는 시작
태그가 되는거죠 루트태그.루트태그는 무조건 한번만 사용할 수 있습니다.
엘리먼트는 본문에.처음에는 루트엘리먼트들어가는부분.두번째는 루트엘리먼트안
내부 엘리먼트.루트엘리먼트는 문서선언부에서 루트엘리먼트를 적어주셔야 독타입에서
역시 루트엘리먼트를 book으로 지정해야.이 루트엘리먼트는 해당문서의 모든
부모역할을하는겁니다. 자바프로그램작성할때 자바클래스명으로 저장하는거처럼 클
래스명과동일하게 파일명을 만들듯이 xml만들때 루트엘리먼트 이름을 똑같이 지정을
해줘야 합니다.-->