XML에서 '독립형'지시어 란 무엇입니까?


272

standaloneXML 문서에서 ' '지시문은 무엇을 의미합니까?

답변:


203

standalone선언은 어떤 마크 업 선언을 무시하는 파서를 이야기하는 방법이다 DTD를 . 그 후 DTD는 유효성 검사에만 사용됩니다.

예를 들어 겸손한 <img>태그를 고려하십시오 . 당신이 보면 XHTML 1.0 DTD , 당신은 그 파서를 알려주는 마크 업 선언을 참조 <img>태그 EMPTY하고 가지고 있어야 src하고 alt속성을. 브라우저가 XHTML 1.0 문서를 통과하고 <img>태그를 찾으면 DTD가 필요 src하고 alt속성이 있고 존재하지 않는 경우 추가해야합니다. 또한 <img>비어 있어야하므로 태그를 자동으로 닫습니다 . 이것이 "마크 업 선언이 문서의 내용에 영향을 줄 수 있습니다"라는 XML 사양의 의미입니다. 그런 다음 standalone선언을 사용하여 파서에게 이러한 규칙을 무시하도록 지시 할 수 있습니다 .

파서가 실제로이 작업을 수행하는지 여부는 또 다른 질문이지만 브라우저와 같은 표준 호환 유효성 검사 파서는 있어야합니다.

DTD를 지정하지 않으면 독립형 선언은 "의미가 없으므로"DTD도 지정하지 않으면 사용할 이유가 없습니다.


9
이 예는 추가 수정이 필요합니다. "standalone = 'no'"가 있으면 닫히지 않은 XML 태그를 닫지 않습니다 (이것은 SGML의 기능이지만 XML의 기능은 아닙니다). 유효성 검사가 실패합니다. 필수 속성에 대한 값도 제공하지 않습니다.
khaemuaset

2
"독립형 선언은 파서에게 DTD의 마크 업 선언을 무시하도록 지시하는 방법입니다."맞지 않습니다. 을 사용 standalone=yes하면 마크 업 선언이 무시되지 않고 대신 문서가 유효하지 않은 XML이됩니다. 답변으로 수정해도 될까요?
sleske

@sleske 그냥 변경하십시오. 행복하지 않은 작가는 항상 되돌릴 수 있습니다.
Stephan

@Stephan : 격려해 주셔서 감사합니다. 불행히도, 나는 더 이상 전체 XML에 대해 잘 알고 있지 않기 때문에 지금 당장 자신있게 편집 할 수 없습니다. 최신 지식이 있다면 자유롭게 편집하십시오 :-).
10

106
  • 독립형 지시문은 XML 선언의 선택적 속성입니다.
  • 유효한 값은 yesand입니다 no. 여기서 no기본값입니다.
  • 이 속성은 DTD 가 사용될 때만 관련 이 있습니다. DTD 대신 스키마 를 사용하는 경우이 속성은 관련이 없습니다 .
  • standalone="yes"XML 프로세서는 유효성 검사를 위해서만 DTD를 사용해야합니다. 이 경우 다음 용도로는 사용 되지 않습니다 .
    • 속성의 기본값
    • 엔터티 선언
    • 표준화
  • 참고 standalone="yes"문서가 외부 DTD를 사용하는 경우 타당성의 제약을 추가 할 수 있습니다. 문서가 같은 속성의 기본 값으로 XML의 수정을 요구 것들을 포함하고 할 때 standalone="yes"사용 하고 문서가 잘못되었습니다 .
  • standalone="yes" 문서 처리 성능을 최적화하는 데 도움이 될 수 있습니다.

출처 : 독립형 의사 속성은 DTD를 사용하는 경우에만 관련이 있습니다.


2
standalone = "yes"를 사용하면 추가 유효성 제약 조건이 발생합니다 (예 : XML 문서가 유효하지 않을 수 있음). 나는 이것을 대답으로 편집했다.
sleske

2
@sleske 기여해 주셔서 감사합니다. 요점을 분명히 말하면서 편집을 단순화하려고했습니다. 내가 틀렸다면 다시 편집하십시오.
Rinke

20

standalone 현재 XML 문서가 외부 마크 업 선언에 의존하는지 여부를 설명합니다.

W3C는 "XML (Extensible Markup Language) 1.0 (제 5 판)"에서 그 목적을 설명합니다.


10

마크 업 선언은 XML 프로세서에서 응용 프로그램으로 전달 될 때 문서의 내용에 영향을 줄 수 있습니다. 예는 속성 기본값 및 엔티티 선언입니다. XML 선언의 구성 요소로 나타날 수있는 독립형 문서 선언은 문서 엔티티 외부 또는 매개 변수 엔티티에 나타나는 선언이 있는지 여부를 표시합니다. [정의 : 외부 마크 업 선언은 외부 하위 집합 또는 매개 변수 엔터티 (외부 또는 내부에서 발생하는 마크 업 선언으로 정의됩니다.

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


12
그게 무슨 뜻이야?
dan carter

4
나는 이것이 보통의 QI를 가진 정상적인 인간에게 이해 될 수있는 방식으로 놓여 져야한다고 공감했다.
Andrea Silvestri

8

standalone=yes선언 의 목적은 문서 내부의 정보를 내부 DTD에만 기반하여 충실하게 검색 할 수 있도록하는 것입니다. 즉, 문서는 외부 참조없이 "독립"가능합니다. 독립형 문서의 유효성을 검증하면 유효성을 검사하지 않는 프로세서가 문서를 올바르게 구문 분석하는 데 사용할 수있는 모든 정보를 갖게됩니다.

독립형 선언은 문서에 외부 DTD가없고 내부 DTD에 매개 변수 엔티티 참조가없는 경우 목적이 없습니다. 이러한 문서는 이미 암시 적으로 독립형입니다.

다음은의 실제 효과입니다 standalone=yes.

  • 내부 DTD에 선언되지 않은 엔티티에 대한 참조가 문서에 포함 된 경우 (문서 유효성 검사가 필요하지 않으므로 매개 변수 엔티티의 대체 텍스트를 제외하고) 외부 DTD 또는 매개 변수 엔티티 참조로 문서를 구문 분석 할 때 프로세서가 오류를 발생시킵니다. 이것을 파싱하십시오); amp, lt, gt, apos, 그리고 quot유일한 예외는

  • 독립형으로 선언되지 않은 문서를 구문 분석 할 때 유효성을 검증하지 않는 프로세서는 매개 변수 엔티티 참조가 발생하자마자 내부 DTD 구문 분석을 자유롭게 중지 할 수 있습니다. 문서를 독립형으로 선언하면 유효성을 검사하지 않는 프로세서가 하나 이상의 매개 변수 엔티티 참조를 무시한 후에도 내부 DTD에서 마크 업 선언을 구문 분석해야합니다.

  • 문서에 다음 중 하나라도 있고 해당 선언이 외부 DTD 또는 매개 변수 엔티티 대체 텍스트에있는 경우 유효성 검증 프로세서가 오류를 발생시킵니다.

    • 명시 적으로 제공된 값이없는 경우 기본값이있는 속성
    • 엔티티 참조 (이외의 amp, lt, gt, apos,과 quot)
    • 정규화로 속성 값을 수정하는 경우 토큰 화 된 유형의 속성
    • 내용에 공백이 있으면 요소 내용이있는 요소

유효성을 검증하지 않는 프로세서는 외부 DTD를 검색하고 독립형이 아닌 문서에 대한 모든 매개 변수 엔티티 참조를 확장 할 것을 고려할 standalone=yes수 있습니다. 아마 차이가 없을 것입니다).


여기에있는 다른 답변은 불완전하거나 부정확합니다. 주된 오해는

독립형 선언은 파서에게 DTD의 마크 업 선언을 무시하도록 지시하는 방법입니다. 그 후 DTD는 유효성 검사에만 사용됩니다.

standalone = "yes"는 XML 프로세서가 유효성 검사에만 DTD를 사용해야 함을 의미합니다.

반대로 문서를 독립형으로 선언하면 실제로 유효성을 검사하지 않는 프로세서가 일반적으로 무시해야하는 내부 선언 (즉, 무시 된 매개 변수 엔터티 참조 이후의 내부 선언)을 구문 분석해야합니다. 유효성을 검사하지 않는 프로세서는 유효성 검사와 독립적이므로 기본 속성 값을 제공하고 토큰 화 된 속성을 정규화하기 위해 여전히 내부 DTD의 정보를 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.