John Squirrels
레벨 41
San Francisco

자바의 XML

무작위의 그룹에 게시되었습니다
회원
안녕! 오늘 우리는 XML이라는 또 다른 데이터 형식을 소개합니다. 이것은 매우 중요한 주제입니다. 실제 Java 애플리케이션에서 작업할 때 거의 확실히 XML 관련 작업을 접하게 될 것입니다. Java 개발에서 이 형식은 거의 보편적으로 사용되므로(이유는 아래에서 알아봅니다), 이 강의를 피상적으로 검토하지 말고 모든 것을 철저히 이해하고 추가 문헌/링크도 공부하는 것이 좋습니다. 확실히 시간 낭비는 아닐 것입니다. 자, 쉬운 것부터 시작해 봅시다: "무엇"과 "왜"!

자바 XML이란 무엇입니까?

XML은 eXtensible Markup Language의 약자입니다. 여러분은 이미 마크업 언어에 익숙할 것입니다. 웹 페이지를 만드는 데 사용되는 HTML에 대해 들어보셨을 것입니다 :) XML이란 무엇입니까?  - 1HTML과 XML은 모양도 비슷합니다.
HTML 1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 1
<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
HTML2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 2
<chief>title</chief>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
즉, XML은 데이터를 설명하는 언어입니다.

XML이 필요한 이유는 무엇입니까?

XML은 원래 인터넷을 통하는 것을 포함하여 데이터를 보다 편리하게 저장하고 전송하기 위해 고안되었습니다. 이를 달성하는 데 도움이 되는 몇 가지 이점이 있습니다. 첫째, 사람과 컴퓨터 모두 읽기 쉽습니다. 이 XML 파일이 설명하는 내용을 쉽게 이해할 수 있을 것 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
컴퓨터도 이 형식을 쉽게 이해합니다. 둘째, 데이터가 일반 텍스트로 저장되기 때문에 한 컴퓨터에서 다른 컴퓨터로 전송할 때 호환성 문제가 없습니다. XML은 실행 가능한 코드가 아니라 데이터 설명 언어라는 점을 이해하는 것이 중요합니다. XML을 사용하여 데이터를 설명한 후에는 이 데이터를 전송/수신/처리할 수 있는 코드(예: Java)를 작성해야 합니다.

XML은 어떻게 구성되어 있습니까?

주요 구성 요소는 태그입니다. 다음은 꺾쇠 괄호 안에 있는 것입니다.
<book>
</book>
여는 태그와 닫는 태그가 있습니다. 닫는 태그에는 위의 예에서 볼 수 있는 것처럼 추가 기호(" / ")가 있습니다. 각 여는 태그에는 닫는 태그가 있어야 합니다. 파일의 각 요소에 대한 설명이 시작되고 끝나는 위치를 보여줍니다. 태그는 중첩될 수 있습니다! 책 예제에서 <book> 태그에는 <title>, <author> 및 <year>라는 3개의 중첩 태그가 있습니다. 이것은 한 수준의 중첩으로 제한되지 않습니다. 중첩 태그는 자체 중첩 태그를 가질 수 있습니다. 이 구조를 태그 트리라고 합니다. 자동차 대리점을 설명하는 샘플 XML 파일을 사용하여 이 트리를 살펴보겠습니다.
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
여기에 최상위 태그 <carstore>가 있습니다. 루트 요소라고도 합니다. <carstore>에는 <car>라는 하나의 하위 태그가 있습니다. <car>에는 <model>, <year> 및 <price>라는 3개의 하위 태그도 있습니다. 각 태그에는 중요한 추가 정보가 포함된 속성이 있을 수 있습니다. 이 예에서 <model> 태그에는 모델 이름을 기록하는 데 사용되는 언어를 나타내는 "lang" 속성이 있습니다.
<model lang="en">Scania R 770</model>
여기서 우리는 이름이 영어로 작성되었음을 나타냅니다. <price> 태그에는 "currency" 속성이 있습니다.
<price currency="US dollar">150000.00</price>
여기에서 자동차 가격이 미국 달러로 표시되어 있음을 나타냅니다. 따라서 XML에는 "자체 설명" 구문이 있습니다. 데이터를 설명하는 데 필요한 정보를 추가할 수 있습니다. 또한 파일 맨 위에 데이터 작성에 사용된 XML 버전 및 인코딩을 나타내는 줄을 추가할 수 있습니다. 이것을 "프롤로그"라고 하며 다음과 같이 표시됩니다.
<?xml version="1.0" encoding="UTF-8"?>
XML 버전 1.0 및 UTF-8 인코딩을 사용하고 있습니다. 이것은 필수는 아니지만 예를 들어 파일이 다른 언어로 된 텍스트를 사용하는 경우 유용할 수 있습니다. XML이 "eXtensible Markup Language"를 의미한다고 언급했는데 "확장 가능"이란 무엇을 의미합니까? 즉, 개체 및 파일의 새 버전을 만드는 데 적합합니다. 예를 들어 자동차 판매점에서 오토바이 판매도 시작하고 싶다고 가정해 보겠습니다. 즉, <carstore>의 두 가지 버전인 이전 버전(오토바이 없음)과 새 버전을 모두 지원하려면 프로그램이 필요합니다. 이전 버전은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
다음은 새롭게 확장된 것입니다.
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
오토바이에 대한 설명을 파일에 추가하는 것이 얼마나 쉽고 간단합니까 :) 게다가 오토바이에 대해 자동차와 동일한 하위 태그를 가질 필요가 전혀 없습니다. 자동차와 달리 오토바이에는 <owner> 요소가 있습니다. 이것은 컴퓨터(또는 인간)가 데이터를 읽는 것을 막지 않습니다.

XML과 HTML의 차이점

우리는 이미 XML과 HTML이 외관상 매우 유사하다고 말했습니다. 따라서 그들이 어떻게 다른지 아는 것이 매우 중요합니다. 첫째, 그들은 다른 목적으로 사용됩니다. HTML은 웹 페이지를 표시하기 위한 것입니다. 예를 들어, 웹사이트를 만드는 동안 HTML을 사용하여 "메뉴는 오른쪽 상단 모서리에 있어야 합니다. 여기에는 이러저러한 버튼이 있어야 합니다."라고 지정할 수 있습니다. 즉, HTML의 역할은 데이터를 표시하는 것입니다. XML은 인간과 컴퓨터에 편리한 형태로 정보를 저장하고 전송하기 위한 것입니다. 이 형식에는 이 데이터를 표시하는 방법에 대한 표시가 포함되어 있지 않습니다. 데이터를 읽는 프로그램의 코드에 따라 다릅니다. 둘째, 기술적 차이가 크다. HTML 태그는 미리 정의되어 있습니다. 즉, HTML 헤더(예: 페이지 상단의 큰 캡션)를 만들면 <h1></h1>만 사용됩니다. 태그(<h2></h2> 및 <h3></h3>는 더 작은 헤더에 사용됨). 다른 태그를 사용하여 HTML 헤더를 만들 수 없습니다. XML은 미리 정의된 태그를 사용하지 않습니다. 태그에 원하는 이름을 지정할 수 있습니다: <header>, <title>, <idontknow2121>.

갈등 해결

XML이 제공하는 자유는 몇 가지 문제로 이어질 수 있습니다. 예를 들어 하나의 동일한 엔터티(예: 자동차)를 프로그램에서 다른 용도로 사용할 수 있습니다. 예를 들어 자동차를 설명하는 XML 파일이 있습니다. 그러나 우리 프로그래머들은 그들 사이에 사전 합의에 이르지 못했습니다. 이제 실제 자동차에 대한 데이터 외에도 XML에서 장난감 자동차에 대한 데이터를 찾을 수 있습니다! 게다가 그들은 같은 속성을 가지고 있습니다. 우리 프로그램이 그러한 XML 파일을 읽는다고 가정해 봅시다. 실제 자동차와 장난감 자동차를 어떻게 구별합니까?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
여기서 접두사와 네임스페이스가 도움이 될 것입니다. 프로그램에서 장난감 자동차를 실제 자동차와 구별하기 위해(실제로 모든 장난감과 실제 장난감을 구별하기 위해) "진짜"와 "장난감"이라는 두 가지 접두사를 도입합니다.
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
이제 우리 프로그램은 서로 다른 엔터티를 구별할 수 있습니다! toy 접두어가 있는 모든 것은 장난감으로 취급됩니다 :) 그러나 아직 완료되지 않았습니다. 접두사를 사용하려면 각 접두사를 네임스페이스로 등록해야 합니다. 사실, "등록"은 강력한 단어입니다 :) 우리는 단순히 그들 각각에 대한 고유한 이름을 생각해내야 합니다. 클래스와 비슷합니다. 클래스에는 짧은 이름( Cat )과 모든 패키지를 포함하는 정규화된 이름( zoo.animals.Cat )이 있습니다.). URI는 일반적으로 고유한 네임스페이스 이름을 만드는 데 사용됩니다. 때때로 이것은 이 네임스페이스의 기능이 설명된 인터넷 주소를 사용하여 수행됩니다. 그러나 유효한 인터넷 주소일 필요는 없습니다. 종종 프로젝트는 네임스페이스 계층 구조를 추적하는 데 도움이 되는 URI와 같은 문자열을 사용합니다. 다음은 예입니다.
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
물론 "http://testproject.developersgroup1.companyname/department2/namespaces/real"에는 웹사이트가 없지만 이 문자열에는 유용한 정보가 포함되어 있습니다. 부서 2의 그룹 1 개발자는 "실제" 네임스페이스를 생성할 책임이 있습니다. . 새 이름을 도입하거나 가능한 충돌에 대해 논의해야 하는 경우 어디로 향해야 하는지 알 수 있습니다. 때때로 개발자는 실제 설명 웹 주소를 고유한 네임스페이스 이름으로 사용합니다. 예를 들어 전 세계 수백만 명의 사람들이 프로젝트를 사용할 대기업의 경우가 여기에 해당할 수 있습니다. 그러나 이것이 항상 수행되는 것은 아닙니다. Stack Overflow에서 이 문제에 대해 토론합니다. 일반적으로 URI를 네임스페이스 이름으로 사용하기 위한 엄격한 요구 사항은 없습니다. 임의의 문자열을 사용할 수도 있습니다. 이 옵션도 작동합니다.
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
즉, URI를 사용하면 몇 가지 이점이 있습니다. 여기에서 이에 대한 자세한 내용을 읽을 수 있습니다 .

기본 XML 표준

XML 표준은 XML 파일에 추가 기능을 추가하는 확장 집합입니다. XML에는 많은 표준이 있지만 가장 중요한 표준을 살펴보고 가장 유명한 XML 표준 중 하나인 AJAX를 가능하게 한다는 것을 알아봅니다. 다시 로드하지 않고도 웹 페이지의 내용을 변경할 수 있습니다! XSLT를 사용하면 XML 텍스트를 다른 형식으로 변환할 수 있습니다. 예를 들어 XSLT를 사용하여 XML을 HTML로 변환할 수 있습니다! 이미 말했듯이 XML의 목적은 데이터를 표시하는 것이 아니라 데이터를 설명하는 것입니다. 그러나 XSLT를 사용하면 이 제한을 해결할 수 있습니다! XML DOM을 사용하면 XML 파일에서 개별 요소를 검색, 수정, 추가 또는 삭제할 수 있습니다. 다음은 이것이 어떻게 작동하는지에 대한 작은 예입니다. books.xml 파일이 있습니다.
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J. K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
두 권의 책이 있습니다. 책에는 <제목> 요소가 있습니다. 여기에서 JavaScript를 사용하여 XML 파일에서 모든 책 제목을 가져오고 첫 번째 제목을 콘솔에 인쇄할 수 있습니다.
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
DTD("문서 유형 정의")를 사용하면 XML 파일의 엔티티에 대해 허용되는 요소 목록을 정의할 수 있습니다. 예를 들어 서점 웹 ​​사이트에서 작업 중이고 모든 개발 팀이 XML 파일의 책 요소에 대해 제목, 저자 및 연도 속성만 지정해야 한다는 데 동의한다고 가정합니다. 그러나 우리는 부주의로부터 자신을 어떻게 보호합니까? 아주 쉽게!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
여기에서 <book>에 대한 유효한 속성 목록을 정의했습니다. 거기에 새 요소를 추가하려고 하면 즉시 오류가 발생합니다!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
오류! "요소 mainhero는 여기에서 허용되지 않습니다." 다른 많은 XML 표준이 있습니다. 각각에 익숙해지고 코드를 더 깊이 파고들 수 있습니다. 어쨌든 XML에 대한 정보가 필요하면 거의 모든 것을 찾을 수 있습니다. :) 이것으로 수업이 끝납니다. 작업으로 돌아갈 시간입니다! :) 다음 시간까지!
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다