XML 속성

XML 요소는 시작 태그에서 속성을 포함할 수 있으며, HTML과 유사합니다.

속성(Attribute)은 요소에 대한 추가(추가) 정보를 제공합니다.

XML 속성은 따옴표를 추가해야 합니다

속성 값은 따옴표로 둘러싸여야 하며, 단일 따옴표와 더블 따옴표 모두 가능합니다.

예를 들어, 한 사람의 성별을 나타내는 <person> 태그는 다음과 같이 작성될 수 있습니다:

<person gender="female">

또는 이렇게도 됩니다:

<person gender='female'>

속성 값이 이미 두 개의 따옴표를 포함하고 있다면, 예제와 같이 단일 따옴표를 사용할 수 있습니다:

<gangster name='George "Shotgun" Ziegler'>

또는 문자 entity를 사용할 수 있습니다:

<gangster name="George "Shotgun" Ziegler">

XML 요소 및 속성

이 두 예제를 보세요:

<person gender="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>
<person>
  <gender>female</gender>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

첫 번째 예제에서 sex는 속성입니다. 두 번째 예제에서 sex는 자식 요소입니다. 두 예제 모두 동일한 정보를 제공할 수 있습니다.

XML에서는 어떤 경우에 속성을 사용하고, 어떤 경우에 자식 요소를 사용할지에 대한 규칙이 없습니다. 제 경험에 따르면 HTML에서는 속성이 편리하지만, XML에서는 속성을 피하는 것이 좋습니다. 정보가 데이터와 유사하다면, 자식 요소를 사용하세요.

제가 가장 좋아하는 방법

아래의 세 개의 XML 문서는 완전히 동일한 정보를 포함하고 있습니다:

첫 번째 예제에서 date 속성을 사용했습니다:

<note date="2008-01-10">
  <to>George</to>
  <from>John</from>
</note>

두 번째 예제에서 <date> 요소를 사용했습니다:

<note>
  <date>2008-01-10</date>
  <to>George</to>
  <from>John</from>
</note>

세 번째 예제에서 확장된 date 요소를 사용했습니다(제가 가장 좋아하는 것):

<note>
  <date>
    <year>2008</year>
    <month>01</month>
    <day>10</day>
  </date>
  <to>George</to>
  <from>John</from>
</note>

XML 속성을 피하는 것이 좋습니다?

속성을 사용할 때 고려해야 할 몇 가지 사항은 다음과 같습니다:

  • 속성은 여러 가지 값을 포함할 수 없습니다(요소는 가능합니다)
  • 속성은 트리 구조를 설명할 수 없습니다(요소는 가능합니다)
  • 속성은 확장하기 어렵습니다(미래의 변화를 위해)

데이터를 설명하는 데는 요소를 많이 사용해 주세요. 단지 데이터와 관계없는 정보를 제공하는 데는 속성만 사용해 주세요.

이런 무지한 행동을 하지 마세요(이것이 XML이 사용되어야 할 방식이 아닙니다):

<note day="10" month="01" year="2008"
to="George" from="John" heading="Reminder"
body="Don't forget the meeting!">
</note>

메타데이터의 XML 속성

때때로 요소에 ID를 할당할 수 있습니다. 이 ID 인덱스는 XML 요소를 식별하는 데 사용되며, HTML에서 ID 속성과 동일한 방식으로 작동합니다. 이 예제는 이 경우를 보여줍니다:

<messages>
  <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from>George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
</messages>

위의 ID는 단순히 다른 태그를 구분하는 식별자에 불과하며, 태그 데이터의 일부는 아닙니다.

여기서 우리가 열심히 전달하고자 하는 아이디어는, 메타데이터(데이터에 대한 데이터)는 속성으로 저장되어야 하며, 데이터 자체는 요소로 저장되어야 한다는 것입니다.