공백
W3C(World Wide Web 컨소시엄) XML 사양에서 여러 줄 끝 규칙을 단일 규칙으로 표준화하고 특성 값의 경우를 제외한 다른 모든 공백을 유지합니다. 또한 XML은 문서에서 공백을 유지해야 할 경우 응용 프로그램에 신호를 보내는 데 사용할 수 있는 도구 집합을 제공합니다.
공백 및 XML 선언
현재 XML 1.0 표준에 따라 XML 선언 앞에 공백을 사용할 수 없습니다.
XML 선언 앞에 공백이 나타난 경우 처리 명령으로 간주됩니다. 파서가 이 정보 특히, 인코딩을 사용할 수 없습니다.
XML 선언에 대한 자세한 내용은 XML 선언을 참조하십시오.
요소 내용의 공백
XML 파서는 문서의 요소 내용에 나타나는 모든 공백을 보고해야 합니다. 이러한 이유로 다음 세 문서의 XML 파서가 다릅니다.
<document>
<data>1</data>
<data>2</data>
<data>3</data>
</document>
및
<document><data>1</data><data>2</data><data>3</data></document>
및
<document><data>1</data> <data>2</data> <data>3</data></document>
일부 응용 프로그램의 경우 세 데이터 요소의 값이 제대로 인쇄하는 것보다 더 중요합니다. 문서 기반 XML 응용 프로그램의 경우 공백을 유지하는 것이 중요합니다.
문서 작성자는 xml:space
특성을 사용하여 공백이 중요하게 간주되는 문서 부분을 식별할 수 있습니다. 또한 스타일시트에서 xml:space
특성을 후크로 사용하여 프레젠테이션의 공백을 유지할 수 있습니다. 그러나 대부분의 XML 응용 프로그램은 xml:space
특성을 인식할 수 없기 때문에 이 특성은 참고용으로 사용됩니다.
xml:space
특성은 두 개의 값을 허용합니다.
default
이 값을 사용하면 응용 프로그램에서 필요에 따라 공백을 처리할 수 있습니다.xml:space
특성을 포함하지 않으면default
값을 사용하는 것과 같은 결과가 나타납니다.
preserve
이 값은 공백이 어떤 의미를 지닌 것으로 가정하고 응용 프로그램에서 공백을 그대로 유지하도록 지정합니다.
xml:space
특성 값은 자식 요소 중 하나에서 재정의하지 않으면 이 특성이 포함된 요소의 모든 하위 요소에 적용됩니다.
예를 들어, 다음 문서는 동일한 공백 동작을 지정합니다.
및
두 예제에서는 응용 프로그램에서 시의 행에 있는 모든 공백을 유지해야 하지만 문서의 다른 부분에 있는 공백은 필요에 따라 처리할 수 있음을 알려 줍니다.
언어에서 지정하는 해당 xml:lang
과 같이 xml:space
특성이 유효성 검사 환경에서 사용될 경우 DTD(문서 종류 정의)에서 선언해야 합니다. xml 네임스페이스가 XML 사양에 예약되어 있으므로 선언할 필요가 없습니다.
기본적으로 MSXML(Microsoft XML Core Services)에서는 xml:space
특성을 고려하지 않습니다. 응용 프로그램에서 xml:space
특성을 고려해야 할 경우 구문 분석하기 전에 DOMDocument
개체의 preserveWhiteSpace
속성을 True
로 설정해야 합니다.
xmldoc= new ActiveXObject("Msxml2.DOMDocument.5.0");
xmldoc.preserveWhiteSpace = true;
xmldoc.load(url);
또한 MSXML은 응용 프로그램 공백 처리를 파서에 위임할 수 있는 설정을 제공합니다. 자세한 내용은 MSXML SDK 설명서의 "공백 및 DOM" 항목을 참조하십시오.
참고: |
---|
공백 정보를 유지하면 요소 간의 공백 노드를 유지하는 데 필요한 오버헤드로 인해 DOM(문서 개체 모델) 트리의 크기가 크게 증가합니다. |
특성의 공백
XML 프로세서에서 요소 내용에 있는 모든 공백을 유지하지만 특성 값에서 이를 표준화하는 경우가 자주 있습니다. 탭, 캐리지 리턴 및 공백은 단일 공백으로 보고됩니다. 특정 형식의 특성은 값의 본문 앞이나 뒤에 오는 공백을 지우고 값 안에 있는 공백을 단일 공백으로 줄입니다. DTD를 사용할 수 있는 경우 CDATA 형식이 아닌 모든 특성에서 공백을 지웁니다.
예를 들어, XML 문서에 다음을 포함할 수 있습니다.
<whiteSpaceLoss note1="this is a note." note2="this
is
a
note.">
XML 파서는 두 특성 값을 "this is a note."
로 보고하고 줄 바꿈을 단일 공백으로 변환합니다.
참고: MSXML3의 DOM과 SAX는 모두 공백을 표준화하지 않습니다. MSXML6의 DOM은 공백을 표준화하지 않지만 SAX는 공백을 표준화합니다.
문서에 대한 DTD가 있을 경우 CDATA 이외의 형식으로 선언된 특성은 특성 값 시작과 끝에서 공백이 제거됩니다. 값 안에 있는 모든 공백 클러스터가 단일 공백으로 바뀝니다. DTD가 없을 경우 파서는 모든 특성을 CDATA 형식으로 가정합니다.
줄의 끝 처리
XML 프로세서는 문자 시퀀스 CRLF(캐리지 리턴-줄 바꿈)를 단일 CR 또는 LF 문자와 같이 처리합니다. 모두 단일 LF 문자로 보고됩니다. 응용 프로그램은 적절한 줄 끝 규칙을 사용하여 문서를 저장합니다.