문제

나는 본다 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>

요소에는 a <null/> 어린이 요소 (에서 tstamper 아래에):

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

그러한 null 값? 위의 예보다 추가 방법이 있습니까?

위의 예제에 대한 XML은 고안되어 있으므로 너무 멀리 읽지 마십시오. :)

도움이 되었습니까?

해결책

XSI : NIL은 다음과 같은 값을 나타내는 올바른 방법입니다. DOM 레벨 2 호출 GetElementValue ()가 발행되면 NULL 값이 반환됩니다. XSI : NIL은 해당 요소 컨텐츠 유형이 일반적으로 빈 요소를 허용하지 않더라도 컨텐츠가없는 유효한 요소를 표시하는 데 사용됩니다.

빈 태그를 사용하는 경우 getElementValue ()가 빈 문자열 ( "")을 생략하면 저자 태그도 존재하지 않습니다. 이것은 'nil'으로 설정하는 것과 의미 적으로 다를 수 있습니다 (예 : "시리즈를"시리즈 "로 설정하는 것은 책이 시리즈에 속하지 않는 반면, 시리즈를 생략하는 것은 시리즈가 현재 요소에 적용 할 수없는 요소라는 것을 의미 할 수 있습니다.)

에서: W3C

XML 스키마 : 구조는 요소가 컨텐츠 유형에도 불구하고 컨텐츠 유형이 없거나 반드시 빈 컨텐츠를 허용하는 컨텐츠 유형이없는 경우에 요소를 · 유효한 ·로 받아 들여야한다는 신호를위한 메커니즘을 도입합니다. 속성 xsi : nil이 true가있는 경우 컨텐츠없이 요소가 · 유효 할 수 있습니다. 라벨이 붙은 요소는 비어 있어야하지만 해당 복합 유형에 의해 허용 된 경우 속성을 전달할 수 있습니다.

설명 :
책 XML 요소가 있고 자식 요소 중 하나가 책이 있다면 Book : Series를 작성할 때 몇 가지 옵션이 있습니다.

  1. 요소를 완전히 제거 - 시리즈 가이 책에 적용되지 않거나 해당 책이 시리즈의 일부가 아니라는 것을 나타낼 때 수행 할 수 있습니다. 이 경우 XSL은 책 : 시리즈와 일치하는 템플릿이있는 템플릿이있는 (또는 기타 이벤트 기반 프로세서) 변환을 호출하지 않습니다. 예를 들어, XSL이 책 요소를 테이블 행 (XHTML : TR)으로 바꾸면이 메소드를 사용하여 잘못된 수의 테이블 셀 (XHTML : TD)을 얻을 수 있습니다.
  2. 요소를 비워두고 - 이것은 시리즈가 ""또는 알려지지 않았거나 책이 시리즈의 일부가 아님을 나타낼 수 있습니다. 책 : 시리즈와 일치하는 모든 XSL Transform (또는 기타 Evernt 기반 파서)이 호출됩니다. current ()의 값은 ""입니다. 다음 설명과 마찬가지로이 방법을 사용하여 동일한 수의 XHTML : TD 태그를 얻을 수 있습니다.
  3. XSI 사용 : nil = "true" - 이것은 책이 비어있는 것이 아니라 책 : 시리즈 요소가 null임을 나타냅니다. 템플릿 매칭 책이있는 XSL Transform (또는 기타 이벤트 기반 파서)이 호출됩니다. current ()의 값은 비어 있습니다 (빈 문자열 아님). 이 방법과 (2)의 주요 차이점은 스키마 유형의 책 : 시리즈가 빈 문자열 ( "")을 유효한 값으로 허용 할 필요가 없다는 것입니다. 이는 직렬 요소에 대해서는 의미가 없지만 스키마에서 열거 된 유형으로 정의 된 언어 요소의 경우 xsi : nil = "true"는 요소에 데이터가 없을 수 있습니다. 또 다른 예는 10 진수의 요소입니다. 비워지기를 원한다면 "" "와 소수점 만 허용하는 열거 된 문자열을 결합하거나 소수점을 사용할 수있는 소수점을 사용할 수 있습니다.

다른 팁

XML에는 근본적으로 널 개념이 없기 때문에 정식 대답은 없습니다. 그러나 나는 당신이 XML/객체 매핑을 원한다고 가정합니다 (객체 그래프에는 null이 있기 때문에). 따라서 귀하를위한 답변은 "도구가 사용하는 것"입니다. 당신이 취급을 쓰면, 그것은 당신이 선호하는 것을 의미합니다. 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 스키마 : 구조를 소개합니다 요소가 · 유효한 것으로 받아 들여야한다는 신호를위한 메커니즘 컨텐츠 유형에도 불구하고 컨텐츠 유형에도 불구하고 빈 컨텐츠가 필요하지 않거나 반드시 허용하는 경우. 속성 xsi : nil이 true가있는 경우 컨텐츠없이 요소가 · 유효 할 수 있습니다. 라벨이 붙은 요소는 비어 있어야합니다, 해당 복합 유형에 의해 허용되는 경우 속성을 전달할 수 있습니다.

이 답을 명확히하기 위해 : 내용

  <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 형식은 요소를 생략하여 널 값을 나타냅니다. (또는 속성, 그리고 행운이 속성을 표시하는 행운 xsi:nil.)

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

보다 정교한 정보가 필요한 경우 GML 스키마는 NilReason 속성을 추가합니다. 지오 스찰:

  • xsi:nil "true"의 값을 사용하면 값이 없음을 나타내는 데 사용됩니다.
  • nilReason 결 측값에 대한 추가 정보를 기록하는 데 사용될 수 있습니다. 이것은 표준 GML 이유 중 하나 일 수 있습니다 (missing, inapplicable, withheld, unknown) 또는 텍스트에 의해 선정 된 텍스트 other:, 또는 더 자세한 설명에 대한 URI 링크 일 수도 있습니다.

데이터를 교환 할 때 XML이 일반적으로 사용되는 역할, 한 명의 수신자에게 전송 된 데이터 또는 주어진 목적으로 데이터가 다른 인증을 받거나 다른 인증을받은 다른 사람이 사용할 수있는 콘텐츠를 가릴 수 있습니다. 콘텐츠가 누락 된 이유를 아는 것이 매우 중요 할 수 있습니다.

과학자들은 또한 정보가 누락 된 이유에 관심이 있습니다. 예를 들어, 품질의 이유로 삭제 된 경우 원래 잘못된 데이터를보고 싶을 수 있습니다.

많은 경우 널 값의 목적은 이전 버전의 애플리케이션에 존재하지 않은 데이터 값을 제공하는 것입니다.

따라서 응용 프로그램 "ReportMaster"버전 1에서 XML 파일이 있다고 가정 해 봅시다.

이제 ReportMaster 버전 2에서 정의 될 수있는 일부 속성이 추가되었습니다.

'태그가 없음 의미 NULL'표현을 사용하면 ReportMaster 1 XML 파일을 읽는 자동 후진 호환성이 나타납니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top