2011-09-24 3 views
4

XHTML 확장 인 XML 템플릿의 유효성을 검사하려고합니다. 이제 ID 속성에 {|과 같은 특수 문자가 있습니다. XHTML DTD를 확장하여 ID 속성에 허용 된 문자로 제한을 덮어 쓸 수 있습니까? 아니면 XML 사양에 정의 된 문자입니까?ID 속성에서 특수 문자를 사용하도록 XHTML DTD 확장

답변

5

'{'및 '|'문자는 사용할 수 없습니다. XML specification에서이

Values of type ID must match the Name production. A name must not appear more than once in an XML document as a value of this type; i.e., ID values must uniquely identify the elements which bear them.

이름 생산 here 말한다 때문에 직접 ID 속성.

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

불행히도 왼쪽 중괄호와 파이프가 허용되지 않습니다 당신은 문법 규칙을 확장하면 당신은 이름에 사용할 수있는 유일한 문자가이 작품에 의해 제공되는 것을 알 수있다. 해당 문자의 코드 포인트는 각각 # 7B 및 # 7C입니다. 허용 된 문자 범위가 아닙니다.

TL : DR : ID 속성의 유효한 문자는 XML 사양에서 소유하며 두 문자는 유효하지 않습니다. 여기

칙은 몇 가지 예입니다. 다음 문서는 W3C 유효성 검사 사이트에서 XHTML에 대한 유효성 검사를 통과 :

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 
    <head> 
    <title>A title</title> 
    </head> 
    <body id="anid"> 
    </body> 
</html> 

하지만 다음

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 
    <head> 
    <title>A title</title> 
    </head> 
    <body id="ani{d"> 
    </body> 
</html> 

우리는 오류받지 않습니다 : 이제

Line 8, Column 16: character "{" is not allowed in the value of attribute "id" 

을 오히려 흥미로운 경우 그 당신은 진짜로 ID 이름에 왼쪽 둥근 괄호를 원한다면 을 시도하십시오 :

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 
    <head> 
    <title>A title</title> 
    </head> 
    <body id="ani&#x7B;d"> 
    </body> 
</html> 

하지만 과 같은 오류가 발생합니다. 이것을 시도해 볼 수도 있습니다. 유효성 검사기는 앰퍼샌드 해시 x 7 b 세미콜론으로 줄을 표시하지만 거기에 왼쪽 괄호가 있다고 생각합니다.

결론은 간단히 에 XML 사양에서 허용하는 문자 이외의 문자를 사용할 수 없다는 것입니다.

+0

고마워요! 그래서 속성의 이름을 변경해야합니다. – stofl

+0

예, 이름을 변경해야 할 것 같습니다. 내 대답에 몇 가지 샘플 유효성 검사를 추가하여 문자 엔티티를 사용하여 유효성 검사기를 무용 할 수 없음을 보여줍니다. 사양은 사양입니다. :) –

+0

대단히 고마워요. – stofl

관련 문제