검색결과 리스트
Dev에 해당되는 글 65건
- 2012/03/12 네이버의 경향,한겨례 뉴스차단 과연 그들이 맞는가?
- 2010/09/01 html 특수문자표
- 2010/08/11 EXPLAIN을 사용해서 쿼리 최적화 하기
- 2010/06/08 html5 와 html4 의 다른점
- 2010/06/08 갤럭시S 시연 동영상
글
Dev/googling 2012/03/12 14:30네이버의 경향,한겨례 뉴스차단 과연 그들이 맞는가?
조선일보의 90일간 malware 결과
http://www.google.com/safebrowsing/diagnostic?site=chosun.com
YTN의 90일간 malware 결과
http://www.google.com/safebrowsing/diagnostic?site=ytn.co.kr
동아일보의 90일간 malware 결과
http://www.google.com/safebrowsing/diagnostic?site=donga.com
한겨례신문의 90일간 malware 결과
http://www.google.com/safebrowsing/diagnostic?site=hani.co.kr
경향신문의 90일간 malware 결과
http://www.google.com/safebrowsing/diagnostic?site=khan.co.kr
기사를 보다가 문득 생각나서 구글의 malware(악성코드) 검색을 이용해서 malware빈도를 비교 해보게 됐다.
어떤사이트에 malware 많은것일까?
네이버가 내부에서 파악하고 있는 통계는 어떤기준인지 먼저 밝여야 하지 않을까??
정치적이 아니라는 근거를 언넝 밝혀라~~~~~~
자꾸 의심하게되네 씨바!~~~
트랙백
댓글
글
Dev/Ajax/Xml/w3c/Html5 2010/09/01 11:55html 특수문자표
|
|
|
|
- 아래는 Symbolic HTML entity입니다
- 이제 NetScape사용자 분들도 제데로 보이시죠. 명심하실것은 quot,amp,lt,gt,nbsp 다섯개 이외의 것은 모두 < PRE > tag로 묽어준 안에서만 제대로 나타난다는 겁니다 잊지마시길 .. 여기까지 읽어주셔서 감사합니다. 즐거운 하루되세요
- 는 빈칸, space입니다
|
|
|
|
트랙백
댓글
글
Dev/mysql 2010/08/11 09:56EXPLAIN을 사용해서 쿼리 최적화 하기
7.2.1. EXPLAIN을 사용해서 쿼리 최적화 하기
EXPLAIN tbl_name
또는:
EXPLAIN [EXTENDED] SELECT select_options
EXPLAIN 명령문은 DESCRIBE에 대한 동의어로 사용할 수 있거나 또는 MySQL이 SELECT 명령문을 실행하는 방법에 대한 정보를 얻기 위한 수단으로 사용할 수가 있다:
EXPLAINtbl_name은DESCRIBEtbl_name또는SHOW COLUMNS FROMtbl_name과 동일한 의미이다.SELECT명령문을EXPLAIN앞에 두면, MySQL은 쿼리 실행 플랜 (query execution plan) 정보를 옵티마이저 (optimizer)에서 가져 와서 출력 한다. 즉, MySQL은 테이블들이 어떤 순서로 조인 (join) 하는지에 대한 정보를 포함해서,SELECT를 처리하는 방법에 대해서 알려 준다.
이 섹션에서는 쿼리 실행 플랜 정보를 얻기 위한 EXPLAIN사용법을 설명한다. DESCRIBE 및 SHOW COLUMNS 명령문에 대한 설명은 Section 13.3.1, “DESCRIBE 신텍스”, 및 Section 13.5.4.3, “SHOW COLUMNS 신텍스”를 참조하기 바란다.
EXPLAIN를 사용함으로써, 여러분은 테이블의 어느 곳에 인덱스를 추가해야만 열을 찾기 위한 SELECT가 보다 빠르게 되는지를 알 수 있게 된다. 또한, EXPLAIN를 사용하면 옵티마이저가 최적의 (optimal) 순서로 테이블을 조인 (join)할 수 있는지 여부도 검사할 수가 있다. SELECT 명령문에 명명되어 있는 테이블의 순서와 상응하게 조인 (join) 순서를 사용하도록 옵티마이저를 만들기 위해서는, 명령문에 SELECT만을 사용하는 대신에 SELECT STRAIGHT_JOIN을 사용해서 시작을 하도록 한다.
만일 여러분 생각에는 사용 되어야만 했을 인덱스가 사용되지 않은 상태로 문제를 일으키게 되면, 키의 기수 (cardinality)와 같은 테이블 상태를 업데이트 하기 위해 ANALYZE TABLE을 구동 시켜야 하는데, 이것은 옵티마이저의 선택에 영향을 미치게 된다. Section 13.5.2.1, “ANALYZE TABLE 신텍스”를 참조할 것.
EXPLAIN은 SELECT 명령문에서 사용된 각 테이블 정보 열을 리턴한다. MySQL이 쿼리를 처리하는 동안 읽을 수 있도록 테이블들은 결과물 안에 목록으로 정리가 된다. MySQL 은 single-sweep multi-join 방법을 사용해서 모든 조인 (join)을 풀어 버린다 (reslove). 이것은 MySQL이 첫 번째 테이블에서 열을 읽고, 그 다음에 두 번째 테이블에서 매치 (match)가 되는 것을 찾으며, 세 번째, 네 번째 등으로 이동을 한다는 것을 의미하는 것이다. 모든 테이블을 처리한 후에, MySQL은 선택된 컬럼을 내 보내고 테이블에서 매치되는 다른 열이 있을 때까지 테이블을 역으로 검사한다. 그 테이블에서 그 다음 열을 읽고 다음 테이블로 이동을 해서 동일한 과정을 반복 진행한다.
EXTENDED 키워드가 사용되면, EXPLAIN은 EXPLAIN 명령문 다음에 SHOW WARNINGS 명령문을 입력해서 볼 수 있는 기타 정보를 리턴한다. 이 정보는 옵티마이저가 SELECT 명령문에 있는 컬럼 이름과 테이블을 얼마나 많이 검증을 하였는지를 보여주며, SELECT는 최적화 과정에 관한 어플리케이션 재 작성과 최적화 규칙, 그리고 다른 가능한 노트 (notes)를 보여준다.
EXPLAIN를 통해서 나오는 각각의 결과 열은 하나의 테이블에 대한 정보이며, 각 열은 아래의 컬럼을 가지고 있다:
id
SELECT 아이덴티파이어 (identifier). 이것은 쿼리 안에 있는 SELECT의 순차적인 번호(sequential number)이다.
select_type
SELECT에 대한 타입이며, 아래의 테이블에 있는 것 중에 하나가 된다:
|
|
Simple |
|
|
Outermost |
|
|
Second or later |
|
|
Second or later |
|
|
Result of a |
|
|
First |
|
|
First |
|
|
Derived table |
DEPENDENT는 전형적으로는 상호 연관된 (correlated) 서브 쿼리(subquery)의 사용을 의미한다.
table
결과 열이 참조하는 테이블.
type
조인 (join) 타입. 서로 다른 타입의 조인 (join)이 아래에 있는데, 가장 좋은 것부터 가장 나쁜 것의 순서로 되어 있다:
system
테이블은 하나의 열만을 가지고 있다 (= 시스템 테이블). 이것은 const 조인 (join) 타입의 특별한 경우이다.
const
테이블은 적어도 하나의 매칭 (matching) 테이블을 가지고 있는데, 쿼리가 시작되는 시점에서 이 테이블을 읽게 된다. 여기에는 하나의 열만이 존재하기 때문에, 이 열에 있는 컬럼에서 얻는 값은 나머지 옵티마이저에 의해 상수 (constant)로 인식될 수 있다. const 테이블은 한번 밖에 읽혀지지 않기 때문에 매우 빠르다.
const는 PRIMARY KEY 또는 UNIQUE 인덱스의 모든 부분을 상수 값 (constant value)과 비교를 할 때 사용된다. 아래의 쿼리에서 보면, tbl_name은 const 테이블 형태로 사용되고 있다:
SELECT * FROM tbl_name WHERE primery_key=1;
SELECT * FROM tbl_name
WHERE primery_key_part1=1 AND primery_key_part2=2;
eq_ref
이전 테이블로부터 각 열을 조합 (combination)하기 위해서 이 테이블의 열을 하나읽는다. system 및 const 타입과는 달리, 이것이 가장 최선의 가능 조인 (join) 타입이다. 이것은 조인 (join)에 의해 인덱스의 모든 부분이 사용될 때 쓰이게 되며, 이때 인덱스는 PRIMARY KEY 또는 UNIQUE 인덱스가 된다.
eq_ref는 = 연산자를 사용해서 비교되는 인덱스된 컬럼용으로 사용될 수 있다. 비교 값은 이 테이블 전에 읽었던 테이블에서 컬럼을 사용한 수식 또는 상수 (constant)가 될 수 있다. 아래의 예제에서 보면, MySQL은 ref_table를 처리하기 위해서 eq_ref 조인 (join)을 사용하고 있다.
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1=other_table.column
AND ref_table.key_column_part2=1;
ref
이전 테이블에서 읽어온 각각의 열을 조합하기 위해 이 테이블에서 매칭 (matching)되는 인덱스 값을 가진 모든 열을 읽어온다. 만일 조인 (join)이 키의 좌측 끝(leftmost) 접두사 만을 사용하거나 또는 키 값이 PRIMARY KEY 또는 UNIQUE 인덱스가 아니라면 (달리 말하면, 만일 조인 (join)이 키 값을 기반으로 한 단일 (single) 열을 선택하지 않는다면), ref가 사용된다. 만일 사용된 키가 적은 수의 열에 대해서만 매치가 된다면, 그것은 좋은 조인 (join) 타입인 것이다.
ref는 = 또는 <=> 연산자를 사용해서 비교되는 인덱스된 컬럼에 대해 사용될 수 있다. 아래의 예제에서 본다면, MySQL은 ref_table 처리 과정에서 ref 조인 (join)을 사용한다.
SELECT * FROM ref_table WHERE key_column=expr;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1=other_table.column
AND ref_table.key_column_part2=1;
ref_or_null
이 조인 (join) 타입은 ref과 유사하지만, MySQL이 NULL 값을 가지고 있는 열에 대해서도 검색을 한다는 점에서 차이가 있다. 이 조인 (join) 타입 최적화는 서브 쿼리(subqueries)를 해석할 때 자주 사용된다. 아래의 예제에서 보면, MySQL은 ref_table처리 과정에서 ref_or_null 조인 (join)을 사용하고 있다.
SELECT * FROM ref_table
WHERE key_column=expr OR key_column IS NULL;
index_merge
이 조인 (join) 타입은 인덱스 병합 최적화가 사용되었음을 나타낸다. 이 경우에, 결과 열에 있는 key 컬럼은 사용된 인덱스 리스트를 가지고 있고, key_len는 사용된 인덱스에 대해서 가장 긴 키 부분의 리스트를 가지고 있다.
unique_subquery
이 타입은 아래 형태의 IN 서브 쿼리 (subqueries)에 대해서 ref를 대체한다:
value IN (SELECT primary_key FROM single_table WHERE some_expr)
unique_subquery는 효율성을 위해서 서브 쿼리 (subquery)를 대체하는 인덱스 룩업(lookup) 함수이다.
index_subquery
이것은 unique_subquery와 유사한 조인 (join) 타입이다. 이것은 IN 서브 쿼리(subqueries)를 대체하지만, 아래 형태의 서브 쿼리 (subquery)에 있는 논-유니크(non-unique)인덱스에 대해서도 동작을 한다:
value IN (SELECT key_column FROM single_table WHERE some_expr)
range
주어진 범위에 들어 있는 열만을 추출하며, 열 선택은 인덱스를 사용한다. 결과 열에 있는 key 컬럼은 어떤 인덱스가 사용되었는지를 가리킨다. key_len은 사용된 키에서 가장 긴 부분을 가진다. ref 컬럼은 이 타입에 대해서는 NULL 값이 된다.
range는 키 컬럼이 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, 또는 IN 연산자를 사용하는 상수 (constant)와 비교할 때 사용될 수 있다:
SELECT * FROM tbl_name
WHERE key_column = 10;
SELECT * FROM tbl_name
WHERE key_column BETWEEN 10 and 20;
SELECT * FROM tbl_name
WHERE key_column IN (10,20,30);
SELECT * FROM tbl_name
WHERE key_part1= 10 AND key_part2 IN (10,20,30);
index
이 조인 (join) 타입은 ALL과 동일하지만, 인덱스 트리 (index tree)만을 스캔한다는 점에서 다르다. 일반적으로, 보통의 인덱스 파일이 데이터 파일보다 작기 때문에, 이것은 ALL 보다는 빠르게 동작한다.
MySQL은 쿼리가 단일 인덱스의 일부분인 컬럼만을 사용할 때 이 조인 (join) 타입을 사용한다.
ALL
이전 테이블에서 읽어온 각각의 열을 조합하기 위해 전체 테이블 스캔을 실행한다. 테이블이 const가 표시되지 않은 첫 번째 테이블이고, 다른 모든 경우에 있어서 매우 좋지 않은 경우라면, 이것은 그리 좋은 경우가 아니다. 일반적인 경우에는, 이전 테이블에서 가져온 상수(constant) 값 또는 컬럼 값을 사용해서 테이블 열을 추출하는 인덱스를 추가하면 ALL을 피할 수가 있다.
possible_keys
possible_keys 컬럼은 이 테이블에서 열을 찾기 위해 MySQL이 선택한 인덱스를 가리킨다. 이 컬럼은 EXPLAIN 결과에서 나타나는 테이블 순서와는 전적으로 별개의 순서가 된다. 이것은, possible_keys에 있는 키 중에 어떤 것들은 테이블 순서를 만드는 과정에서는 사용되지 않을 수도 있음을 의미하는 것이다.
만일 이 컬럼 값이 NULL이라면, 연관된 인덱스가 존재하지 않게 된다. 이와 같은 경우, 여러분은 WHERE 구문을 검사해서, 이 구문이 인덱스 하기에 적당한 컬럼을 참조하고 있는지 여부를 알아 봄으로써 쿼리 속도를 개선 시킬 수가 있게 된다. 그러한 경우라면, 적절한 인덱스를 하나 생성한 후에, EXPLAIN을 다시 사용해서 쿼리를 검사한다.
테이블이 어떤 인덱스를 가지고 있는지를 보기 위해서는, SHOW INDEX FROM tbl_name를 사용한다.
key
key 컬럼은 MySQL이 실제로 사용할 예정인 키 (인덱스)를 가리킨다. 만일 아무런 인덱스도 선택되지 않았다면, 그 키는 NULL이 된다. MySQL로 하여금 possible_keys 컬럼에 있는 인덱스를 사용하거나 또는 무시하도록 만들기 위해서, FORCE INDEX, USE INDEX, 또는 IGNORE INDEX를 쿼리에서 사용하도록 한다.
MyISAM 및 BDB 테이블의 경우에는, ANALYZE TABLE를 구동시키면 옵티마이저가 보다 좋은 인덱스를 선택하도록 도움을 줄 수가 있다. MyISAM 테이블의 경우에는, myisamchk --analyze 가 동일한 역할을 한다.
key_len
key_len 컬럼은 MySQL이 사용하기로 결정한 키의 길이를 나타낸다. 만일 key 컬럼이 NULL이라면, 이 값도 NULL이 된다. key_len 값은 다중-부분 (multiple-part) 키 중에 얼마나 많은 부분을 MySQL이 실제로 사용하는지를 여러분이 알 수 있도록 해 준다.
ref
ref 컬럼은 테이블에서 열을 선택하기 위해 key 컬럼 안에 명명되어 있는 인덱스를 어떤 컬럼 또는 상수(constant)와 비교하는지를 보여준다.
rows
rows 컬럼은 MySQL이 쿼리를 실행하기 위해 조사해야 하는 열의 숫자를 가리킨다.
Extra
이 컬럼은 MySQL이 쿼리를 어떻게 해석하는지에 관한 추가적인 정보를 제공한다. 이 컬럼이 가질 수 있는 값은 다음과 같다:
Distinct
MySQL은 명확한 값 (distinct value)를 찾게 되며, 따라서 MySQL이 매칭되는 열을 찾게 되면 더 이상의 열에 대해서는 검색을 중단한다.
Not exists
MySQL은 쿼리상에서 LEFT JOIN 최적화를 실행 했으며, 이 최적화와 매치되는 열을 찾은 후에는 더 이상 이 테이블에서 이전 열 조합 검색을 하지 않게 된다. 이러한 방식으로 최적화가 되는 쿼리 타입의 예는 다음과 같다:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
t2.id를 NOT NULL로 정의했다고 가정하자. 이와 같은 경우, MySQL은 t1을 스캔하고 t1.id 값을 사용해서 t2에 있는 열을 검색한다. 만일 MySQL이 t2에서 매칭되는 열을 발견하면, MySQL은 t2.id 가 결코 NULL이 아님을 알게 되며, 따라서 동일한 id 값을 가지고 있는 t2에서는 더 이상 열을 스캔하지 않게 된다. 달리 표현하면, t1에 있는 각 열에 대해서, MySQL은 t2에서는 단일 검색 (lookup)만을 하게 되며, t2에서 실제로 얼마나 많은 열이 매치가 되는지는 상관이 없게 된다.
range checked for each record (index map: N)
MySQL은 사용하기에 좋은 인덱스를 찾지 못했으나, 이전 테이블에서 컬럼 값을 찾고 난 후에는 사용할 수도 있을 법한 인덱스는 알아냈다. 이전 테이블에 있는 각 열 조합에 대해서는, MySQL은 그 조합이 열을 추출하기 위해서 range 또는 index_merge 접근 방식을 사용할 수 있는지를 검사한다. 이 방법은 그리 빠른 방법은 아니지만, 인덱스를 전혀 사용하지 않는 것 보다는 빠르게 진행한다.
Using filesort
MySQL은 저장된 순서에 따라서 열을 추출하는 방법을 찾기 위해 기타 과정을 진행한다. 정렬 (sort)은 조인 (join) 타입과 정렬 키 및 WHERE 구문과 매치가 되는 모든 열에 대한 열 포인터 (pointer)를 사용해서 모든 열에 걸쳐 진행 된다. 그런 다음에 그 키는 저장이 되고 열은 저장 순서에 따라서 추출된다.
Using index
인덱스 트리에 있는 정보만을 가지고 테이블에서 컬럼 정보를 추출한다. 쿼리가 단일 인덱스의 일부 컬럼만을 사용하는 경우에, 이러한 전략을 사용할 수가 있다.
Using temporary
쿼리를 해석하기 위해서는, 결과를 저장할 임시 테이블을 하나 생성해야 한다. 만일 쿼리가 컬럼을 서로 다르게 목록화 하는 GROUP BY 및 ORDER BY 구문을 가지고 있는 경우에 이런 것이 일어나게 된다.
Using where
WHERE 구문은 다음 테이블에 대한 열 매치 (match) 또는 클라이언트에 보내지는 열을 제한하기 위해 사용된다. 테이블에서 모든 열을 조사하거나 불러올 의도가 특별히 없다면, Extra 값이 Using where 가 아니고, 테이블 조인 (join) 타입이 ALL 또는 index일 경우에는 쿼리에 문제가 생길 수도 있다.
만일 여러분이 가능한 한 빠른 쿼리를 만들고 싶다면, Extra Using filesort 및 Using temporary 값을 조사하도록 한다.
Using sort_union(...),Using union(...),Using intersect(...)
이것들은 인덱스 스캔이 어떻게 index_merge 조인 타입과 병합 (merge)이 되는지를 나타낸다. Section 7.2.6, “인덱스 병합 최적화”를 참조할 것.
Using index for group-by
테이블 접근에 대한 Using index 방식과 유사한 Using index for group-by 방식은MySQL이 실제 테이블을 추가적으로 검색을 하지 않고서도, GROUP BY 또는 DISTINCT 쿼리의 모든 컬럼을 추출 (retrieve)하기 위해 사용될 수 있는 인덱스를 찾았음을 가리킨다. 또한, 그 인덱스는 각 그룹에 대해 가장 효과적인 방식으로 사용되기 때문에, 적은 수의 인덱스 엔트리만이 읽혀지게 된다.
Using where with pushed condition
이 아이템은 NDB Cluster 테이블에만 적용된다. 이것은 MySQL 클러스터가 인덱스가 되지 않은 컬럼 (non-indexed column)과 상수 (constant) 간의 직접 비교 (direct comparision (=))의 효율성을 개선하기 위해서 조건문을 푸시 다운 (condition pushdown) 하는 중이라는 의미를 갖는다. 이와 같은 경우, 조건문은 동시에 값이 검사되는 클러스터의 모든 데이터 노드로 “푸시 다운 (pushed down)” 된다. 이것은 매치되지 않는 열을 네트워크 전체에 보낼 필요성을 없애 주며, 조건문 푸시 다운을 하지 않는 경우에 비해서 5 ~ 10배의 속도 향상을 얻을 수가 있다.
여러분이 아래와 같은 클러스터 테이블을 가지고 있다고 가정하자:
CREATE TABLE t1 ( a INT, b INT, KEY(a)) ENGINE=NDBCLUSTER;
이와 같은 경우, 조건문 푸시 다운은 아래와 같은 쿼리와 함께 사용될 수 있다:
SELECT a,b FROM t1 WHERE b = 10;
이것은 EXPLAIN SELECT 결과를 통해서 볼 수가 있는데, 그 결과는 다음과 같다:
mysql> EXPLAIN SELECT a,b FROM t1 WHERE b = 10\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: ALLpossible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 10 Extra: Using where with pushed condition
조건문 푸시 다운은 다음의 쿼리와 함께 사용할 수 없다:
SELECT a,b FROM t1 WHERE a = 10;SELECT a,b FROM t1 WHERE b + 1 = 10;
첫 번째 쿼리의 경우에는 조건문 푸시 다운을 적용할 수가 없는데, 그 이유는 인덱스가 컬럼 a에 존재하기 때문이다. 두 번째 경우에 대해서 조건문 푸시 다운을 사용할 수 없는 이유는, 인덱스가 되지 않은 컬럼 b를 포함하는 비교문이 간접적이기 때문이다. (하지만, WHERE 구문에서 b + 1 = 10 을 b = 9 로 줄여서 비교를 한다면 푸시 다운을 사용할 수가 있다.)
하지만, > 또는 < 연산자를 사용해서 인덱스된 컬럼을 상수(constant)와 비교를 하는 경우에는 조건문 푸시 다운을 사용할 수가 있다:
mysql> EXPLAIN SELECT a,b FROM t1 WHERE a<2\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: rangepossible_keys: a key: a key_len: 5 ref: NULL rows: 2 Extra: Using where with pushed condition
조건문 푸시 다운에 관련해서는 아래의 사항을 기억하기 바란다:
- 조건문 푸시 다운은 MySQL 클러스터에만 관련이 있으며, 다른 스토리지 엔진을 사용하고 있는 테이블에 대해서 쿼리를 실행할 경우에는 발생하지 않는다.
- 조건문 푸시 다운 기능은 디폴트로 사용되지 않는다. 이 기능을 활성화 시키기 위해서는, mysqld을
--engine-condition-pushdown옵션과 함께 시작하거나, 또는 아래의 명령문을 실행한다:
SET engine_condition_pushdown=On;
조건문 푸시 다운, Using where with pushed condition, 그리고 engine_condition_pushdown 등은 모두 5.0 클러스터에서 추가 되었다.
여러분은 EXPLAIN 결과에 있는 rows 컬럼 값을 사용하면 좋은 조인 (join)을 얻는 방법을 알아 낼 수가 있다. 이것은 MySQL이 쿼리를 실행하기 위해서 조사해야 하는 열의 수가 얼마나 되는지 대략적으로 알려준다. 만일 여러분이 max_join_size 시스템 변수를 사용해서 쿼리를 제한하면, 이러한 열은 다중-테이블 SELECT 명령문을 실행해야 하는지 아니면 무시해야 하는지를 결정할 때 이 열 값을 사용할 수도 있다.
아래의 예제는 EXPLAIN에 의해 얻어진 정보를 가지고서 다중-테이블 조인을 어떻게 최적화 시키는 지를 설명하는 것이다.
다음과 같은 SELECT 명령문을 가지고 있으며, EXPLAIN을 사용해서 이것을 조사한다고 가정하자:
EXPLAIN SELECT tt.TicketNumber, tt.TimeIn, tt.ProjectReference, tt.EstimatedShipDate, tt.ActualShipDate, tt.ClientID, tt.ServiceCodes, tt.RepetitiveID, tt.CurrentProcess, tt.CurrentDPPerson, tt.RecordVolume, tt.DPPrinted, et.COUNTRY, et_1.COUNTRY, do.CUSTNAMEFROM tt, et, et AS et_1, do
WHERE tt.SubmitTime IS NULL
AND tt.ActualPC = et.EMPLOYID AND tt.AssignedPC = et_1.EMPLOYID AND tt.ClientID = do.CUSTNMBR;
위 예제에 대해서, 다음과 같은 가정을 하도록 하자:
- 비교가 되는 컬럼은 아래와 같이 선언 되었다:
|
Table |
Column |
Data Type |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 테이블은 아래와 같은 인덱스를 가지고 있다:
|
Table |
Index |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tt.ActualPC값은 골고루 분산되지 않는다.
최적화가 실행되지 전에, EXPLAIN 명령문은 다음과 같은 정보를 생성한다:
table type possible_keys key key_len ref rows Extraet ALL PRIMARY NULL NULL NULL 74do ALL PRIMARY NULL NULL NULL 2135et_1 ALL PRIMARY NULL NULL NULL 74tt ALL AssignedPC, NULL NULL NULL 3872 ClientID, ActualPC range checked for each record (key map: 35)
type 은 모든 테이블에 대해 ALL이기 때문에, 이 결과 값은 MySQL이 모든 테이블에 대해서 하나의 카르테시안 (Cartesian) 값을 생성하는 중이라는 것을 가리킨다; 즉, 열에 대한 모든 조합. 이 과정은 각각의 테이블에 있는 열의 숫자를 조사해야 하기 때문에 시간이 오래 걸리게 된다. 위의 경우에는, 74 × 2135 × 74 × 3872 = 45,268,558,720 열이 된다.
만일 컬럼 상의 인덱스들을 동일한 타입과 크기로 선언할 경우에는, MySQL이 이를 효과적으로 처리하는데 한가지 문제가 생긴다. 위의 문장에서 보면, VARCHAR 및 CHAR의 크기를 동일하게 선언하면, 이것들은 동일한 것으로 간주가 된다. tt.ActualPC는 CHAR(10)로 선언 되었고 et.EMPLOYID는 CHAR(15)로 선언 되었기 때문에, 길이가 맞지 않게 된다.
컬럼 길이 간의 이러한 문제를 해결 하기 위해서는, ALTER TABLE를 사용해서 ActualPC의 길이를 10 개 문자에서 15 문자로 늘리도록 한다:
mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);
이제 tt.ActualPC 및 et.EMPLOYID는 모두 VARCHAR(15)가 된다. EXPLAIN 명령문을 다시 실행하면 아래와 같은 결과를 얻게 된다:
table type possible_keys key key_len ref rows Extratt ALL AssignedPC, NULL NULL NULL 3872 Using ClientID, where ActualPCdo ALL PRIMARY NULL NULL NULL 2135 range checked for each record (key map: 1)et_1 ALL PRIMARY NULL NULL NULL 74 range checked for each record (key map: 1)et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1
이 결과 값은 완벽하지는 않지만 많이 개선이 된 것이다: rows 값은 74 보다 작다. 이와 같은 실행은 수초 정도 걸린다.
두 번째 대안으로는, tt.AssignedPC = et_1.EMPLOYID 와 tt.ClientID = do.CUSTNMBR 비교에서 컬럼 길이가 일치하지 않는 것을 제거하는 것이다:
mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15), -> MODIFY ClientID VARCHAR(15);
이와 같이 수정을 하면, EXPLAIN은 다음과 같은 결과를 만들게 된다:
table type possible_keys key key_len ref rows Extraet ALL PRIMARY NULL NULL NULL 74tt ref AssignedPC, ActualPC 15 et.EMPLOYID 52 Using ClientID, where ActualPCet_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1
이렇게 하고 나면, 쿼리는 거의 최적화가 이루어진다. 이제 남아 있는 문제는, MySQL이 tt.ActualPC 컬럼에 있는 값들은 골고루 분포되어 있으나, tt 테이블에 대해서는 그렇지 않다고 가정하고 있다는 점이다. 다행스러운 것은, MySQL로 하여금 키 분포도를 분석하도록 만드는 것이 쉽다는 점이다:
mysql> ANALYZE TABLE tt;
추가적인 인덱스 정보를 사용하면, 조인 (join)은 완벽해 지고 EXPLAIN은 아래와 같은 결과를 만들게 된다:
table type possible_keys key key_len ref rows Extratt ALL AssignedPC NULL NULL NULL 3872 Using ClientID, where ActualPCet eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1
EXPLAIN 결과에 있는 rows 컬럼은 MySQL 조인 (join) 최적화를 통해서 개선된다는 점을 알아두자. rows 가 만들어 내는 값과 쿼리가 리턴하는 열의 실제 숫자를 비교함으로써 그 숫자가 거의 일치하는지를 검사해야 한다. 만일 그 숫자가 많이 차이가 난다면, SELECT 명령문에서 STRAIGHT_JOIN을 사용하고 FROM 구문에서 테이블 순서를 다르게 하면 보다 나은 성능을 얻을 수가 있을 것이다.
트랙백
댓글
글
Dev/Ajax/Xml/w3c/Html5 2010/06/08 17:12html5 와 html4 의 다른점
HTML 4와 HTML 5의 차이점
2010년 3월 4일 표준 초안
- 현재 버전:
- http://www.w3.org/TR/2010/WD-html5-diff-20100304/
- 최종 출판 버전:
- http://www.w3.org/TR/html5-diff/
- 최종 편집자 버전:
- http://dev.w3.org/html5/html4-differences/
- 이번 버전:
- http://www.w3.org/TR/2009/WD-html5-diff-20090825/
- http://www.w3.org/TR/2009/WD-html5-diff-20090423/
- http://www.w3.org/TR/2009/WD-html5-diff-20090212/
- http://www.w3.org/TR/2008/WD-html5-diff-20080610/
- http://www.w3.org/TR/2008/WD-html5-diff-20080122/
- 편집자:
- Anne van Kesteren (Opera Software ASA) <annevk@opera.com>
- 한국어 번역자:
- 윤석찬 (Channy Yun) (Daum Communications Corp.) <channy@mozilla.or.kr>
Copyright © 2010 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
번역자 서문
이 문서는 http://www.w3.org/TR/2010/WD-html5-diff-20100304/의 한국어 번역판으로 영어 원본에는 없는 번역 상 오류가 들어 있을 수 있습니다. 오직 영어 원본만이 규범력을 지님에 유의하시기 바랍니다. 번역 상 오류에 대한 지적이나 제안하실 내용이 있으면 위에 있는 제 주소로 연락해 주시기 바랍니다.
This document is a Korean translation of "HTML 5 differences from HTML 4" W3C editor's draft at http://www.w3.org/TR/2010/WD-html5-diff-20100304/. Note that only the English version of this document is normative and the translation may contain errors that are not present in the English version.
초록
이 문서는 HTML 4와 HTML 5 표준안 사이의 차이점을 설명하고 변경 사항에 대한 정보를 제공합니다. HTML 5 표준안은 현재 작성중이므로 부정확한 정보가 포함되어 있을 수 있습니다. HTML 5에 대한 자세한 사항은 표준안을 직접 검토하기 바랍니다. [HTML 5]
문서 상태
이 장에서는 시간에 따라 이 문서의 변경 사항들을 설명 합니다. 현재 W3C의 출판물과 기술 보고서의 최근 목록 들은 W3C 기술 보고서 목록(http://www.w3.org/TR/)에서 찾을 수 있습니다.
이 문서는 HTML Working Group과 HTML 활동에 의해 만들어 진 HTML 5 와 HTML 4와의 차이점이라는 문서 입니다. 본 워킹 그룹은 이 문서를 워킹그룹 노트로 만들고자 하고 있습니다. 또한, 아직 공개되지 않은 HTML의 새 버전 스펙을 만들고 있습니다. 그 동안 HTML 5 편집자 초안을 통해 진행 사항을 아실 수 있고 public-html-comments@w3.org 메일링 리스트를 통해 여러분의 의견을 보낼 수 있습니다. 그 동안 있었던 논의 사항은 공개 저장소에서 볼 수 있습니다.
워킹 그룹 노트 문서는 꼭 W3C 멤버만이 사용할 필요는 없습니다. 본 초안은 언제든 추가 되거나 내용이 다른 것으로 교체 될 수 있습니다. 본 문서는 진행 중인 문서이므로 인용을 하는 것은 적절치 않습니다.
이 문서는 2004년 2월 5일 W3C 특허 정책의 보호를 받습니다. W3C는 특허 정보 공개를 통해 배포 가능한 정보를 제공 합니다. 이 내용에는 특허 발표에 대한 실질적인 방법을 포함 합니다. 개인적인 특허 지식은 가진 분들은 필수 요소를 살펴 보시고 W3C 특허 정책 6장을 살펴 보셔야 합니다.
목차
1. 소개
HTML은 1990년대 초 인터넷 상에 소개된 이래로 진화를 거듭해 왔습니다. 어떤 기능은 표준안으로 제공되었으나 웹 브라우저 소프트웨어에 기능적으로 탑재되기도 했습니다. 구현 기술과 표준 작성은 함께 수렴해서 확고한 표준안으로 자리잡기도 했지만 다른 한쪽에서는 아직 공유점을 찾지 못하고 있습니다.
HTML 4는 1997년에 W3C에 표준 권고안이 되었습니다. 많은 HTML 핵심 기능에 대해 너무 간략하게 제공한 가이드라인이었기 때문에 수 많은 컨텐츠를 교환하기 위해 필요한 상호 운용성을 위한 실제적 구현을 위한 충분한 정보를 제공할 수 없었습니다.
이러한 정보 제공이 안된 문제는 HTML 4를 XML로 재정의한 XHTML1나 HTML과 XHTML을 위한 자바스크립트 문서 API인 DOM 레벨2 또한 마찬가지였습니다. HTML 5는 이들의 설계를 바꿀 목적으로 만들어지고 있습니다. [HTML 4] [XHTML1] [DOM2HTML]
HTML 5 초안은 2004년에 시작되어 현대적 HTML 구현 방식과 웹 상의 HTML 문서에 대해 조사 결과를 반영하여 다음 요건을 담고 있습니다.
- 일반적 HTML 및 XML 문법으로 작성된 HTML 5에 규약에 대한 정의
- 상호 운용 구현을 위한 세부적인 작업 모델 정의
- 새로운 문서 마크업 기능 향상
- 웹 애플리케이션으로 통칭되는 개발 방식을 위한 마크업 및 API 소개
1.1. 공개 토론 사항
HTML 5는 아직 초안 상태입니다. 이는 HTML 5의 여러 가지 사항 들이 WHATWG 메일링 리스트와 HTML 워킹 그룹에서 논의 중이라는 것입니다. 아래에는 현재 논의 중인 이슈들을 정리하였습니다.
- 산업 표준으로 사용하고 있는 표현 요소에 대한 의미 정의
alt,summary등 접근성 및 멀티 미디어 독립 기능과 접근성 세부 기능
1.2. 하위 호환성
HTML 이전 버전과 같이 HTML 5 역시 하위 호환성을 제공합니다. HTML을 사용법이 쉽다는 장점을 계속 지향하기 위해 CSS에서 사용가능 한 표현 영역에 포함되는 몇 가지 요소와 속성을 더 이상 사용하지 않습니다.
그러나 웹 브라우저 같은 사용자 에이전트는 이러한 과거 요소를 지원해야 합니다. 표준안 자체가 작성자와 사용자 에이전트를 위한 요구 사항을 명확히 분리하고 있기 때문입니다. 예를 들어, 작성자가 isindex나 plaintext 요소를 사용 필요가 없지만, 사용자 에이전트는 이전에 동작하던 이러한 요소들이 계속 지원 하여야 한다는 것을 의미 합니다.
작성자 및 사용자 에이전트의 요건이라는 적합성 요건을 통해 요소나 속성에서 비추천(deprecated) 기능을 만들 필요가 없어지는 것입니다.
1.3. 개발 모델
HTML 5 표준안은 두 개의 완벽한 구현물 작성을 완료될 때까지 진행 됩니다. 이것은 HTML 이전 버전 작성 방법과 완전히 다른 접근 방법입니다. 이러한 개발 모델을 채택한 목적은 웹 디자이너와 웹 개발자가 설계가 완성된 시점에서 구현 가능 혹은 사용 가능한 것을 보장하려는 의도 입니다.
1.4. 웹 서비스 구조의 영향
아래 목록은 HTML 5가 웹 구조에 영향을 끼칠 것으로 생각되는 것들입니다.
- 언어 정의 기반으로 DOM을 사용한다는 점
- 브라우징 컨텍스트(browsing context)의 개념.
- 사용자 에이전트 요건, 저작과정의 요건을 구별한다는 점
- 구현 상의 블랙박스(모호한 기능)에 대해 추상적이지 않고 실질적인 정의를 사용한다는 점.
- 신규 콘텐츠 모델 개념 (HTML 4의 블록 및 인라인 요소의 대체)
- 웹 접근성을 위해 미리 고려하여 도입한 기능 (
alt속성과 같이 나중에 추가 된 것이 아닌hidden속성이나progress요소등). - 시맨틱 마크업을 정교화 (아웃라인 알고리즘, HTML 4에서 애매한 요소들 재정의)
menu요소와command요소.- origin 이라고 하는 개념.
- 오프라인 웹 애플리케이션 지원
- 브라우징 컨텍스트(context)의 "네비게이션" 알고리즘의 정의와 관련된 세션 목록 지원
- content-type 및 문자 인코딩 탐지.
- 파서의 명확한 정의.
contentEditable과UndoManager기능.- 드래그&드롭과, 복사 및 붙어넣기 구조
- 새로운
iframe의 샌드 박스 기능.
2. 문법
HTML 5 언어는 이미 잘 알려진 HTML 4와 XHTML1 문법과 호환 됩니다만 처리 방식 및 생략 마크업 같은 HTML 4 내 난해한 SGML 문법과는 호환되지 않습니다. 문서는 text/html MIME 형식을 사용하게 됩니다.
HTML 5는 구현을 용이하기 위해 오류 처리를 비롯하여 세부적인 파싱 규칙을 정의 합니다. 사용자 에이전트는 text/html MIME 형식을 가진 문서를 파싱 할때는 이러한 규칙을 따르게 됩니다. 아래에 HTML 문법과 함께 처리하는 간단한 예제가 있습니다.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>예제 문서</title>
</head>
<body>
<p>예제 단락</p>
</body>
</html>HTML5는 문법 내에서 text/html-sandboxed 미디어 형식을 지원 합니다. 신뢰되지 않은 데이터를 호스팅할 때 사용합니다.
HTML 5에 사용된 다른 문법은 바로 XML 입니다. XHTML1 문서 및 구현과 같은 문법을 사용할 수 있습니다. 이 문법을 사용하는 문서는 XML MIME 형식을 사용하고http://www.w3.org/1999/xhtml 네임 스페이스를 이용하고 XML 명세에 따라야 합니다. [XML]
아래 예제는 HTML 5에서 XML 문법을 사용할 때의 예제 입니다. 아래 문서는 application/xhtml+xml나 application/xml 같은 XML MIME 형식을 따르고 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>예제 문서</title>
</head>
<body>
<p>예제 단락</p>
</body>
</html>2.1. 문자 인코딩
HTML 5 저작자들은 문자 인코딩에 관한 아래 세 가지 부분 중 하나에 설정하여야 합니다.
- 전송 단계에서 HTTP 헤더에
Content-Type표시 합니다. - 문서 앞부분에 특수 유니코드 BOM(Byte Order Mark) 문자를 표시. 이 문자는 인코딩 방법에 대한 정보를 제공해 줍니다.
- 파일 초기 512 바이트 크기 내에
meta요소 내charset속성에 표시. UTF-8 방식을 이용하면<meta charset="UTF-8">와 같이 표기 하며 기존의 사용 방식인<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">에서 변경하는 게 좋습니다.
XML 문법을 작성하는 저작자들은 XML 명세에 따라 문자 인코딩 설정을 하여야 합니다.
2.2. DOCTYPE
HTML 5 문법은 웹 브라우저가 표준 모드로 문서를 렌더링 할 수 있도록 문서 처음에 DOCTYPE을 지정해야 합니다. DOCTYPE은 특별한 목적이 없이 XML을 위한 옵션입니다. XML MIME 형식 문서는 관계 없이 항상 표준 모드로 동작합니다. [DOCTYPE]
기본 DOCTYPE 선언 방식은 <!DOCTYPE html>이며 대소문자 구별을 하지 않습니다. 초기 HTML 버전에서의 DOCTYPE은 HTML이 SGML의 일부라서 새로운 DTD를 참조해야 되었기 때문에 필요했지만 지금은 더 이상 그럴 필요가 없습니다. HTML 5는 HTML 문법을 사용하는 문서를 표준 모드로 동작하기 위해 DOCTYPE을 이리 저리 바꿀 필요가 없습니다. 웹 브라우저는 단순히 <!DOCTYPE html>만 있으면 표준 모드로 동작 합니다.
2.3 MathML과 SVG
HTML 5에서는 HTML 구문안에서 MathML 이나 SVG 을 이용할 수 있습니다. 매우 간단한 예제로서 아래와 같이 쓰는 것이 가능해집니다.
<!doctype html>
<title>SVG in text/html</title>
<p>
A green circle:
<svg> <circle r="50" cx="50" cy="50" fill="green"/> </svg>
</p>HTML 안에서 SVG foreignObject을 이용 하고 그 안에 MathML이나 HTML을 포함시키는 것도 가능합니다.
2.4 기타 사항
그 외에도 몇인가, 알아둬서 손인 없는 변경 점이 있습니다.
- HTML에서 IRI 을 기본적으로 지원합니다. 단, 모든 기능은 문서 인코딩이 UTF-8 또는 UTF-16일 경우에만 사용 가능합니다.
lang속성은 XML의xml:lang같은 방식으로 기술 가능합니다.
3. 언어
본 장에서는 HTML 4와 HTML 5 사이에 다른 특징들을 여러 부분으로 나누어서 자세하게 설명하고자 합니다.
3.1. 새 요소
섹션 내 링크는 그요소가 재정의 되지 않으면 작업이 중단 될 수 있습니다. 내용은 최종 초안에 포함될 것입니다.
아래 요소들은 구조적 마크업을 위해 추가된 요소들입니다:
section은 태그는 일반적인 문서 및 애플리케이션 영역을 표시할 때 사용합니다. 문서 구조를 가르키는h1~h6와 함께 사용할 수 있습니다.article은 뉴스 기사나 블로그 글 같은 독립적인 컨텐츠 단위를 표시할 때 사용 합니다.aside는 문서의 주요 부분을 표시하고 남은 부분의 컨텐츠를 표시할 때 사용합니다.hgroup은 섹션 머리말을 표시할 때 사용합니다.header은 문서 내 소개 및 네비게이션 메뉴 모음을 표시할 때 사용합니다.footer는 문서 내 꼬리말 부분을 표시할 때 사용하며 문서 저자, 저작권 정보 같은 것을 표시할 수 있습니다.nav는 문서 내 네비게이션 요소들을 표시하기 위한 영역입니다.figure는 그림이나 비디오 같은 임베딩 컨텐츠와 함께 캡션을 할때 사용 합니다.<figure> <video src=ogg>…</video> <legend>캡션 예제</legend> </figure>figcaption는 캡션에 사용 합니다.
또 다른 몇 가지 요소들을 추가하였습니다.
audio와video는 멀티미디어 컨텐츠를 표시하는 데 사용합니다. 둘다 애플리케이션 개발자들이 사용자 인터페이스를 직접 만들 수 있는 API를 제공 합니다. 다중source요소는 다른 형식의 다중 스트림을 제공하게 되는 경우 이들 요소들과 함께 사용할 수 있습니다.embed는 플러그인 컨텐츠를 표시할 때 사용합니다.mark는 별도로 표시한 컨텐츠를 표시하는데 사용합니다.progress는 다운로드나 시간이 걸리는 별도 작업의 과정을 표시할 때 사용합니다.meter는 디스크 사용량 같은 측정값을 표시하는 데 사용합니다.time은 날짜나 시간을 표시하는 데 사용합니다.ruby,rt,rp는 루비 언어 표현을 위해 사용합니다.canvas는 그래프나 게임 같은 동적인 비트맵 그래픽을 표시하는 데 사용합니다.command는 사용자가 실행할 수 있는 명령어를 표시하는 데 사용합니다.details은 사용자의 요청에 따라 얻은 콘트롤이나 부가 정보를 표시하는 데 사용합니다.datalist는input에 대한 새list와 함께 콤보박스를 만들 때 사용합니다.<input list="browsers"> <datalist id="browsers"> <option value="Safari"> <option value="Internet Explorer"> <option value="Opera"> <option value="Firefox"> </datalist>keygen은 키의 페어를 생성하기 위한 컨트롤을 나타냅니다.output은 스크립트에 의한 계산 결과등, 어떠한 출력 결과를 나타냅니다.
input요소에는 아래와 같은 좀 더 세부적인 type 속성 들을 추가 합니다.
새로운 형식들은 웹 서버에 기 정의된 유효 형식을 전달해 줄 수 있도록 사용자 에이전트가 일정에서 날짜 선택 시 달력을 표시해 주기 위해 만든 것입니다. 또는 주소록에 이메일 주소를 입력할 때 유효성을 체크 해 줌으로서 불필요한 자바 스크립트 유효성 확인 절차를 줄여 주어 사용자들이 빠르게 기능을 사용할 수 있도록 도와 줍니다.
3.2. 새 속성
HTML 5는 기존 HTML 4 내의 요소에 대해 여러 가지 새 속성들을 제공 하고 있습니다.
a와area요소는link와 함께 사용 가능한media속성을 이용할 수 있습니다.a와area요소는ping이라는 새 속성을 통해 하이퍼 링크에 대해 ping 정보를 보내야하는 URI 목록에 대해 한칸 공백으로 분리해서 제공할 수 있습니다. 이 속성은 사용자 에이전트가 어떤 URI에 ping 정보를 보냈는지 사용자에게 알려 주거나 개인 정보를 우려하는 사용자를 위해 기능 끄기도 제공 합니다.area요소는 좀 더 견고 하도록hreflang와rel속성 모델을 사용합니다.base요소는a요소에서 이미 널리 지원되는target속성을 지원합니다.a와area에서iframe과 함께 웹 애플리케이션에서 유용하기 때문에target을 계속 지원 하게 됩니다.li요소에서value속성은 표현 요소가 아니므로 계속 지원 됩니다.ol요소에서start속성 역시 지원 됩니다.meta요소는charset은 이미 많은 곳에서 지원 하고 있고 문서를 위한 문자 인코딩을 깔끔하게 적용 하므로 지원을 시작 합니다.새로 만든
autofocus속성이input(type이hidden일 때를 제외),select,textarea,button요소에 추가 됩니다. 이 속성은 문서를 읽는 동안 폼 콘트롤을 지정하는 선언적 방식을 제공합니다. 이 기능은 사용자가 원하지 않을 경우 제공하지 않는 설정을 제공 함으로서 사용자 경험을 보장 해 주어야 합니다.placeholder속성은input,textarea요소에서 사용할 수 있습니다.새로 만든
form속성은input,output,select,textarea,button,fieldset요소들이 한 개 이상의 폼 양식과 함께 사용하도록 지원 합니다.새로운
required속성은input(type속성이hidden,image,submit같은 버튼 일 때 제외),textarea에서 사용 가능 합니다. 이는 폼을 제출하기 위해서는 이 항목을 사용자가 꼭 입력해야 한다는 것을 지정 합니다.fieldset에서는 내부 콘텐츠에 대해disabled를 사용할 수 있습니다.input에는 몇 가지 새 속성을 쓸 수 있습니다.autocomplete,min,max,multiple,pattern,step등. 앞에 언급한 대로list속성은datalist와select와 함께 사용할 수 있습니다.form요소에는 폼을 제출할 때 유효성 검증을 거치지 않도록novalidate속성을 가집니다.input,button,form요소에서formaction,formenctype,formmethod,formnovalidate, andformtarget를 새로 사용 가능합니다. 만약에 이를 사용하면action,enctype,method,novalidate,target속성들을 재정의(Override)할 수 있습니다.menu요소는type,label, 같은 새 속성을 가집니다. 이들 속성은 전역contextmenu속성과 함께 문맥 메뉴를 제공할 때나 전형적인 메뉴 사용자 인터페이스를 제공하는 데 사용 할 수 있습니다.style요소는scoped속성을 가집니다. 이는 지정한 스타일 시트를 사용하는 데 사용합니다.style요소에서 지정된 스타일 규칙은 내부 트리에서만 적용할 수 있습니다.script요소는 스크립트를 불러오고 실행하는 방식에 영향을 주는async라는 새로운 속성을 사용할 수 있습니다.html에는menifest라는 새 속성을 가질 수 있는데 오프라인 웹 애플리케이션과 함께 사용해서 캐쉬 명세를 정의할 수 있습니다.link에는sizes라는 새 속성을 가질 수 있는데rel에서icon이 정의되면 아이콘 크기를 정할 수 있습니다.ol에는reversed라는 새 속성을 가질 수 있는데 역순으로 정렬할 때 사용합니다.iframe요소에는seamless와sandbox를 통해 내용을 제어할 수 있습니다. (예: 블로그 답글)
HTML 4의 몇 가지 속성들이 모든 요소에 사용할 수 있습니다. 아래 속성들은 이제 전역 속성으로 사용 가능 합니다. class, dir, id, lang, tabindex, title.
아래 속성들은 추가된 전역 속성들입니다.
contenteditable속성을 가진 요소는 편집 가능한 영역임을 표시하는 속성입니다. 사용자들은 마크업과 내용을 바꿀 수 있습니다. (역자 주. 본 기능은 상용 표준이었음.)contextmenu속성을 가진 저작자에 의해 제공되는 컨텍스트 메뉴를 지정하는 데 사용할 수 있습니다.data-*모음은 저작자가 정의 할 수 있습니다.data-라는 예약어를 통해 향후 HTML 버전과 충돌하지 않고도 사용자 정의 태그로 이용하거나 브라우저 벤더가 사용할 수 있습니다.draggable속성을 가진 요소는 새 드래그앤 드롭 API에 사용할 수 있습니다.hidden속성은 요소가 아직 없거나 존재하지 않을 때 사용합니다.item,itemprop및subject속성은 시맨틱 주석(Annotation)을 붙여 기계가 처리할 수 있는 라벨로서 사용합니다. HTML 5 초안의 마이크로 데이터 기능입니다. (역자주: 마이크로 포맷을 범용으로 만든 것임.)role,aria-*모음은 접근성을 위한 지원 기능에 사용 합니다.spellcheck속성은 맞춤법 검사 기능을 제공할 지 여부를 정해 줍니다.
HTML 5는 on이벤트명으로 사용되던 HTML 4의 모든 이벤트 핸들러를 사용할 수 있습니다. 또한, 원격 문서 메시지 API 사용하는 message 같은 새 이벤트를 위한 이벤트 핸들러에도 사용할 수 있습니다.
3.3. 변경 요소
아래 요소들은 HTML 5에서 새로운 의미로 재정의한 것으로 HTML 4에서와 쓰임이 달라지는 것들입니다. 새로운 의미를 부여하여 바르게 사용하도록 하기 위함입니다.
a요소에서href없이 사용하면 "작업용 링크"로 사용 합니다. 문장 보다는 흐름을 나타내는 콘텐츠에 사용 될 수 있습니다.address요소는 섹션 개념을 통해 새로운 영역을 표시합니다.b요소는 인쇄상 강조 표현을 가진 텍스트 뿐만 아니라 제품 소개 내 제품명, 문서 초록의 키워드 같은 아주 특별한 중요도는 갖지 않으나 일반적인 강조의 목적에 사용 합니다.hr요소는 단락 단위의 주제 바꿈을 할 때 사용 합니다.i요소는 인쇄상 기울움 표현을 가진 텍스트 뿐만 아니라 선박명, 머리속 생각, 다른 언어에서 숙어구, 기술 용어, 생물종 표시 같은 일반적인 사용 이나 소리나 분위기를 대체하는 문구 등에 사용 합니다.label요소를 위해 브라우저는 더 이상 라벨과 컨트롤 사이에 포커스 이동을 하면 안됩니다. 그런 동작이 기본 플랫폼의 사용자 인터페이스 표준이 아닐 경우.menu요소는 실제적 문서 메뉴 정보를 제공하는 데 사용합니다.small요소는 세부 주석 및 법적 인쇄 문서에서 작은 인쇄 정보를 담을 때 사용 합니다.strong요소는 강조 보다 더 중요한 정보를 제공할 때 사용합니다.
3.4 변경 속성
아래 속성들은 제공은 되나 사용 하지 않기를 권장합니다. 필요한 경우 꼭 필요할 곳에서 사용할 수 있습니다.
img의border속성은 값이 "0"일 때만 사용하고 가급적 CSS를 사용합니다.script의language속성은 값이"JavaScript" (대소문자 구별)에만 사용하고type속성과 함께 쓰지 않고 생략할 수 있습니다.a의name속성은id로 바꾸어 쓰기를 권장합니다.table의summary속성은 HTML5 초안에 여러 대체 방법이 있습니다.
3.5. 중단 요소
아래 요소들은 사용하지 않을 것은 권장 합니다. 사용자 에이전트는 이들을 함께 지원합니다만 HTML 5는 정확히 어떻게 언급되고 있는지 정당한 절차에 따라 렌더링 할 것입니다. (예를 들어 isindex 요소는 이미 파서에 의해 지원 됩니다.)
아래 요소들은 표현 요소들이며 CSS로 다루는 것이 더 낫기 때문에 HTML 5에 포함 되지 않았습니다.
basefontbigcenterfontsstrikettu
아래 요소들은 사용자로 하여금 부정적인 사용성과 접근성을 주기 때문에 HTML 5 에서 제외된 요소 입니다.
frameframesetnoframes
아래 요소들은 잘 사용하지 않고 다른 요소들과 사용법에서 혼란을 주는 요소들 이라 제외 되었습니다.
acronym은 매우 큰 혼란을 주고 있어 제외 합니다. 축약어를 사용할 때는abbr를 사용하면 됩니다.applet은 이미object로 대체 되었습니다.isindex은 이미 폼 양식을 통해 대체 되었습니다.dir은 이미ul요소를 통해 대체 되었습니다.
noscript는 HTML 문법에서만 사용하고 XML 문법에서는 더 이상 사용하지 않습니다.
3.6. 중단 속성
HTML 4에서 사용되던 몇 가지 속성들은 HTML 5에서 더 이상 사용할 수 없습니다. 만약 호환성 이슈 때문에 사용자 에이전트가 처리해야 한다면 동작 방식을 따로 정해야 합니다.
rev및charset속성:link및a.shape및coords속성:a.longdesc속성:img및iframe.target속성:link.nohref속성:area.profile속성:head.version속성:html.name속성:img(useidinstead).scheme속성:meta.archive,classid,codebase,codetype,declare,standby속성:object.valuetype,type속성:param.
HTML 5에서는 HTML 4 중에서 CSS로 이용 가능한 표현 속성을 더 이상 사용하지 않습니다.
align속성:caption,iframe,img,input,object,legend,table,hr,div,h1,h2,h3,h4,h5,h6,p,col,colgroup,tbody,td,tfoot,th,thead및tr.alink,link,textandvlink속성:body.background속성:body.bgcolor속성:table,tr,td,th및body.border속성:tableandobject.cellpadding및cellspacing속성:table.char및charoff속성:col,colgroup,tbody,td,tfoot,th,thead및tr.clear속성:br.compact속성:dl,menu,ol및ul.frame속성:table.frameborder속성:iframe.height속성:td및th.hspace및vspace속성:img및object.marginheight및marginwidth속성:iframe.noshade속성:hr.nowrap속성:td및th.rules속성:table.scrolling속성:iframe.size속성:hr.type속성:li,olandul.valign속성:col,colgroup,tbody,td,tfoot,th,theadandtr.width속성:hr,table,td,th,col,colgroup및pre.
4. API
HTML 5는 웹 애플리케이션 작성에 도움을 줄 다양한 API를 제공 합니다. 새로 만든 요소들과 함께 더 좋은 애플리케이션 개발에 사용할 수 있습니다.
- 2차원 그래픽 API에 사용할 수 있는
canvas요소. - 내장 비디오 및 오디오 재생을 위한
video,audio요소. - 내장 저장소. 키/값이나 SQL 기반 데이터베이스 지원을 위한 기능.
- 오프라인 웹 애플리케이션 기반 API.
- 웹 애플리케이션이 독립적으로 특정 프로토콜 및 미디어 형식을 등록할 수 있는 API.
- 새 전역
contenteditable속성과 함께 지원 되는 편집 API 기능. draggable속성과 함께 지원 되는 드래그앤 드롭 API 기능.- 페이지 앞/뒤 네비게이션을 지원할 방문 기록 표시용 API 기능. (보안 제한 모델이 있음)
- (원격) 다중 메시징 처리 기능.
4.1. HTMLDocument 확장 사항
HTML 5는 다양한 방식으로 DOM 레벨2 기반 HTML로 부터 HTMLDocument 인터페이스를 확장했습니다. 이것은 Document를 구현하는 모든 객체에 적용 하는 것으로 복합 문서의 의미를 그대로 살리고 있습니다. 또한 몇 가지 유용한 새로운 기능을 추가했습니다.
getElementsByClassName()는 클래스명으로 요소를 선택할 수 있습니다. SVG나 MathML 같은Document객체와class속성을 가진 모든 요소에 적용할 수 있습니다.innerHTML은 HTML이나 XML 문서 내용을 얻고 이해하는 데 가장 간단한 방법입니다. 이 속성은HTMLElement에서만 사용 가능한 상용 표준이었습니다.activeElement,hasFocus는 문서내에서 어떤 요소가 포커스 되어 있는지 확인 가능합니다.getSelection()은 현재 선택된 객체를 반환해 줍니다.designMode,execCommand()은 문서를 편집하는데 주로 사용될 것입니다.
4.2. HTMLElement 확장 사항
HTMLElement 인터페이스 역시 HTML 5에서 몇 가지 확장 사항이 있습니다.
getElementsByClassName()은HTMLDocument에서 기본적으로 사용 합니다.innerHTML역시 XML 문서에서 사용할 수 있습니다.classList는className에 편리하게 접근할 수 있는 방법입니다. 모든 객체는 요소 클래스를 처리하기 위해has(),add(),remove(),toggle()등을 사용할 수 있습니다.a,area,link요소들은rel속성과 유사한 기능을 가진relList라는 속성을 제공 합니다.
5 HTML5 변경 기록
아래 변경 기록은 HTML5 초안의 변경 과정을 담은 것입니다. 자세한 사항은 public-html@w3.org와 whatwg@whatwg.org 메일링리스트에 기록 되어 있고 This Week in HTML5 블로그 글에 나와 있기도 합니다. 많은 편집자 변경 사항은 이 내용에 포함 되어 있지는 않습니다. 서비스 구현 하시는 분은 초안을 자주 살펴 보시기를 권고 합니다.
변경 내역은 시간 순으로 나열 되어 있습니다. (역자 주: 변경 기록은 영문 그대로 두었습니다.)
5.1. 2009년 8월 25이후
- The
dialogelement has been removed. A section with advice on how to mark up conversations has effectively replaced it. document.headhas been introduced to provide convenient access to theheadelement from script.- The link type
feedhas been removed.alternatewith specific media types is to be used instead. createHTMLDocument()has been introduced as API to allow easy creation of HTML documents.- Both the
meterandprogresselements no longer have "magic" processing of their contents because it could not be made to work internationally. - The
meterandprogresselements, as well as theoutputelement, can now be labeled using thelabelelement. - A new media type,
text/html-sandboxed, was introduced to allow hosting of potentially hostile content without it causing harm. - A
srcdocattribute for theiframeelement was introduced to allow embedding of potentially hostile content inline. It is expected to be used together with thesandboxandseamlessattributes. - The
figureelement now uses a new elementfigcaptionrather thanlegendbecause people want to use HTML5 long before it reaches W3C Recommendation. - The
detailselement now uses a new elementsummaryfor exactly the same reason. - The
autobufferattribute on media elements was renamed topreload.
A whole lot of other smaller issues have also been resolved. The above list summarises what is thought to be of primary interest to authors.
In addition to all of the above, Microdata, the 2D context API for canvas, and Web Messaging (postMessage() API) have been split into their own drafts at the W3C (the WHATWG still publishes a version of HTML5 that includes them):
Specific microdata vocabularies are gone altogether in the W3C draft of HTML5 and are not published as a separate draft. The WHATWG draft of HTML5 still includes them.
5.2 2009 년 4월 23일 이전
- When the
timeelement is empty user agents have to render the time in a locale-specific manner. - The
loadevent is dispatched atWindow, but now hasDocumentas its target. pushState()now affects theReferer(sic) header.onundoandonredoare now onWindow.- Media elements now have a
startTimemember that indicates where the current resource starts. headerhas been renamed tohgroupand a newheaderelement has been introduced.createImageData()now also takesImageDataobjects.createPattern()can now take avideoelement as argument too.- The
footerelement is no longer allowed inheaderandheaderis not allowed inaddressorfooter. - A new control has been introduced:
<input type="tel"> - The Command API now works for all elements.
accesskeyis now properly defined.sectionandarticlenow take aciteattribute.- A new feature called Microdata has been introduced which allows people to embed custom data structures in their HTML documents.
- Using the Microdata model three predefined vocabularies have also been included: vCard, vEvent, and a model for licensing.
- Drag and drop has been updated to work with the Microdata model.
- The last of the parsing quirks has been defined.
textLengthhas been added as member of thetextareaelement.- The
rpelement now takes phrasing content rather than a single character. location.reload()is now defined.- The
hashchangeevent now fires asynchronously. - Rules for compatibility with XPath 1.0 and XSLT 1.0 have been added.
- The
spellcheckDOM attribute now maps to aDOMString. hasFeature()support has been reduced to a minimum.- The
Audio()constructor sets theautobufferattribute. - The
tdelement is no longer allowed inthead. - The
inputelement andDataTransferobject now have afilesDOM attribute. - The
datagridandbbhave been removed due to their design not being agreed upon. - The cue range API has been removed from the media elements.
- Support for WAI-ARIA has been integrated.
On top of this list quite a few minor clarifications, typos, issues specific to implementors, and other small problems have been resolved.
In addition, the following parts of HTML5 have been taken out and will likely be further developed at the IETF:
- Definition of URLs.
- Definition of Content-Type sniffing.
5.3 2009 년 2월 12일 이전
- A new global attribute called
spellcheckhas been added. - Defined that ECMAScript
thisin the global object returns aWindowProxyobject rather than theWindowobject. - The
valueDOM attribute forinputelements in the File Upload state is now defined. - Definition of
designModewas changed to be more in line with legacy implementations. - The
drawImage()method of the 2D drawing API can now take avideoelement as well. - The way media elements load resources has been changed.
document.domainis now IPv6-compatible.- The
videoelement gained anautobufferboolean attribute that serves as a hint. - You are now allowed to specify the
metaelement with acharsetattribute in XML documents if the value of that attribute matches the encoding of the document. (Note that it does not specify the value, it is just a talisman.) - The
bufferingRateandbufferingThrottledmembers of media elements have been removed. - The media element resource selection algorithm is now asynchronous.
- The
postMessage()API now takes an array ofMessagePortobjects rather than just one. - The second argument of the
add()method on theselectelement and theoptionsmember of theselectelement is now optional. - The
action,enctype,method,novalidate, andtargetattributes oninputandbuttonelements have been renamed toformaction,formenctype,formmethod,formnovalidate, andformtarget. - A "storage mutex" concept has been added to deal with separate pages trying to change a storage object (
document.cookieandlocalStorage) at the same time. TheNavigatorgained agetStorageUpdates()method to allow it to be explicitly released. - A syntax for SVG similar to MathML is now defined so that SVG can be included in
text/htmlresources. - The
placeholderattribute has been added to thetextareaelement. - Added a
keygenelement for key pair generation. - The
datagridelement was revised to make the API more asynchronous and allow for unloaded parts of the grid.
In addition, several parts of HTML5 have been taken out and will be further developed by the Web Applications Working Group as standalone specifications:
- Web Sockets
- Server-Sent Events
- Web Storage (the persistent storage and database storage features)
5.4 2008년 6월 10일 이전
- The
datamember ofImageDataobjects has been changed from an array to aCanvasPixelArrayobject. - Shadows are now required from implementations of the
canvaselement and its API. - Security model for
canvasis clarified. - Various changes to the processing model of
canvashave been made in response to implementation and author feedback. E.g. clarifying what happens when NaN and Infinity are passed and fixing the definitions ofarc()andarcTo(). innerHTMLin XML was slightly changed to improve round-tripping.- The
toDataURL()method on thecanvaselement now supports setting a quality level when the media type argument isimage/jpeg. - The
posterattribute of thevideoelement now affects its intrinsic dimensions. - The behavior of the
typeattribute of thelinkelement has been clarified. - Sniffing is now allowed for
linkwhen the expected type is an image. - A section on URLs is introduced dealing with how URL values are to be interpreted and what exactly authors are required to do. Every feature of the specification that uses URLs has been reworded to take the new URL section into account.
- It is now explicit that the
hrefattribute of thebaseelement does not depend onxml:base. - It is now defined what the behavior should be when the base URL changes.
- URL decomposition DOM attributes are now more aligned with Internet Explorer.
- The
xmlnsattribute with the valuehttp://www.w3.org/1999/xhtmlis now allowed on all HTML elements. data-*attributes and custom attributes on theembedelement now have to match the XMLNameproduction and cannot contain a colon.- Web Socket API is introduced for bidirectional communication with a server. It is currently limited to text messages.
- The default value of
volumeon media elements is now 1.0 rather than 0.5. event-sourcewas renamed toeventsourcebecause no other HTML element uses a hyphen.- A message channel API has been introduced augmenting
postMessage(). - A new element named
bbhas been added. It represents a user agent command that the user can invoke. - The
addCueRange()method on media elements has been modified to take an identifier which is exposed in the callbacks. - It is now defined how to mutate a DOM into an infoset.
- The
parentattribute of theWindowobject is now defined. - The
embedelement is defined to do extension sniffing for compatibilty with servers that deliver Flash astext/plain. (This is marked as an issue in the specification to figure out if there is a better way to make this work.) - The
embedcan now be used without itssrcattribute. getElementsByClassName()is defined to be ASCII case-insensitive in quirks mode for consistency with CSS.- In HTML documents
localNameno longer returns the node name in uppercase. data-*attributes are defined to be always lowercase.- The
openerattribute of theWindowobject is not to be present when the page was opened from a link withtarget="_blank"andrel="noreferrer". - The
topattribute of theWindowobject is now defined. - The
aelement now allows nested flow content, but not nested interactive content. - It is now defined what the
headerelement means to document summaries and table of contents. - What it means to fetch a resource is now defined.
- Patterns are now required for the
canvaselement. - The
autosubmitattribute has been removed from themenuelement. - Support for
outerHTMLandinsertAdjacentHTML()has been added. xml:langis now allowed in HTML whenlangis also specified and they have the same value. In XMLlangis allowed ifxml:langis also specified and they have the same value.- The
frameElementattribute of theWindowobject is now defined. - An event loop and task queue is now defined detailing script execution and events. All features have been updated to be defined in terms of this mechanism.
- If the
altattribute is omitted atitleattribute, an enclosingfigureelement with alegendelement descendant, or an enclosing section with an associated heading must be present. - The
irrelevantattribute has been renamed tohidden. - The
definitionURLattribute of MathML is now properly supported. Previously it would have ended up being all lowercase during parsing. - User agents must treat US-ASCII as Windows-1252 for compatibility reasons.
- An alternative syntax for the
DOCTYPEis allowed for compatibility with some XML tools. - Data templates have been removed (consisted of the
datatemplate,ruleandnestelements). - The media elements now support just a single
loopattribute. - The
load()method on media elements has been redefined as asynchronous. It also tries out files in turn now rather than just looking at thetypeattribute of thesourceelement. - A new member called
canPlayType()has been added to the media elements. - The
totalBytesandbufferedBytesattributes have been removed from the media elements. - The
Locationobject gained aresolveURL()method. - The
qelement has changed again. Punctation is to be provided by the user agent again. - Various changes were made to the HTML parser algorithm to be more in line with the behavior Web sites require.
- The
unloadandbeforeunloadevents are now defined. - The IDL blocks in the specification have been revamped to be in line with the upcoming Web IDL specification.
- Table headers can now have headers. User agents are required to support a
headersattribute pointing to atdorthelement, but authors are required to only let them point tothelements. - Interested parties can now register new
http-equivvalues. - When the
metaelement has acharsetattribute it must occur within the first 512 bytes. - The
StorageEventobject now has astorageAreaattribute. - It is now defined how HTML is to be used within the SVG
foreignObjectelement. - The notification API has been dropped.
- How [[Get]] works for the
HTMLDocumentandWindowobjects is now defined. - The
Windowobject gained thelocationbar,menubar,personalbar,scrollbars,statusbarandtoolbarattributes giving information about the user interface. - The application cache section has been significantly revised and updated.
document.domainnow relies on the Public Suffix List. [PSL]- A non-normative rendering section has been added that describes user agent rendering rules for both obsolete and conforming elements.
- A normative section has been added that defines when certain selectors as defined in the Selectors and the CSS3 Basic User Interface Module match HTML elements. [SELECTORS] [CSS-UI]
Web Forms 2.0, previously a standalone specification, has been fully integrated into HTML5 since last publication. The following changes were made to the forms chapter:
- Support for XML submission has been removed.
- Support for form filling has been removed.
- Support for filling of the
selectanddatalistelements through thedataattribute has been removed. - Support for associating a field with multiple forms has been removed. A field can still be associated with a form it is not nested in through the
formattribute. - The
dispatchFormInput()anddispatchFormChange()methods have been removed. - Repetition templates have been removed.
- The
inputmodeattribute has been removed. - The
inputelement in the File Upload state no longer supports theminandmaxattributes. - The
allowattribute oninputelements in the File Upload state is no longer authoritative. - The
patternandacceptattributes fortextareahave been removed. - RFC 3106 is no longer explicitly supported.
- The
submit()method now just submits, it no longer ensures the form controls are valid. - The
inputelement in the Range state now defaults to the middle, rather than the minimum value. - The
sizeattribute on theinputelement is now conforming (rather than deprecated). objectelements now partake in form submission.- The
typeattribute of theinputelement gained the valuescolorandsearch. - The
inputelement gained amultipleattribute which allows for either multiple e-mails or multiple files to be uploaded depending on the value of thetypeattribute. - The
input,buttonandformelements now have anovalidateattribute to indicate that the form fields should not be required to have valid values upon submission. - When the
labelelement contains aninputit may still have aforattribute as long as it points to theinputelement it contains. - The
inputelement now has anindeterminateDOM attribute. - The
inputelement gained aplaceholderattribute.
5.5 2008 년 1월 22일 이전
- Implementation and authoring details around the
pingattribute have changed. <meta http-equiv=content-type>is now a conforming way to set the character encoding.- API for the
canvaselement has been cleaned up. Text support has been added. globalStorageis now restricted to the same-origin policy and renamed tolocalStorage. Related event dispatching has been clarified.postMessage()API changed. Only the origin of the message is exposed, no longer the URL. It also requires a second argument that indicates the origin of the target document.- Drag and drop API has got clarification. The
dataTransferobject now has atypesattribute indicating the type of data being transferred. - The
melement is now calledmark. - Server-sent events has changed and gotten clarification. It uses a new format so that older implementations are not broken.
- The
figureelement no longer requires a caption. - The
olelement has a newreversedattribute. - Character encoding detection has changed in response to feedback.
- Various changes have been made to the HTML parser section in response to implementation feedback.
- Various changes to the editing section have been made, including adding
queryCommandEnabled()and related methods. - The
headersattribute has been added fortdelements. - The
tableelement has a newcreateTBody()method. - MathML support has been added to the HTML parser section. (SVG support is still awaiting input from the SVG WG.)
- Author-defined attributes have been added. Authors can add attributes to elements in the form of
data-nameand can access these through the DOM usingdataset[name]on the element in question. - The
qelement has changed to require punctation inside rather than having the browser render it. - The
targetattribute can now have the value_blank. - The
showModalDialogAPI has been added. - The
document.domainAPI has been defined. - The
sourceelement now has a newpixelratioattribute useful for videos that have some kind encoding error. bufferedBytes,totalBytesandbufferingThrottledDOM attributes have been added to thevideoelement.- Media
beginevent has been renamed toloadstartfor consistency with the Progress Events specification. charsetattribute has been added toscript.- The
iframeelement has gained thesandboxandseamlessattributes which provide sandboxing functionality. - The
ruby,rtandrpelements have been added to support ruby annotation. - A
showNotification()method has been added to show notification messages to the user. - Support for
beforeprintandafterprintevents has been added.
감사의 글
편집자는 Ben Millard, Cameron McCormack, Charles McCathieNevile, Dan Connolly, David Håsäther Henri Sivonen, James Graham, Maciej Stachowiak, Martijn Wargers, Martyn Haigh, Michael Smith, Olivier Gendrin, Philip Taylor and Simon Pieters에게 이 문서를 만들기 위해 도와 준 것을 감사합니다. 뿐만 아니라 웹 세상을 증진시키기 위해 HTML 5를 지원하는 많은 분들께 감사합니다.
참고 문헌
- [DOCTYPE]
- Activating the Right Layout Mode Using the Doctype Declaration, H. Sivonen, January 2007.
- [DOM2HTML]
- Document Object Model (DOM) Level 2 HTML Specification, J. Stenback, P. Le Hégaret, A. Le Hors, editors. W3C, January 2003.
- [HTML 4]
- HTML 4.01 Specification, D. Raggett, A. Le Hors, I. Jacobs, editors. W3C, December 1999.
- [HTML 5]
- HTML 5, I. Hickson, editor. WHATWG, June 2007.
- Web Forms 2.0, I. Hickson, editor. WHATWG, October 2006.
- HTML 5, I. Hickson, D. Hyatt, editors. W3C, June 2007.
- Web Forms 2.0, I. Hickson, editor. W3C, October 2006.
- [XHTML1]
- XHTML™ 1.1 - Module-based XHTML, M. Altheim, S. McCarron, editors. W3C, May 2001.
- [XML]
- Extensible Markup Language (XML) 1.0 (Fourth Edition), T. Bray, J. Paoli, C. Sperberg-McQueen, E. Maler, F. Yergeau, editors. W3C, September 2006.
- Namespaces in XML 1.0 (Second Edition), T. Bray, D. Hollander, A. Layman, R. Tobin, editors. W3C, August 2006.
RECENT COMMENT