문제

에서 일을 우리가 묻 XML 파일을 만들게 통과 데이터를 다른 오프라인 응용 프로그램은 다음 두 번째 만들 XML 파일을 다시 전달을 업데이트하기 위해 데이터의 일부.프로세스 동안 우리와 함께 논의하고 팀의 다른 응용 프로그램의 구조에 대한 XML 파일입니다.

샘플 나은 기본적으로 다음과 같습니다.

<INVENTORY>
   <ITEM serialNumber="something" location="something" barcode="something">
      <TYPE modelNumber="something" vendor="something"/> 
   </ITEM>
</INVENTORY>

다른 팀이라고 말했다하지 업계 표준 및 특성만 사용해야에 대한 메타 데이터입니다.그들은 제안된:

<INVENTORY>
   <ITEM>
      <SERIALNUMBER>something</SERIALNUMBER>
      <LOCATION>something</LOCATION>
      <BARCODE>something</BARCODE>
      <TYPE>
         <MODELNUMBER>something</MODELNUMBER>
         <VENDOR>something</VENDOR>
      </TYPE>
   </ITEM>
</INVENTORY>

는 이유는 제안 첫 번째는 파일의 크기를 만들은 훨씬 작다.가 될 것입니다 약 80000 것이다 품목에서 파일을 전송하는 동안.그들의 제안이 현실에서 밝혀 세 번 더 큰 것보다 나는 권장합니다.검색에 대한 신비"업계 표준"는 언급되었다,하지만 가장 가까운 찾을 수 있는 XML 특성에만 사용해야에 대한 메타 데이터,하지만 말한 논쟁에 대해 무엇이었고 실제로는 메타 데이터입니다.

후에는 긴 호흡이 설명(죄송합니다)당신은 어떻게 결정하는 메타 데이터,그리고 디자인하는 경우는 XML 문서의 구조는 어떻게 결정할 때 사용하는 특성 또는 요소는?

도움이 되었습니까?

해결책

내가 사용하는 이 엄지손가락의 규칙:

  1. 특성은 자기 포함,즉,컬러,ID,이름을 지정합니다.
  2. 는 요소가 무언가는 않거나 특성을 갖고 있는 자신의 또는 포함하는 다른 요소입니다.

그래서 당신이 가까운 거리에 있습니다.했는 다음과 같습니다.

편집:업데이트가 원래 예 의견에 따라 아래.

  <ITEM serialNumber="something">
      <BARCODE encoding="Code39">something</BARCODE>
      <LOCATION>XYX</LOCATION>
      <TYPE modelNumber="something">
         <VENDOR>YYZ</VENDOR>
      </TYPE>
   </ITEM>

다른 팁

문제의 일부로 속성:

  • 속성을 포함할 수 없습니다 여러 값(아이 요소를 할 수 있습니다)
  • 특성되지 않은 쉽게 확장 가능(에 대한 향후 변경)
  • 속성을 설명할 수 없는 구조물(아이 요소를 할 수 있습니다)
  • 특성은 더 어려운 조작하여 프로그램 코드
  • 특성 값은 쉽지 않에 대한 테스트 DTD

당신이 사용하는 경우 특성에 대한 컨테이너로 데이터,당신은 끝나는 문서에는 읽기 어렵고 유지합니다.를 사용하려고 하는 요소를 설명하는 데이터입니다.사용 특성을 제공합성된 후에는 해당 정보를 지체 없이 데이터.

끝나지 않는 다음과 같이(이하지 않는 방법 XML 을 사용해야):

<note day="12" month="11" year="2002" 
      to="Tove" to2="John" from="Jani" heading="Reminder"  
      body="Don't forget me this weekend!"> 
</note>

출처: http://www.w3schools.com/xml/xml_dtd_el_vs_attr.asp

"XML"의미"eXtensible 태그 언어"라고 합니다.마크업 언어를 의미하는 데이터,텍스트 표시 메타데이터에 대한 구조물 또는 서식을 지정합니다.

XHTML 예제 XML 을 사용하기:

<p><span lang="es">El Jefe</span> insists that you
    <em class="urgent">MUST</em> complete your project by Friday.</p>

여기서 구분의 요소 및 특성을 분명하다.텍스트 요소는 브라우저에서 표시,그리고 특성에 대한 지침 는 방법 하는 표시(가 있지만 몇 가지 범주하지 않는 방법으로 작동하).

혼란 때 발생한 XML 을 사용하지 않으로 마크업 언어이지만,로 데이터 serialization 언어서의 차이"자료"및"메타데이터는"더 많은 모호합니다.그래서 사이의 선택의 요소 및 특성은 더 또는 더 적은 임의 것을 제외한 할 수 없 대표 속성(볼 feenster 의 답변).

XML 요소에 대 XML 특성

XML 에 대해 모든 계약입니다. 첫 번째 연기하는 모든 기존 XML 스키마 또는 설립된 규칙 내에서 지역사회 또는 산업입니다.

만약 당신이 진정으로 하는 상황에서 정의 스키마가 지상에서,여기에 몇 가지 일반 사항 통보 요소에 대한 특성 결정:

<versus>
  <element attribute="Meta content">
    Content
  </element>
  <element attribute="Flat">
    <parent>
      <child>Hierarchical</child>
    </parent>
  </element>
  <element attribute="Unordered">
    <ol>
      <li>Has</li>
      <li>order</li>
    </ol>
  </element>
  <element attribute="Must copy to reuse">
    Can reference to re-use
  </element>
  <element attribute="For software">
    For humans
  </element>
  <element attribute="Extreme use leads to micro-parsing">
    Extreme use leads to document bloat
  </element>
  <element attribute="Unique names">
    Unique or non-unique names
  </element>
  <element attribute="SAX parse: read first">
    SAX parse: read later
  </element>
  <element attribute="DTD: default value">
    DTD: no default value
  </element>
</versus>

이에 따라 달라질 수 있습니다 귀하의 사용합니다.XML 을 나타내는 데 사용되는 stuctured 데이터 생성된 데이터베이스에서도 잘 작동으로 궁극적으로 필드 값을 배치되는 것으로 속성이 있습니다.

그러나 XML 을 사용으로 메시지가 전송이 종종 더 나은 사용하여 더 많은 요소입니다.

예를 들어 말할 수 있습 우리는 이 XML 제안으로서 대답:-

<INVENTORY>
   <ITEM serialNumber="something" barcode="something">
      <Location>XYX</LOCATION>
      <TYPE modelNumber="something">
         <VENDOR>YYZ</VENDOR>
      </TYPE>
    </ITEM>
</INVENTORY>

지금 우리가 원하는 항목을 보낼 요소하는 장치를 인쇄하는 바코드 그러나의 선택이있다 인코딩 형식입니다.우리는 어떻게 나타내는 인코딩 형식이 필요합니까?우리가 갑자기 깨닫게 약간 뒤늦게,바코드지 않았다 하나의 automic 값이지만,오히려 그것을 정규화할 수 있습으로 인코딩할 때 필요한 인쇄했습니다.

   <ITEM serialNumber="something">
      <barcode encoding="Code39">something</barcode>
      <Location>XYX</LOCATION>
      <TYPE modelNumber="something">
         <VENDOR>YYZ</VENDOR>
      </TYPE>
   </ITEM>

점은 없는 한 당신은 건물의 어떤 종류의 XSD 또는 DTD 와 함께 네임스페이스 구조를 수정하는 돌에서,당신은 최고의 수 있습 제공을 떠나 옵션이 열립니다.

IMO XML 에서 가장 유용할 수 있는 근육이 수축 파괴하지 않고 기존의 코드를 사용하여니다.

내가 사용하여 다음과 같은 지침에 스키마와 디자인 관련 속성에 대요소:

  • 용 요소에 대한 오랜 실행하는 텍스트(일반적으로 그의 문자열이나 normalizedString 유형)
  • 를 사용하지 않는 특성 있는 경우에는 그룹의 두 값(예:eventStartDate 및 eventEndDate)한 요소입니다.이전를 들어, 가 있어야 새로운 요소에 대한"이벤트"를 포함할 수 있는 보고서 종료 특성이 있습니다.
  • 비즈니스 Date,DateTime 와 숫자(예.수량을 평가)야 요소입니다.
  • Non-비즈니스 시간 등의 요소의 마지막 업데이트에 만료해야 특성이 있습니다.
  • Non-비즈니스 번호와 같은 해쉬 인덱스 코드 및 해야 특성이 있습니다.* 사용하는 경우 요소의 유형이 복잡합니다.
  • 속성을 사용하여 이 값은 간단한 형식과 반복하지 않는다.
  • xml:id 및 xml:lang 야 특성을 참조하 XML 스키마
  • 아보세요할 때 특 기술적으로 가능합니다.

환경에 대한 특성은 다음과 같은 기능을 제공합니다:

  • 독특한(의 특성이 나타날 수 없습니다 여러 배)
  • 순서는 중요하지 않습
  • 위의 속성은 상속 가능한(이것은"모든"컨텐츠 모델을 지원하지 않는 현재 스키마에서 언어)
  • 보너스입니다 그들은 덜 자세한 정보와 사용이 더 적은 대역폭,그 이유를 선호하는 특성을 통해 요소입니다.

기술적으로 가능한 경우 시간이 있기 때문에 어디에 사용의 특성을 가능하지 않습니다.예를 들어,특정 선택입니다.예를 들어 사용(을 보고서로 종료 날짜)or(startTS 및 endTS)되지 않은 가능한 현재키 언어

는 경우 XML 스키마의 시작도"모든"컨텐츠 모델을 제한 또는 확장된 그런데 아마 그것을 떨어

보편적인 응답을 이 질문(변의 생성에 관여 W3C 사양).XML 을 사용할 수 있는 다양한 용도로는 텍스트 문서,데이터 및 선언하는 코드가 가장 일반적입니다.나 또한 그것을 많이 사용으로 데이터 모델을 제공합니다.이 있다면 이러한 어플리케이션 속성이 더 일반적이고 다른 사람의 위치는 요소는 자연적입니다.거기에는 또한 특징의 다양한 도구를 쉽게 또는 더 열심히 그들을 사용합니다.

XHTML 는 하나의 영역 특성에는 자연적인 사용하여(예를들면에서 class='foo').속성을 순서가 없이 그것을 쉽게 일부 사람들을 위해 개발 도구입니다.새로운 특성은 더 열심히 입력하지 않고한 스키마.내가 또한 네임스페이스 특성(foo:바="zork")종종 어렵게 관리하는 다양한 툴 세트.하지만 일부 모습을 보 W3C 언어를 혼합물을 볼 것이 일반적입니다.SVG,XSLT XSD,MathML 의 몇 가지 예는 잘 알려져 있어 모두의 풍부한 공급 특성 및 요소입니다.어떤 언어도 보다 더 중 하나-그것을 할 수있는 방법,예를 들어,

<foo title="bar"/>;

<foo>
  <title>bar</title>;
</foo>;

을 이용하실 수 있습니다.지 않는 동등한 구문하고 명시적 지원 처리에 도)

나의 통보 것에 모습을 가지고 일반적인 실천에서 가장 가까운 지역에서의 응용 프로그램과도 고려 도구 세트를 적용 하실 수 있습니다.

마지막으로 있는지 확인을 구분하는 네임스페이스에서 특성이 있습니다.일부 XML 시스템(예:Linq)나타내는 네임스페이스 특성으로서의 API 를 사용합니다.IMO 이 추하고 잠재적으로 혼란스럽습니다.

면 의심 키스 --왜 혼합 특성 및 요소가 없는 경우에 분명한 이유를 사용하세요.당신이 나중에 결정을 정의하 XSD,는 것이 끝나기뿐만 아니라.그런 다음 경우에도 당신이 나중에 결정 클래스를 생성하는 구조에서의 XSD,는 것입니다 간단하게 될 뿐만 아니라.

아낌없는 성원에 감사드립니다.

첫째,너무 걱정하지 마십시오 성능에 대해 지금입니다.당신이 깜짝 놀라게 될 것입니다 어떻게 신속하게 최적화된 xml parser will rip 을 통해 귀하의 xml.더 중요한 것은,무엇이 당신의 디자인을 위해 미래:XML 발전함에 따라,어떻게 당신을 유지하는 느슨한 연결하고 상호 운용성?

더 구체적으로,당신은 콘텐츠를 만들 수 있습니다 모델에는 더 복잡한 요소이지만 그것이 어렵게 확장 속성이 있습니다.

요소를 사용하여 데이터와 특성에 대한 메타 데이터(데이터에 대해 요소의 데이터).

는 경우 요소를 보여주는 조건자에서 당신의 선택 문자열을 표시해야한다는 특성.마찬가지로 경우 특성을 절대로 사용되는 조건자,어쩌면 그것은 유용하지 않는 메타 데이터입니다.

XML 은 해야하는 컴퓨터를 읽을 수 있지 않을 사람이 읽을 수 있고 대규모 문서를 압축 XML 습니다.

다른 사람에 덮여 있는 방법을 간의 구별 특성에서 요소이지만에서 보다 일반적인 관점을 모두 특성 때문에 그것이 결과 XML 작은 잘못된 것입니다.

XML 될 수 있도록 설계되지 않은 컴팩트하지만 휴대용하고 인간을 읽을 수 있습니다.당신이 원하는 크기를 줄이기 위해 데이터의 전송 중에 그 사용이 다른(같은 구글의 프로토콜 버퍼).

그것은 논쟁의 여지가 어느 방법이지만,동료들은 오른쪽에서는 XML 을 사용해야에 대한"마크업"또는 메타 데이터는 주변에는 실제 데이터입니다.에 대한 귀하의 부분은,당신은 오른쪽에서 그것은 때로는 힘을 결정하는 메타 데이터와 데이터 모델링 할 때 당신의 도메인에서는 XML.실제로,어떻게 하는 것은 척 하는 아무것도에 태그가 숨겨져만 외부에서 데이터 태그를 읽을 수 있습니다.문서는 몇 가지 의미에서는 방법은?

XML 은 악명 높은 부피가 크다.에 대한 전송 및 저장,압축은 매우 좋다면 당신이 감당할 수 있습니다.XML 압축만,때때로 급격하게 잘하기 때문에,그것의 반복성.나가 큰 파일을 압축하의 5%미만 원래의 크기입니다.

또 다른 점을 강화하기 위한 귀하의 위치는 동안 다른 팀은 논쟁에 대한 스타일(에서는 가장 XML 도구를 처리하는 모든 특성 문서으로 쉽게 모든#PCDATA 문서에)당신은 실용성이 있다고 주장한다.는 동안 스타일할 수 없습이 완전히 무시 기술적 장점을 수행해야에 더 무게.

두 방법 모두에 대한 저장하는 개체의 속성을 완벽하게 유효합니다.당신이해야에서 출발하는 실용적인 고려 사항입니다.하려고 다음과 같은 질문에 대답:

  1. 는 표현에 이르게 더 빠르게 데이터 분석\하시겠습니까?
  2. 는 표현에 이르게 더 빠르게 데이터를 전송?
  3. 가 가독성이 문제인가?

    ...

그것은 크게됩니다.내가 사용하는을 위한 요소 그룹화와 특성에 대한 데이 가능한 곳으로는,이것으로 더 소형의 대안입니다.

예를 들어 내가 선호.....

<?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 문자 또는 담 많은 따옴표나 다른 문자는 필요한을 탈출한 다음 내가 말하는 시간을 휴식 요소를...가능성 CData 블록입니다.

<?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>

활용하지 않으시겠습니까 우리의 객체지향 intuition?나는 일반적으로 찾는 것은 바로 앞으로 생각하는 개체는 특성의 개체 또는 객체 참조.

든 직관적으로 이해 개체로하여 적 요소입니다.의 특성(또는성)는 것에 대한 특성에서 이러한 요소 xml 또는 아이의 요소 속성이 있습니다.

내가 생각하는 간단과 같은 경우는 예제에서 객체 지향으로 유례를 작성한 파악하는 요소하는 특성의 요소입니다.

다만 부부의 수정 나쁜 정보:

@존 볼링거:Attributies 포함될 수 있는 어떤 문자 데이터입니다.< >&"'탈출해야하는<>&"그리고' 각각 있었다.당신이 사용하는 경우 XML 라이브러리,그것은 스스로 알아서 당신을 위해 합니다.

지옥에는 특성을 포함할 수 있는 데이터는 바이너리 이미지와 같은,당신이 정말로 원하는 경우,다만 base64 인코딩하고 그것을 만드는 데이터:URL.

@feenster:속성을 포함할 수 있는 공백으로 구분된 다수 품목에서의 경우 ID 나 이름,는 것이 숫자를 포함합니다.곳에서 생생하지만,이 끝날 수 있는 공간을 절약합니다.

사용 특성을 유지할 수 있습 XML 경쟁력 JSON.보 지방 태그:트리밍 지방 태그 신화 한 칼로리 시.

난 항상 놀의 결과에 의해 이러한 종류의 토의한다.나에게 매우 간단한 규칙을할지 여부를 결정하기 위한 데이터가 속에 있는 특성 또는 내용으로는지 여부를 데이터를 탐색 하위 구조입니다.

그래서 예를 들어,non-한 텍스트 항상에 속한 속성이 있습니다.다.

목록에 속하는 하위 구조물 또는 내용입니다.텍스트할 수 있는 시간이 포함된 구조적 sub-의 콘텐츠에 속한 콘텐츠입니다.(내 경험에 있는 상대적으로 약간의 이 텍스트와 태그를 사용할 때는 XML 데이터 저장이나 교환합니다.)

XML 스키마 이 방법은 간결하고 있습니다.

때마다 나는 같은 경우 <car><make>Ford</make><color>Red</color></car>,저는 생각했지요"아이고 했습자가 있다고 생각했을 것 하위 요소에서 만들 요소?" <car make="Ford" color="Red" /> 이 훨씬 읽을 수 없는 방법에 대한 질문에 공백을 것 처리 등등.

주어진 그만의 공백을 처리하는 규칙,내가 이것을 믿었고 명확한의 의도 XML 디자이너가 있습니다.

이것은 매우 명확한 HTML 에서는 차이의 특성과 태그를 명확하게 볼 수 있:

  1. 모든 데이터는 사 태그
  2. 성의 특성을 이 데이터를(예:포맷)

그냥 있으면 순수한 데이터는 XML,거기에 더 명확한 차이입니다.데이터 수 태그들 사이로 또는 속성이 있습니다.

=>대부분의 데이터 사이에 서서 마크업이 있습니다.

를 사용하려면 여기에 특성:당신은 나눌 수 있는 데이터는 두 가지로 카테고리:데이터와"메타 데이터",는 메타데이터의 일부가 아닙니다,기록하려는 존재하지만,일"와 같은 형식으로 버전","만일",등등.

<customer format="">
     <name></name>
     ...
</customer>

수도 말:"속성을 사용하여 특성화 태그,태그를 사용하여 데이터를 제공합니다."

동의함으로 feenster.에서 숙박하면 다음과 같은 경우에 특성할 수 있습니다.요소들은 진화는 친절하고 더 많은 상호 운용이 가능한 사 웹 서비스의 툴킷이 있습니다.당신을 찾지 못한 툴킷를 직렬화하의 요청/응답 메시지를 사용하여 특성이 있습니다.이것은 또한 의미가 때문에 우리의 메시지 데이터(지 않는 메타데이터)에 대한 웹 서비스 도구입니다.

특성을 쉽게 할 수 있을 관리하기가 어려워 시간에 저를 신뢰한다.나는 항상 그들로부터 멀리한다.요소에 훨씬 더 많은 명시적이고 읽기 쉬운/사용 가능한 모두에 의해 파서와 사용자.

만 시간을 내가 사용한 그들었을 정의하는 파일의 확장 자산 url:

<image type="gif">wank.jpg</image> ...etc etc

나는 당신이 알고 있는 경우 100%특성에 필요하지 않습니다 확장된 그들을 사용할 수 있지만,얼마나 많은 시간을 당신은 그것을 알고 있다.

<image>
  <url>wank.jpg</url>
  <fileType>gif</fileType>
</image>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top