[웹 서비스 개발] XML Syntax and Editors/ Validator (2)

김광일·2024년 9월 3일

웹 서비스 개발

목록 보기
3/45
post-thumbnail

About XML

[9] Element Atributes (요소 속성)

  1. Attribute는 특정 element와 관련된 데이터를 포함하도록 설계되었다.
  2. Attribute는 항상 따옴표로 묶어야 한다. (작은 따옴표 또는 큰 따옴표도 가능)
<person gender="female" />
<person gender='female' />
<gangster name='George "Shotgun" Ziegler' />
<gangster name="George &quot;Shotgun&quot; Ziegler" />

Elements vs Attributes

: attributes를 언제 사용해야 하는지, XML에서 element를 언제 사용해야 하는지에 대한 규칙은 없다.

Avoid XMl Attributes (XML 속성 방지)

  1. 한 속성에 여러 값을 포함할 수는 없다.
  • ex) <book authors = "John Doe, Jame Smith, Bob Johnson"/>
  1. 속성은 트리 구조를 포함할 수 없다. (element 추가)
  • ex) <book authors="John Doe, <author>Jame Smith</author>, Bob Johnson"/>
  • 올바른 코드 (1, 2번째 둘 다 해당)
    <book>
      <authors>
        <author>John Doe</author>
        <author>Jame Smith</author>
        <author>Bob Johnson</author>
      </authors>
    </book>
  1. 속성은 쉽게 확장할 수 없다. (세미콜론 사용)
  • ex) <book authors="John Doe; Jame Smith; Bob Johnson" publicationYear="2024"/>
  • 올바른 코드
    <book>
      <authors>
        <author>John Doe</author>
        <author>Jame Smith</author>
        <author>Bob Johnson</author>
      </authors>
      <publicationYear>2024</publicationYear>
    </book>

[10] XML DTD (Document Type Definition)

: XML 문서의 구조를 정의하는 데 사용되며, 이를 통해 XML 문서가 특정 형식을 따르고 있는지 확인할 수 있다.

'#PCDATA' (Parsed Character Data)

: 텍스트 데이터를 포함할 수 있다는 것을 의미한다.

  • 다른 의미로는, 다른 XML 태그나 자식 요소들은 포함될 수 없다는 것을 의미한다.
  • '#' 기호는 PCDATA가 일반적인 의미의 앨리멘트가 아니라는 것을 나타내기 위해서 붙이는 것으로, 예약된 이름 지시자(reserved name indicator)이다.

!Element 선언 문법

DTD 내부 서브셋

  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  <!DOCTYPE food [
    <!ELEMENT food (name,type,cost)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT type (#PCDATA)>
    <!ELEMENT cost (#PCDATA)>
  ]>
  <food>
      <name>상추</name>
      <type>야채</type>
      <cost>2000</cost>
  </food>
  • DTD가 XML 파일 내부에서 선언되면, 그 선언은 반드시 <!DOCTYPE>안에 위치해야 합니다.

DTD 외부 서브셋

data.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE food SYSTEM "food.dtd">
<food>
    <name>상추</name>
    <type>야채</type>
    <cost>2000</cost>
</food>

food.dtd

<!ELEMENT food (name,type,cost)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT type (#PCDATA)>
<!ELEMENT cost (#PCDATA)>

발생하는 문제 예시

  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  <!DOCTYPE food [
    <!ELEMENT food (name,type,cost)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT type (#PCDATA)>
    <!ELEMENT cost (#PCDATA)>
  ]>
  <food>
      <names>상추</names>
      <type>야채</type>
      <cost>2000</cost>
  </food>
  • DTD에서는 name이라는 요소가 필요하지만, 실제 XML 문서에서는 names 요소를 사용했기 때문에, 이 문서는 DTD와 일치하지 않아서 유효하지 않다.
    -> 따라서 names를 name으로 바꾸거나, 정의한 내용을 바꿔야 한다.

[11] Tag Overlapping (태그 중복)

첫 번째 : 여는 태그 / 닫는 태그의 순서는 올바르게 해야 한다.

  • 잘못된 경우
    <tag>
        <B>bold face <I>bold itatlic </B> italic <I>
        <!-- </I>와 </B>의 순서가 잘못되었다.-->
    </tag>
  • 올바른 경우
    <tag>
        <B>bold face <I>bold itatlic </I> italic <B>
    </tag>

두 번째 : Case-Sensitive Element Name (대소문자 구분 요소 이름)

  • 잘못된 경우
    <MEMO>
        <TO> To : Eugene 유진 </tO>
        <!-- <TO>로 시작했지만, </TO>가 아닌 </to>로 마무리되었다.-->
        <FROM> From : Hong, Gil-DOng </FROM>
        <CONTETS> Can we meet tomorrow? </CONTETS>
    </MEMO>
  • 올바른 경우
    <MEMO>
        <TO> To : Eugene 유진 </TO>
        <FROM> From : Hong, Gil-DOng </FROM>
        <CONTETS> Can we meet tomorrow? </CONTETS>
    </MEMO>

profile
안녕하세요, 사용자들의 문제 해결을 중심으로 하는 프론트엔드 개발자입니다. 티스토리로 전환했어요 : https://pangil-log.tistory.com

0개의 댓글