XML 모범 사례 : 특성과 추가 요소
이 질문에 이미 답변이 있습니다.
- XML 속성 대 XML 요소 20 답변
둘의 차이점은 무엇이며 언제 각각을 사용해야합니까?
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
대
<person firstname="Joe" lastname="Plumber" />
감사
요소 중심 및 속성 중심 XML이 있습니다. 예에서 첫 번째는 요소 중심이고 두 번째는 속성 중심입니다.
대부분의 경우이 두 패턴은 동일하지만 몇 가지 예외가 있습니다.
속성 중심
- 요소 중심보다 작은 크기.
- 대부분의 XML 파서는 사용자 데이터가 요소에 의해 제공된다고 생각하므로 상호 운용성이별로 없습니다. 속성은 요소를 설명하는 데 사용됩니다.
- 일부 데이터 유형에 대해 널 입력 가능 값을 표시 할 방법이 없습니다. 예 : nullable int
- 복잡한 유형을 표현할 수 없습니다.
요소 중심
- 복합 유형은 요소 노드로만 표시 될 수 있습니다.
- 매우 상호 운용성
- 속성 중심보다 크기가 큽니다. (압축을 사용하면 크기를 크게 줄일 수 있습니다)
- Nullable 데이터는 속성 xsi : nil = "true"로 표현할 수 있습니다.
- 구문 분석기는 사용자 데이터에 대한 요소 만 검색하므로 구문 분석이 더 빠릅니다.
실용적인
XML의 크기가 정말 신경 쓰이는 경우, 가능하면 가능하면 속성을 사용하십시오. 큰 텍스트 값을 요소로 보유 할 nullable, 복잡한 유형 및 노드는 그대로 둡니다. XML 크기에 신경 쓰지 않거나 이동 중에 압축을 활성화하고 요소를 고수하십시오. 더 확장 가능합니다.
배경
DOT NET에서 XmlSerializer는 개체의 속성을 특성 또는 요소로 직렬화 할 수 있습니다. 최근 WCF 프레임 워크에서 DataContract serializer는 속성을 요소로만 직렬화 할 수 있으며 XmlSerializer보다 빠릅니다. 이유는 분명합니다. 역 직렬화하는 동안 요소에서 사용자 데이터를 검색하기 만하면됩니다.
나중에 <address>
속성 을 추가 할 때 XML 속성으로 만들고 싶지 않을 것입니다. 이는 <address>
주소, 도시, 국가 등으로 구성된 더 복잡한 요소 일 수 있기 때문입니다 .
이러한 이유로 속성이 훨씬 더 깊어 질 필요가 없다고 확신하지 않는 한 첫 번째 하위 요소 형식을 선택하는 것이 좋습니다. 첫 번째 형식은 향후 더 큰 확장 성을 허용합니다.
공간이 걱정된다면 XML을 압축하세요.
우리 회사에서는 두 번째 접근 방식을 선호합니다.
우리가 생각하는 방식은 "firstname"과 "lastname"이 "person"노드의 하위 필드 가 아니라 "person"노드의 속성 이라는 것 입니다. 미묘한 차이입니다.
제 생각에는 두 번째 접근 방식이 더 간결하고 가독성 / 유지 보수성이 크게 향상되어 매우 중요합니다.
물론 응용 프로그램에 따라 다릅니다. 모든 시나리오를 포괄하는 포괄적 인 규칙은 없다고 생각합니다.
다음 정보는 속성과 요소의 선택을 짧은 방식으로 설명하는 데 매우 도움이됩니다.
속성 사용과 관련된 몇 가지 문제는 다음과 같습니다.
속성은 여러 값을 포함 할 수 없음 (요소 가능)
속성은 트리 구조를 포함 할 수 없음 (요소 가능)
속성은 쉽게 확장 할 수 없음 (향후 변경을 위해)
속성은 읽고 유지하기가 어렵습니다. 데이터에 요소를 사용하십시오. 데이터와 관련이없는 정보에는 속성을 사용하십시오.
출처 : http://www.w3schools.com/xml/xml_attributes.asp
속성은 순서를 구분하지 않습니다. 이것은 상황에 따라 장점 또는 단점이 될 수 있습니다.
속성은 복제 할 수 없습니다. "Joe"에 두 개의 이름이있는 경우 노드가 유일한 방법입니다.
참고 URL : https://stackoverflow.com/questions/241819/xml-best-practices-attributes-vs-additional-elements
'IT박스' 카테고리의 다른 글
IntelliJ IDEA에서 예외 발생기 강조 (0) | 2020.10.15 |
---|---|
Visual Studio의 XAML 창에서 디자인 창을 분리 할 수 있습니까? (0) | 2020.10.15 |
Eclipse : 각 프로젝트에 대한 작업 공간을 만들어야합니까? (0) | 2020.10.15 |
메소드 매개 변수 대신 해시 전달 (0) | 2020.10.15 |
matplotlib : 컬러 바 및 해당 텍스트 레이블 (0) | 2020.10.15 |