XML 모범 사례: 특성 대 추가 요소
이 둘의 차이점과 각각의 사용 시기는 어떻게 됩니까?
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
대
<person firstname="Joe" lastname="Plumber" />
감사해요.
요소 중심 XML과 속성 중심 XML이 있는데, 예를 들어 첫 번째 것은 요소 중심이고 두 번째 것은 속성 중심입니다.
대부분의 경우 이 두 패턴은 동일하지만 일부 예외도 있습니다.
속성 중심
- 요소 중심보다 작은 크기.
- 대부분의 XML 구문 분석기는 사용자 데이터가 요소에 의해 표시된다고 생각하므로 요소를 설명하는 데 속성이 사용됩니다.
- 일부 데이터 유형(예: nullable int)에 대해 nullable 값을 표시할 방법이 없습니다.
- 복합 형식을 표현할 수 없습니다.
요소 중심
- 복합형은 요소 노드로만 제시할 수 있습니다.
- 상호 운용성이 매우 뛰어남
- 속성 중심보다 큰 사이즈. (압축을 사용하여 크기를 크게 줄일 수 있습니다.)
- nullable data는 속성 xsi로 표현할 수 있습니다. nil="true"
- 파서가 사용자 데이터에 대한 요소만 검색하므로 파싱 속도가 빠릅니다.
실용적인.
XML 크기에 관심이 있는 경우 적절한 경우 언제든지 속성을 사용합니다.nullable, complex type 또는 큰 텍스트 값을 보유할 요소가 필요한 경우 요소를 사용합니다.XML 크기에 상관이 없거나 전송 중에 압축을 사용하도록 설정한 경우에는 확장이 더 용이하므로 요소를 계속 사용합니다.
배경
DOT NET에서 XmlSerializer는 객체의 속성을 속성 또는 요소로 직렬화할 수 있습니다.최근의 WCF 프레임워크에서 DataContract serializer는 속성을 요소로만 직렬화할 수 있으며 XmlSerializer보다 빠릅니다. 그 이유는 분명하므로 병렬화를 수행하는 동안 요소에서 사용자 데이터를 찾기만 하면 됩니다.
미래에 당신이 추가할 때.<address>
property, XML 속성으로 만들고 싶지 않을 것입니다.왜냐하면.<address>
도로 주소, 도시, 국가 등으로 구성된 더 복잡한 요소일 수도 있습니다.
이러한 이유로 속성이 더 깊이 들어갈 필요가 없다는 확신이 들지 않는 한 첫 번째 하위 요소 양식을 선택할 수 있습니다.첫 번째 형태는 미래에 더 큰 확장성을 허용합니다.
공간이 조금이라도 걱정된다면 XML을 압축합니다.
우리 회사에서는 두 번째 접근 방식을 선호합니다.
우리가 생각하는 방식은 "first name"과 "last name"이 "사람" 노드의 하위 필드가 아니라 "사람" 노드의 속성이라는 것입니다.미묘한 차이입니다.
제 생각에는 두 번째 접근 방식이 더 간결하고 가독성/유지성이 크게 향상되어 매우 중요합니다.
물론 응용 프로그램에 따라 다를 수 있습니다.모든 시나리오를 포괄하는 포괄적인 규정이 있는 것은 아니라고 생각합니다.
나는 다음의 정보가 속성과 요소의 선택을 짧게 설명하는 데 매우 도움이 된다는 것을 알았습니다.
속성을 사용할 때 발생하는 몇 가지 문제는 다음과 같습니다.
특성은 여러 값을 포함할 수 없습니다(elements는 포함할 수 있음).
특성에는 트리 구조를 포함할 수 없음(elements 캔)
속성을 쉽게 확장할 수 없음(향후 변경 시)
속성은 읽고 유지하기가 어렵습니다.데이터에 요소를 사용합니다.데이터와 관련이 없는 정보에는 속성을 사용합니다.
출처 : http://www.w3schools.com/xml/xml_attributes.asp
속성은 순서에 민감하지 않습니다.이것은 상황에 따라 장점일 수도 있고 단점일 수도 있습니다.
속성은 중복할 수 없습니다.만약 "조"가 두 개의 이름을 가지고 있다면, 노드만이 갈 수 있는 유일한 방법입니다.
언급URL : https://stackoverflow.com/questions/241819/xml-best-practices-attributes-vs-additional-elements
'code' 카테고리의 다른 글
SQL Server의 큰 테이블에 NOT NULL 열을 추가하는 방법은 무엇입니까? (0) | 2023.10.10 |
---|---|
Wc_get_products 기능을 WoCommerce에서 사용하기 (0) | 2023.10.10 |
프레임이 로드되었는지, 내용이 있는지 확인하는 방법은 무엇입니까? (0) | 2023.10.10 |
Angular Directive(각도 지시)의 선택적 매개변수 (0) | 2023.10.05 |
Date.getDay() javascript가 잘못된 날짜를 반환합니다. (0) | 2023.10.05 |