답변:
standalone선언은 어떤 마크 업 선언을 무시하는 파서를 이야기하는 방법이다 DTD를 . 그 후 DTD는 유효성 검사에만 사용됩니다.
예를 들어 겸손한 <img>태그를 고려하십시오 . 당신이 보면 XHTML 1.0 DTD , 당신은 그 파서를 알려주는 마크 업 선언을 참조 <img>태그 EMPTY하고 가지고 있어야 src하고 alt속성을. 브라우저가 XHTML 1.0 문서를 통과하고 <img>태그를 찾으면 DTD가 필요 src하고 alt속성이 있고 존재하지 않는 경우 추가해야합니다. 또한 <img>비어 있어야하므로 태그를 자동으로 닫습니다 . 이것이 "마크 업 선언이 문서의 내용에 영향을 줄 수 있습니다"라는 XML 사양의 의미입니다. 그런 다음 standalone선언을 사용하여 파서에게 이러한 규칙을 무시하도록 지시 할 수 있습니다 .
파서가 실제로이 작업을 수행하는지 여부는 또 다른 질문이지만 브라우저와 같은 표준 호환 유효성 검사 파서는 있어야합니다.
DTD를 지정하지 않으면 독립형 선언은 "의미가 없으므로"DTD도 지정하지 않으면 사용할 이유가 없습니다.
standalone=yes하면 마크 업 선언이 무시되지 않고 대신 문서가 유효하지 않은 XML이됩니다. 답변으로 수정해도 될까요?
yesand입니다 no. 여기서 no기본값입니다.standalone="yes"XML 프로세서는 유효성 검사를 위해서만 DTD를 사용해야합니다. 이 경우 다음 용도로는 사용 되지 않습니다 .
standalone="yes"문서가 외부 DTD를 사용하는 경우 타당성의 제약을 추가 할 수 있습니다. 문서가 같은 속성의 기본 값으로 XML의 수정을 요구 것들을 포함하고 할 때 standalone="yes"사용 하고 문서가 잘못되었습니다 .standalone="yes" 문서 처리 성능을 최적화하는 데 도움이 될 수 있습니다.standalone 현재 XML 문서가 외부 마크 업 선언에 의존하는지 여부를 설명합니다.
W3C는 "XML (Extensible Markup Language) 1.0 (제 5 판)"에서 그 목적을 설명합니다.
마크 업 선언은 XML 프로세서에서 응용 프로그램으로 전달 될 때 문서의 내용에 영향을 줄 수 있습니다. 예는 속성 기본값 및 엔티티 선언입니다. XML 선언의 구성 요소로 나타날 수있는 독립형 문서 선언은 문서 엔티티 외부 또는 매개 변수 엔티티에 나타나는 선언이 있는지 여부를 표시합니다. [정의 : 외부 마크 업 선언은 외부 하위 집합 또는 매개 변수 엔터티 (외부 또는 내부에서 발생하는 마크 업 선언으로 정의됩니다.
이 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의 정보를 사용해야합니다.