[xml] null XML 요소를 나타내는 올바른 방법은 무엇입니까?

null여러 가지 방법으로 표현 된 요소를 보았습니다 .

요소는 다음과 같이 존재합니다 xsi:nil="true":

 <book>
     <title>Beowulf</title>
     <author xsi:nil="true"/>
 </book>

요소가 존재하지만 빈 요소로 표시됩니다 ( ‘빈’으로 잘못되어 null의미 상 다른 것으로 생각합니다).

 <book>
     <title>Beowulf</title>
     <author/>
 </book>

 <!-- or: -->
 <book>
     <title>Beowulf</title>
     <author></author>
 </book>

요소가 반환 된 마크 업에 전혀 존재하지 않습니다 .

 <book>
     <title>Beowulf</title>
 </book>

요소에는 <null/>하위 요소가 있습니다 ( 아래 TStamper 에서 ).

 <book>
     <title>Beowulf</title>
     <author><null/></author>
 </book>

그러한 null가치 를 표현하는 올바른 방법 또는 정식적인 방법이 있습니까? 위의 예보다 추가 방법이 있습니까?

위 예제의 XML은 고안되었으므로 너무 많이 읽지 마십시오. 🙂



답변

xsi : nil은 다음과 같은 값을 나타내는 올바른 방법입니다. DOM 레벨 2 호출 getElementValue ()가 발행 될 때 NULL 값이 리턴됩니다. xsi : nil은 또한 내용 유형이 일반적으로 빈 요소를 허용하지 않더라도 내용이없는 유효한 요소를 나타내는 데 사용됩니다.

빈 태그를 사용하면 getElementValue ()는 빈 문자열 ( “”)을 반환합니다. 태그를 생략하면 작성자 태그도 존재하지 않습니다. 이는 ‘nil’로 설정하는 것과 의미 상 다를 수 있습니다 (예 : “Series”를 nil로 설정하는 경우 책이 시리즈에 속하지 않을 수 있지만 시리즈를 생략하면 시리즈가 현재 요소에 적용 할 수없는 요소임을 의미 할 수 있습니다.)

보낸 사람 : W3C

XML Schema : Structures는 컨텐츠가 비어 있거나 컨텐츠를 허용하지 않아도되는 컨텐츠 유형에도 불구하고 엘리먼트가 컨텐츠가 없을 때 엘리먼트가 유효하다고 받아 들여 져야한다는 신호 전달 메커니즘을 소개합니다. 속성 값이 true 인 xsi : nil 속성을 가진 요소는 내용없이 유효 할 수 있습니다. 레이블이 지정된 요소는 비어 있어야하지만 해당 복합 유형에 의해 허용되는 경우 속성을 가질 수 있습니다.

설명 :
book xml 요소가 있고 자식 요소 중 하나가 book : series 인 경우 채울 때 몇 가지 옵션이 있습니다.

  1. 요소 전체 제거-시리즈에이 책이 적용되지 않거나 해당 책이 시리즈의 일부가 아님을 나타내려면 수행 할 수 있습니다. 이 경우 book : series와 일치하는 템플릿이있는 xsl 변환 (또는 다른 이벤트 기반 프로세서)은 호출되지 않습니다. 예를 들어, xsl이 책 요소를 테이블 행 (xhtml : tr)으로 바꾸면이 방법을 사용하여 잘못된 수의 테이블 셀 (xhtml : td)을 얻을 수 있습니다.
  2. 요소를 비워 두는 경우-시리즈가 “”이거나 알 수 없거나 책이 시리즈의 일부가 아님을 나타낼 수 있습니다. book : series와 일치하는 모든 xsl 변환 (또는 다른 기본 기반 파서)이 호출됩니다. current ()의 값은 “”입니다. 이 방법을 사용하면 다음에 설명하는 것과 같은 수의 xhtml : td 태그를 얻을 수 있습니다.
  3. xsi : nil = “true”사용-이것은 book : series 요소가 비어있는 것이 아니라 NULL임을 나타냅니다. book : series와 템플릿이 일치하는 xsl 변환 (또는 다른 이벤트 기반 파서)이 호출됩니다. current ()의 값은 비어 있습니다 (빈 문자열 아님). 이 방법과 (2)의 주요 차이점은 book : series 스키마 유형이 빈 문자열 ( “”)을 유효한 값으로 허용 할 필요가 없다는 것입니다. 이것은 직렬 요소에는 의미가 없지만 스키마에서 열거 된 유형으로 정의 된 언어 요소에 대해서는 xsi : nil = “true”를 사용하여 요소에 데이터가 없을 수 있습니다. 다른 예는 10 진수 유형의 요소입니다. 비워 두려면 “”와 10 진수 만 허용하는 열거 된 문자열을 결합하거나 닐 가능한 소수를 사용할 수 있습니다.

답변

XML에는 기본적으로 null 개념이 없으므로 정식 답변이 없습니다. 그러나 객체 그래프에 null이 있기 때문에 Xml / Object 매핑을 원한다고 가정합니다. 따라서 당신의 대답은 “도구가 무엇을 사용하든”입니다. 핸들링을 쓰면 원하는 것을 의미합니다. XML 스키마를 사용하는 도구의 xsi:nil경우가는 길입니다. 대부분의 매퍼의 경우 일치하는 요소 / 속성을 생략하는 것이 좋습니다.


답변

XML의 유효성을 검사하는 방법에 따라 다릅니다. XML 스키마 유효성 검사를 사용하는 경우 올바른 null값 표현 방법은 xsi:nil속성을 사용하는 것입니다.

[ 출처 ]


답변

w3 링크의 문서

http://www.w3.org/TR/REC-xml/#sec-starttags

이것이 권장되는 양식이라고 말합니다.

<test></test>
<test/>

다른 답변에 언급 된 속성은 상태의 표현이 아닌 유효성 검사 메커니즘입니다. http://www.w3.org/TR/xmlschema-1/#xsi_nil을 참조 하십시오

XML Schema : Structures 는 컨텐츠가 비어 있거나 컨텐츠를 허용하지 않아도되는 컨텐츠 유형에도 불구하고 엘리먼트가 컨텐츠가 없을 때 엘리먼트가 유효하다고 받아 들여 져야한다는 신호 전달 메커니즘을 소개합니다 . 속성 값이 true 인 xsi : nil 속성을 가진 요소는 내용없이 유효 할 수 있습니다. 레이블이 지정된 요소는 비어 있어야 하지만 해당 복합 유형에 의해 허용되는 경우 속성을 가질 수 있습니다.

이 답변을 명확히하려면 : 내용

  <Book>
    <!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty-->
    <BuildAttributes HardCover="true" Glued="true" xsi:nil="true">
      <anotherAttribute name="Color">Blue</anotherAttribute>
    </BuildAttributes>
    <Index></Index>
    <pages>
      <page pageNumber="1">Content</page>
    </pages>
    <!--Missing ISBN number could be confusing and misguiding since its not present-->
  </Book>
</Books>


답변

당신이 사용하는 xsi:nil스키마의 의미는 요소가 기본 값이 있는지, 그리고 요소가없는 경우 기본값이 사용되어야한다고 지시 할 때. 나는 앞의 문장이 자명 한 끔찍한 아이디어가 아닌 똑똑한 사람들이 있다고 가정해야하지만 그것은 나에게 9 종류의 나쁜 것 같습니다. 내가 사용해 본 모든 XML 형식은 요소를 생략하여 null 값을 나타냅니다. (또는 속성으로 속성을 표시하는 것이 좋습니다 xsi:nil.)


답변

속성이나 요소를 생략하면 덜 공식적인 데이터에서 잘 작동합니다.

보다 정교한 정보가 필요한 경우 GML 스키마는 nilReason 속성을 추가합니다 (예 : GeoSciML 🙂 .

  • xsi:nil 값이 “true”인 경우 사용 가능한 값이 없음을 나타냅니다.
  • nilReason결 측값에 대한 추가 정보를 기록하는 데 사용될 수 있습니다. 이는 표준 GML 이유 ( missing, inapplicable, withheld, unknown) 중 하나 이거나 앞에 추가 된 텍스트 other:이거나보다 자세한 설명에 대한 URI 링크 일 수 있습니다.

데이터를 교환 할 때 XML이 일반적으로 사용되는 역할, 한 명의 수신자에게 전송 된 데이터 또는 특정 목적으로 사용되는 데이터는 다른 인증을 받았거나 지불 한 다른 사람이 사용할 수있는 내용이 가려 질 수 있습니다. 내용이 누락 된 이유를 아는 것이 매우 중요 할 수 있습니다.

과학자들은 왜 정보가 없는지에 대해 우려하고 있습니다. 예를 들어 품질상의 이유로 삭제 된 경우 원래의 잘못된 데이터를보고 싶을 수 있습니다.


답변

대부분의 경우 Null 값의 목적은 이전 버전의 응용 프로그램에 없었던 데이터 값을 제공하는 것입니다.

응용 프로그램 “ReportMaster”버전 1의 xml 파일이 있다고 가정합니다.

이제 ReportMaster 버전 2에는 정의되거나 정의되지 않을 수있는 몇 가지 속성이 추가되었습니다.

‘no tag means null’표현을 사용하면 ReportMaster 1 xml 파일을 읽을 수 있도록 자동으로 이전 버전과 호환됩니다.