잘못된 문자 및 이스케이프 규칙Invalid Characters and Escape Rules

이 항목에서는 FOR XML 절에서 잘못된 XML 문자를 처리하는 방법에 대해 설명하고 XML 이름의 잘못된 문자에 대한 이스케이프 규칙을 나열합니다.This topic describes how invalid XML characters are handled by the FOR XML clause, and lists the escape rules for characters that are invalid in XML names.

XML 및 잘못된 문자의 경우For XML and Invalid Characters

SQL ServerSQL Server 에서는 TYPE 지시어를 사용하지 않는 FOR XML 쿼리 내에서 잘못된 XML 문자가 반환되는 경우 해당 문자를 엔터티화합니다. entitizes invalid XML characters when they are returned within FOR XML queries that do not use the TYPE directive.

이러한 문자는 엔터티화되었는지 여부에 관계없이 XML 1.0 호환 파서에서 구문 분석 오류를 발생시키지만 엔터티화된 형식은 XML 1.1에 보다 적합합니다.Although XML 1.0 conformant parsers raise parse errors regardless of whether these characters are entitized or not, the entitized form is better aligned with XML 1.1. 엔터티화된 형식은 이후 버전의 XML 표준에도 적합할 가능성이 높습니다.The entitized form is also potentially better aligned with future versions of the XML standard. 또한 잘못된 문자의 코드 지점이 가시적으로 표시되기 때문에 보다 쉽게 디버깅을 수행할 수 있습니다.Additionally, it makes debugging simpler, because the code point of the invalid character becomes visible.

XML 도구 사용자의 경우에는 데이터 스트림에 잘못된 문자가 있으면 어떤 방식으로든 XML 파서가 실패하기 때문에 해결 방법이 필요하지 않습니다.For users of XML tools, no workaround is required, because the XML parser will fail either way at the point where the invalid characters occur in the data stream. 비-XML 도구를 사용하는 경우 이러한 변경 내용을 적용하려면 엔터티화된 값으로 이러한 문자를 검색할 수 있도록 프로그래밍 논리를 업데이트해야 합니다.If you use non-XML tools, this change can require you to update your programming logic to search for these characters as entitized values.

다음 공백 문자는 왕복 중에 해당 문자를 보존할 수 있도록 FOR XML 쿼리에서 다르게 엔터티화됩니다.The following white space characters are entitized differently in FOR XML queries to preserve their presence through round-tripping:

  • 요소 내용 및 특성의 경우: hex(0D) (캐리지 리턴)In element content and attributes: hex(0D) (carriage return)

  • 특성 내용의 경우: hex(09) (탭), hex(0A) (줄 바꿈)In attribute content: hex(09) (tab), hex(0A) (line feed)

    이러한 문자는 출력에 유지되며 파서에서 문자를 정규화하지 않습니다.These characters are preserved in output, and a parser will not normalize them.

이스케이프 규칙Escape Rules

SQL ServerSQL Server 이름은 유효하지 않은 문자가 이스케이프 숫자 엔터티 인코딩으로 변환되는 방식으로 XML 이름으로 변환됩니다. names that contain characters that are invalid in XML names, such as spaces, are translated into XML names in a way in which the invalid characters are translated into escaped numeric entity encoding.

XML 이름에 사용할 수 있는 알파벳이 아닌 문자는 콜론(:)과 밑줄()뿐입니다.There are only two non-alphabetic characters that can occur within an XML name: the colon (:) and the underscore (). 콜론은 네임스페이스용으로 이미 예약된 문자이므로 이스케이프 문자로는 밑줄이 선택되었습니다.Because the colon is already reserved for namespaces, the underscore is chosen as the escape character. 다음은 인코딩에 사용되는 이스케이프 규칙입니다.Following are the escape rules that are used for encoding:

  • XML 1.0 사양에 따라 유효한 XML 이름 문자가 아닌 모든 UCS-2 문자는 xHHHH_로 이스케이프됩니다.Any UCS-2 character that is not a valid XML name character, according to the XML 1.0 specification, is escaped as _xHHHH\. HHHH는 해당 문자에 대한 최상위 비트 우선 순서의 4자리 16진수 UCS-2 코드를 나타냅니다.The HHHH stands for the four-digit hexadecimal UCS-2 code for the character in the most significant bit-first order. 예를 들어 테이블 이름 Order Details 는 Order_x0020_Details로 인코딩됩니다.For example, the table name Order Details is encoded as Order_x0020_Details.

  • UCS-2 영역(U+0010FFFF에 U+00010000 범위의 USC-4 추가)은 xHHHHHHHH_로 인코딩됩니다.Characters that do not fit into the UCS-2 realm (the UCS-4 additions of the range U+00010000 to U+0010FFFF) are encoded as _xHHHHHHHH\. HHHHHHHH는 SQL Server 2000 이전 버전과의 호환성 모드인 경우 해당 문자에 대한 8자리 16진수 UCS-4 인코딩을 나타냅니다.The HHHHHHHH stands for the eight-digit hexadecimal UCS-4 encoding of the character, if under SQL Server 2000 backward compatibility mode. 그렇지 않으면 ISO 표준에 맞도록 문자가 xHHHHHH_로 인코딩됩니다.Otherwise, the characters are encoded as_xHHHHHH\, in order to align with the ISO standard.

  • 문자 x가 뒤에 이어지지 않는 경우에는 밑줄 문자를 이스케이프 처리하지 않아도 됩니다.The underscore character does not have to be escaped unless it is followed by the character x. 예를 들어 테이블 이름 Order_Details 는 인코딩되지 않습니다.For example, the table name Order_Details is not encoded.

  • 식별자에서 콜론은 이스케이프 처리되지 않으므로 네임스페이스 요소와 특성 이름이 FOR XML 쿼리에 의해 생성될 수 있습니다.The colon in identifiers is not escaped As a result, the namespace element and attribute names can be generated by the FOR XML query. 예를 들어 다음 쿼리는 이름에 콜론이 있는 네임스페이스 특성을 생성합니다.For example, the following query generates a namespace attribute that has a colon in the name:

    SELECT 'namespace-urn' as 'xmlns:namespace',   
     1 as 'namespace:a'   
    FOR XML RAW  
    

    쿼리 결과는 다음과 같습니다.The query produces this result:

    <row xmlns:namespace="namespace-urn" namespace:a="1"/>  
    

    XML 네임스페이스를 추가할 때는 WITH XMLNAMESPACES를 사용하는 것이 좋습니다.Note that WITH XMLNAMESPACES is the recommended way to add XML namespaces.

참고 항목See Also

FOR XML(SQL Server)FOR XML (SQL Server)