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는 단순히 다른 태그를 구분하는 식별자에 불과하며, 태그 데이터의 일부는 아닙니다.
여기서 우리가 열심히 전달하고자 하는 아이디어는, 메타데이터(데이터에 대한 데이터)는 속성으로 저장되어야 하며, 데이터 자체는 요소로 저장되어야 한다는 것입니다.