답변:
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이됩니다. 답변으로 수정해도 될까요?
yes
and입니다 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의 정보를 사용해야합니다.