code

XML 특성 대 요소

starcafe 2023. 11. 4. 13:12
반응형

XML 특성 대 요소

XML 특성을 언제 사용하고 XML 요소를 언제 사용해야 합니까?

예.

<customData>
  <records>
    <record name="foo" description="bar" />
  </records>
</customData>

아니면

<customData>
  <records>
    <record>
      <name>foo</name>
      <description>bar</description>
    </record>
  </records>
</customData>

"XML 설계의 원칙:"이라는 제목의 기사가 있습니다. IBM 웹 사이트에서 요소 대 속성을 사용할 때".

딱딱하고 빠른 규칙이 많지 않은 것 같지만, 게시물에 언급된 몇 가지 좋은 지침이 있습니다.예를 들어 XML 프로세서가 속성 내의 데이터를 정규화하여 원시 텍스트를 수정할 수 있으므로 화이트 스페이스에 대해 데이터를 정규화하지 않아야 할 경우 요소를 사용하는 것이 권장 사항 중 하나입니다.

저는 다양한 XML 구조를 개발하면서 가끔 이 기사를 참고하게 됩니다.이것이 다른 사람들에게도 도움이 되기를 바랍니다.

편집 - 사이트에서:

핵심내용원칙

해당 정보가 XML에서 표현되거나 전달되는 중요한 자료의 일부라고 생각하는 경우 요소에 입력합니다.사람이 읽을 수 있는 문서의 경우, 이는 일반적으로 독자에게 전달되는 핵심 내용을 의미합니다.시스템 지향 레코드 형식의 경우 일반적으로 문제 도메인에서 직접 가져온 데이터를 의미합니다.정보가 주변적이거나 주 통신에 부수적이거나 애플리케이션이 주 통신을 처리하는 데 도움이 되는 순수한 목적이라고 생각하는 경우 속성을 사용합니다.이를 통해 핵심 콘텐츠가 보조 소재로 어수선해지는 것을 방지할 수 있습니다.기계 지향 레코드 형식의 경우 일반적으로 문제 도메인의 주요 데이터에 대한 응용 프로그램별 표기를 의미합니다.

예를 들어, 문서 제목이 속성에 배치되는 비즈니스에서 주로 자체적으로 개발된 많은 XML 형식을 본 적이 있습니다.제목은 문서의 의사소통에 있어서 매우 기본적인 부분이므로 항상 요소 내용에 있어야 한다고 생각합니다.한편, 제품의 설명 기록에 내부 제품 식별자를 요소로 집어넣는 경우를 종종 보아왔습니다.이러한 경우 중 일부에서는 특정 내부 제품 코드가 문서의 대부분의 독자 또는 프로세서에 주요 관심 대상이 되지 않기 때문에 속성이 더 적합했습니다. 특히 ID가 매우 길거나 이해할 수 없는 형식인 경우에는 더욱 그렇습니다.

기본 데이터는 요소에 들어가고 메타데이터는 속성에 들어가는 것을 들어봤을 것입니다.위의 두 단락은 정말로 같은 원리를 표현하지만, 더 의도적이고 덜 흐릿한 언어로 표현합니다.

구조화 정보의 원리

정보가 구조화된 형태로 표현되는 경우, 특히 구조를 확장할 수 있는 경우 요소를 사용합니다.반면, 정보가 원자 토큰으로 표현된 경우 속성을 사용합니다.요소는 XML로 구조를 표현하기 위한 확장 가능한 엔진입니다. 거의 모든 XML 처리 도구는 이러한 사실을 중심으로 설계되어 있으며, 구조화된 정보를 요소로 적절히 분류하면 처리 도구가 설계를 보완하고 생산성과 유지보수성을 얻을 수 있습니다.속성은 요소에 표현된 정보의 단순 속성을 표현하기 위해 설계되었습니다.구조화된 정보를 속성으로 분류하여 XML의 기본 아키텍처를 반대하는 작업을 수행하면 다소 엄격함과 편리함을 얻을 수 있지만 유지보수 비용을 지불할 수도 있습니다.

날짜가 좋은 예입니다. 날짜는 고정된 구조를 가지고 있으며 일반적으로 하나의 토큰 역할을 하므로 속성(ISO-8601에 표시되는 것이 좋습니다)으로 이해할 수 있습니다.반면에 개인의 이름을 나타내는 것은 디자이너들을 놀라게 하는 이 원칙을 본 적이 있는 경우입니다.저는 속성에서 이름을 많이 보지만, 항상 개인 이름은 요소 내용에 있어야 한다고 주장해 왔습니다.개인의 이름은 놀라울 정도로 가변적인 구조를 가지고 있습니다(일부 문화권에서는 존댓말을 생략하거나 이름의 일부 순서를 가정함으로써 혼동이나 불쾌감을 유발할 수 있습니다).개인 이름도 원자 토큰이 아닌 경우는 거의 없습니다.예를 들어, 때로는 이름으로 검색하거나 정렬하고 때로는 성으로 정렬할 수도 있습니다.전체 이름을 단일 요소의 내용에 포함시키는 것은 속성에 포함시키는 것만큼이나 문제가 있다는 점을 지적해야 합니다.

개인적으로 저는 단순한 단일 값 속성에 속성을 사용하는 것을 좋아합니다.요소는 복잡한 유형이나 반복되는 값에 더 적합합니다.

단일 값 속성의 경우, 속성은 대부분의 API에서 더 콤팩트한 XML과 더 간단한 주소 지정으로 이어집니다.

더 나은 사유 요소 대 속성 논쟁 중 하나는 영국 GoverTalk 가이드라인에서 나옵니다.이는 정부 관련 XML 교환에 사용되는 모델링 기술을 정의하는 것이지만, 이는 독자적인 장점이며 고려할 가치가 있습니다.

스키마는 요소가 XML 인스턴스에서 정보 컨텐츠의 주요 보유자가 되도록 설계해야 합니다.속성은 요소 컨텐츠에 대한 더 많은 정보를 제공하는 간단한 항목인 보조 메타데이터를 보유하는 데 더 적합합니다.속성은 모호성을 야기할 수 있는 다른 속성을 검증하는 데 사용해서는 안 됩니다.

요소와 달리 특성은 구조화된 데이터를 보유할 수 없습니다.이러한 이유로 정보 콘텐츠의 주요 보유자로 요소를 선호합니다.그러나 요소의 내용에 대한 메타데이터(예: 날짜 형식, 측정 단위 또는 값 집합 식별)를 보유하기 위해 속성을 사용할 수 있도록 허용하면 인스턴스 문서를 더 단순하고 쉽게 이해할 수 있습니다.

생년월일은 다음과 같이 메시지로 나타낼 수 있습니다.

 <DateOfBirth>1975-06-03</DateOfBirth> 

그러나, 그 생년월일이 어떻게 확인되었는지와 같은 더 많은 정보가 필요할 수 있습니다.이를 속성으로 정의하여 메시지의 요소를 다음과 같이 만들 수 있습니다.

<DateOfBirth VerifiedBy="View of Birth Certificate">1975-06-03</DateOfBirth> 

다음은 부적절합니다.

<DateOfBirth VerifiedBy="View of Birth Certificate" ValueSet="ISO 8601" Code="2">1975-06-03</DateOfBirth>   

여기서는 코드가 VerifyedBy 속성인지 ValueSet 속성인지 명확하지 않습니다.더 적절한 연출은 다음과 같습니다.

 <DateOfBirth>    
   <VerifiedBy Code="2">View of Birth Certificate</VerifiedBy>     
   <Value ValueSet="ISO 8601">1975-06-03</Value>
 </DateOfBirth>

그것은 주로 선호도의 문제입니다.Elements for grouping and attribute for data(대안)보다 compact(컴팩트)하다고 생각하기 때문에 가능한 경우 Elements(요소)를 사용합니다.

예를 들면..

<?xml version="1.0" encoding="utf-8"?>
<data>
    <people>
        <person name="Rory" surname="Becker" age="30" />
        <person name="Travis" surname="Illig" age="32" />
        <person name="Scott" surname="Hanselman" age="34" />
    </people>
</data>

...대신에...

<?xml version="1.0" encoding="utf-8"?>
<data>
    <people>
        <person>
            <name>Rory</name>
            <surname>Becker</surname>
            <age>30</age>
        </person>
        <person>
            <name>Travis</name>
            <surname>Illig</surname>
            <age>32</age>
        </person>
        <person>
            <name>Scott</name>
            <surname>Hanselman</surname>
            <age>34</age>
        </person>
    </people>
</data>

하지만 20-30자의 내부에 쉽게 표현되지 않는 자료가 있거나 탈출해야 할 인용문이나 다른 문자들이 많이 포함되어 있다면, 이제는 요소들을 제거할 때라고 말하고 싶습니다.CD 데이터 블록을 사용할 수도 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<data>
    <people>
        <person name="Rory" surname="Becker" age="30" >
            <comment>A programmer whose interested in all sorts of misc stuff. His Blog can be found at http://rorybecker.blogspot.com and he's on twitter as @RoryBecker</comment>
        </person>
        <person name="Travis" surname="Illig" age="32" >
            <comment>A cool guy for who has helped me out with all sorts of SVn information</comment>
        </person>
        <person name="Scott" surname="Hanselman" age="34" >
            <comment>Scott works for MS and has a great podcast available at http://www.hanselminutes.com </comment>
        </person>
    </people>
</data>

일반적으로 저는 속성을 아예 피합니다.예, 속성은 더 압축적이지만 요소는 더 유연하고 유연성은 XML과 같은 데이터 형식을 사용할 때 가장 중요한 장점 중 하나입니다. 오늘의 단일 값은 내일의 값 목록이 될 수 있습니다.

또한 모든 것이 요소라면 특정 정보를 어떻게 모델링했는지 기억할 필요가 없습니다.속성을 사용하지 않는다는 것은 생각해야 할 것이 하나 줄어든다는 것을 의미합니다.

Ned Batchelder의 Elements vs. Attributes를 확인합니다.

좋은 설명과 요소와 속성의 장점과 단점에 대한 좋은 목록.

그는 다음과 같이 요약합니다.

권장 사항:비즈니스 애플리케이션에서 생성되거나 소비될 데이터에 요소를 사용하고 메타데이터에 속성을 사용합니다.

중요: 자세한 설명은 아래 @maryisdead 님의 코멘트를 참조하시기 바랍니다.

속성에 대한 제한은 사용할 수 있는 위치와 사용할 수 없는 위치를 알려줍니다. 속성 이름은 고유해야 하며 순서는 중요할 수 없으며 이름과 값 모두 텍스트만 포함할 수 있습니다.반대로 요소는 고유하지 않은 이름을 가질 수 있고, 중요한 순서를 가질 수 있으며, 내용이 혼합될 수 있습니다.

속성은 개체의 속성 이름과 값, 테이블 행의 열, 사전의 항목과 같은 규칙을 따르는 데이터 구조에 매핑되는 도메인에서 사용할 수 있습니다. (그러나 속성이 모든 값 유형이 아니거나 사전의 항목이 문자열이 아닌 경우에는 사용할 수 없습니다.)

내 개인 경험의 법칙: 요소가 그 중 하나만 포함할 수 있고 원자 데이터(ID, 이름, 나이, 유형 등)라면 속성이어야 하며 그렇지 않으면 요소여야 합니다.

저는 사람의 독자가 알아야 할 데이터일 때는 요소를 사용하고, 처리를 위한 데이터일 때는 속성을 사용하는 경향이 있습니다(예: ID).이는 대부분의 데이터가 모델링되는 도메인과 관련이 있기 때문에 속성을 거의 사용하지 않는다는 것을 의미합니다.

여기에 요소와 속성을 구별하는 데 도움이 되는 또 다른 전략이 있습니다. 즉, 객체를 생각하고 MVC를 염두에 두는 것입니다.

객체에는 멤버(객체 변수) 및 속성(세터 및 게터가 있는 멤버)이 있을 수 있습니다.속성은 변경 통지 메커니즘을 허용하는 MVC 설계에 매우 유용합니다.

이렇게 하면 사용자가 변경할 수 없는 내부 응용프로그램 데이터에 속성이 사용됩니다. 대표적인 예로는 ID 또는 DATE_Modified가 있습니다.따라서 요소는 사용자가 수정할 수 있는 데이터에 사용됩니다.

따라서 사서가 먼저 도서 항목(또는 잡지)을 추가한 다음 이름 작성자 ISBN 등을 편집할 수 있다는 점을 고려하면 다음이 타당합니다.

<?xml version="1.0" encoding="utf-8"?>
<item id="69" type="book">
    <authors count="1">
        <author>
            <name>John Smith</name>
        <author>
    </authors>
    <ISBN>123456790</ISBN>
</item>

언급URL : https://stackoverflow.com/questions/152313/xml-attributes-vs-elements

반응형