2009-10-14 3 views
0

project 나는 임의의 HTML 파일을 가져 와서 최대한 XHTML로 변환하고 XML 메타 데이터로 래핑합니다. DOCTYPE은 결과 XML 파일이 XHTML 문서가 아니므로 제거됩니다. 그러나 XML 파일에서 랩핑 된 XHTML을 검색 할 때 DOCTYPE을 다시 삽입해야합니다.왜 Frameset DTD를 사용하면 유효성 검사 오류가 발생합니까?

이들은 임의의 HTML 파일이므로 모든 내용을 포함 할 수 있지만 원래 DTD를 저장하거나 결정할 필요가 없습니다. Transitional DTD의 상위 집합 이었기 때문에 Frameset DTD를 사용해야하고 모든 내용에 유효해야한다고 생각했습니다. 그러나 동일한 문서에서 W3C XHTML Validator을 사용하는 경우 Transitional DTD를 사용하지만 Frameset DTD를 사용하면 실패합니다.

문제를 재현 할 수있는 최소 수준으로 문서를 정리했습니다. 여기에 프레임 셋 버전입니다 :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml"> 

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Make The Move</title> 
</head> 

<body style="background: none;"> 
    <h3 id="why">Why should I move to Linux?</h3> 
</body> 

</html> 


그리고 여기에 과도 버전 :

<!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" xmlns:html="http://www.w3.org/1999/xhtml"> 

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Make The Move</title> 
</head> 

<body style="background: none;"> 
    <h3 id="why">Why should I move to Linux?</h3> 
</body> 

</html> 


이 일어나고있는 이유를 설명하고, 내가 진행하는 방법을하시기 바랍니다.

답변

1

프레임 세트 DTD는 전환의 '수퍼 세트'가 아닙니다. 프레임을 레이아웃하기 위해서만 사용되는 특수한 DTD입니다 (<noframes> 태그를 제외하다). <html> 태그의 자식으로 <head><frameset> 만 허용됩니다.

Here은 사양입니다.

페이지에 프레임이있을 수 있다는 것을 알고 있지 않다면 과도기 또는 엄격한 DTD를 고수하십시오.

0

Chetan이 지적했듯이 Frameset DTD는 프레임이 필요한 경우에만 사용해야하며, 그렇다고하더라도 대신 Transitional을 사용하는 것이 좋습니다. 프레임에 의존하지 않는다면 엄격한 방법이 필요합니다.

관련 문제