"어떻게되고 있습니까?"

"좋습니다. 불평할 수 없습니다. 오늘 Bilaabo는 JavaScript에 대해 저에게 말했습니다. 물론 모든 것은 아니지만 약간 이상입니다. 물론 아직 JS로 아무것도 작성하지 않았지만 그렇게 될 것이라고 생각하지 않습니다. 어려운."

"그리고 Ellie는 JSON 직렬화에 대해 말해줬습니다. 그리고 Jackson 프레임워크와 주석을 사용하여 '다형성 역직렬화'를 설정하는 방법을 설명했습니다."

"설마! 당신은 이제 똑똑해, 아미고! 진짜 스터드!"

"다음 몇 가지!"

"좋아. 일하자. 오늘 우리는 XML이라는 새롭고 흥미로운 주제를 가지고 있다. "

XML, XML로 직렬화 - 1

"XML은 사람이 쉽게 읽을 수 있고 프로그램이 훨씬 더 쉽게 읽을 수 있는 데이터를 나타내는 표준입니다. 다음은 예제 XML 파일입니다."

XML
<data>
<owner first="Adam" last="Shelton">
<address>London</address>
</owner>
<cat name="Missy" age="15"/>
</data>

"XML의 기초는 태그입니다. 태그는 꺾쇠 괄호(보다 큼 및 보다 작음 기호)로 묶인 단어입니다. 여는 태그와 닫는 태그가 있습니다. 각 여는 태그에는 정확히 하나의 해당하는 닫는 태그가 있습니다. 여는 태그는 속성을 가질 수 있습니다. "

"태그는 태그 내부에 중첩되어 요소 트리를 생성할 수 있습니다. 최상위 태그를 루트라고 합니다. 여기에는 하위 태그가 있으며, 하위 태그에는 자체 하위 태그가 있습니다."

"여기 몇 가지 예가 있어요:"

꼬리표 설명
< 데이터 > 데이터 태그 열기
</ 데이터 > 데이터 태그 닫기
<고양이  이름 = " Missy " age = " 15 "> 속성이 있는 태그입니다. 속성 값은 따옴표로 묶여 있습니다.
<데이터
> <소유자>
<고양이 이름 = "아가씨"/> </
소유자>
</데이터>
중첩 태그.
< 고양이 이름 = "미씨" 나이 = "15"  /> 자동으로 닫히는 태그입니다.
이러한 태그에는 닫는 태그가 필요하지 않습니다.
그리고 하위 태그를 가질 수 없습니다.
<info>
모든 종류의 정보를 여기에 입력할 수 있습니다.
</info>
태그는 텍스트 데이터를 포함할 수 있습니다.
<info>
모든 종류의
<data xxx = "yyy">
</data>
정보
<data 2xxx = "yyy"/>
여기에 올 수 있음
</info>
태그는 다른 태그와 산재된 텍스트 데이터를 포함할 수 있습니다.

"쉽게 생겼네요. 어떤 태그가 있나요?"

"모든 종류입니다. 예약된 태그가 없습니다. XML은 모든 데이터를 설명하는 언어입니다. 사람들은 자신의 요구 사항을 충족하는 태그를 제시하고 이를 사용하는 방법에 동의합니다."

"기본적으로 XML은 데이터를 컴퓨터가 이해할 수 있는 요소 트리로 작성하는 방법입니다."

"이제 알 것 같아요. 그런데 질문이 있습니다."

"JSON은 브라우저에서 서버로 데이터를 보내는 데 사용되지만 XML은 어디에 사용됩니까?"

"JSON이 사용되는 동일한 위치에서: 데이터 저장 및 전송을 위해."

"좋아, 계속하자."

"20명이 작성하는 프로그램의 데이터를 저장하는 하나의 공유 XML 파일이 있다고 상상해 보십시오. 각자 자신의 태그를 지정하고 빠르게 서로 간섭하기 시작합니다."

"태그가 고유한지 확인하기 위해 접두사가 발명되었습니다. 다음과 같이 표시됩니다."

태그 설명
< 동물 :고양이> 동물 접두사 가 붙은 고양이 꼬리표
< 동물 :고양이>
</ 동물: 고양이>
< 동물원 :고양이>
</ 동물원 :고양이>
접두사가 다른 두 개의 고양이 태그.
< 동물 : 고양이  동물원 : 이름 = "MX"> 동물 이라는 접두사 가 붙은 고양이 꼬리표 . zoo 접두사 있는 이름 속성 .

"접두사는 네임스페이스라고도 합니다. 네임스페이스라고 하면 표의 마지막 설명은 '동물 네임스페이스가 포함된 고양이 태그. 동물원 네임스페이스가 포함된 이름 속성'이 됩니다."

"그런데 Java에서 각 클래스에는 짧은 이름과 패키지 이름을 포함하는 길고 고유한 이름이 있다는 것을 기억하십니까? 이 이름은 패키지를 가져올 때도 지정됩니다."

"네."

"음, 접두사에도 고유한 긴 이름이 있으며 가져올 때도 지정됩니다. "

< data  xmlns:soap="http://cxf.apache.org/bindings/soap" >
 < 비누 :항목> 
< 비누 :info/> 
</ 비누 :항목> 
</ 데이터 >

"' xml ns :soap'은 ' XML이름 속도 SOAP'를 의미합니다 . "

"또한 접두어가 없는 고유한 태그 이름을 설정할 수 있습니다 : "

<데이터 xmlns = "http://www.springframework.org/schema/beans" 
xmlns: 비누 = "http://cxf.apache.org/bindings/soap" 
xmlns:task = "http://www.springframework .org/schema/task" > 
< 비누 :항목> 
< 비누 :정보/> 
< 작업 :정보/> 
</ 비누 :항목> 
</데이터 >

"'xmlns=…'는 빈 접두사에 대한 네임스페이스를 설정합니다. 즉, 위 예의 데이터와 같이 접두사가 없는 태그에 대한 네임스페이스를 설정합니다."

"문서에 원하는 만큼 네임스페이스를 가질 수 있지만 각각 고유한 이름을 가져야 합니다."

"알겠습니다. 왜 이러한 이름 공간에 이렇게 이상한 고유 이름이 있는 거죠?"

"일반적으로 네임스페이스 및/또는 해당 XML 태그를 설명하는 문서를 가리키는 URL을 나타냅니다."

"오늘 나에 대한 정보를 많이 버렸어. 또 뭐가 있니?"

"아직 조금 더 있어요."

"첫째, XML에는 헤더가 있습니다. XML 버전과 파일 인코딩을 설명하는 특수 행입니다. "일반적으로 다음과 같습니다."

"일반적으로 다음과 같이 보입니다."

<?xml  버전 = "1.0"  인코딩 = "UTF-8"?>
<데이터 xmlns:soap = "http://cxf.apache.org/bindings/soap">
<비누:아이템>
<비누:정보/>
</soap:item>
</데이터>

"XML에 주석을 추가할 수도 있습니다. 주석을 시작하려면 '<!--'를 사용하고 종료하려면 '-->'를 사용하십시오."

<?xml version = "1.0" encoding = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<soap:item>
<!-- <soap:info/> -->
</soap:item>
<!-- This is also a comment  -->
</data>

"여기까지는 이해합니다."

"특정 기호(< > " &)는 XML에서 특별한 의미가 있으므로 다른 곳에서 사용할 수 없습니다. 다른 문자/기호를 나타내는 데 사용되는 문자 집합인 이스케이프 시퀀스를 사용하여 이 제한을 해결할 수 있습니다. 다음은 그 중 일부입니다."

이스케이프 시퀀스 교체하는 기호
& &
" «
< <
> >
' '

"다음은 XML에 포함된 코드의 예입니다."

자바 코드 XML의 자바 코드
if (a < b)
System.out.println("a is minimum");
<코드>
만약 (a  <  b)
 System.out.println( " a는 최소입니다 " );
</코드>

"어... 별로 안 예뻐."

"Java에서 일부 문자도 이스케이프 처리된다는 사실을 기억할 것입니다. 예를 들어 "\"와 같은 것입니다. 그리고 이 시퀀스도 문자열에 쓸 때 두 번 작성해야 합니까? 그래서 이것은 일반적인 경우입니다."

"좋아요."

"오늘은 여기까지야."

"만세. 드디어 쉴 수 있겠군."