program tip

Why is an HTML element rather than an HTML entity?

radiobox 2020. 12. 31. 08:09
반응형


HTML 엔티티가 아닌 HTML 요소 인 이유는 무엇 입니까?


왜 그렇습니까? 하지 않을까요 무언가 같이 &br;더 적합 할?


HTML 엔티티 참조는 HTML 버전에 따라 SGML 엔티티 또는 XML 엔티티입니다 (HTML은 기본 기술에서 엔티티를 상속 함). 엔티티는 다른 곳에서 정의 된 콘텐츠 청크를 문서에 삽입하는 방법입니다.

모든 HTML 엔터티는 단일 문자 엔터티이므로 기본적으로 문자 참조와 동일합니다 (기술적으로는 문자 참조와 다르지만 정의 된 다중 문자 엔터티가 없으므로 구분이 HTML에 영향을 미치지 않음).

예를 들어 HTML 프로세서는 —다음과 같은 DTD의 섹션을 기반으로 해당 엔티티 참조의 내용을 적절한 엔티티로 대체합니다.

<!ENTITY mdash   CDATA "&#8212;" -- em dash, U+2014 ISOpub -->

따라서 엔티티 참조를 &#8212;문자 (U + 2014) 로 대체되는 문자 참조 인 엔티티 로 대체합니다 . 실제로 HTML을 직접 이해하지 못하는 범용 XML 또는 SGML 프로세서로이 작업을 수행하지 않는 한 실제로 한 단계로 수행됩니다.

이제 귀하의 가상 & br; 줄 바꿈을 일으키는 원인이 무엇입니까? 개행 문자 나 덜 알려진 U + 2028 LINE SEPARATOR (일반 텍스트에서 의미 상 <br/>HTML 과 동일한 의미를 가짐)로는 그렇게 할 수 없습니다 . 왜냐하면 대부분의 HTML 코드에서 중요하지 않은 공백 문자이기 때문입니다. 소스 코드 내에서 가독성을 위해 형식을 지정할 수 없다면 HTML 작성이 훨씬 더 어려울 것이기 때문에 감사해야 할 부분입니다.

우리에게 필요한 것은 엔터티가 아니라이 시점에서 렌더링 된 콘텐츠에 줄 바꿈이 포함되어 있음을 의미 론적으로 나타내는 방법 입니다. 우리는 또한 다른 것을 나타낼 필요가 없습니다 (블록 요소를 시작하거나 끝 냄으로써 이미 줄 바꿈을 나타낼 수 있지만 그것은 우리가 원하는 것이 아닙니다). 그렇게하는 유일한 합리적 방법은 정확히 그것을 의미하는 요소를 갖는 것입니다. 따라서 <br/>관련 태그가 소스 코드에 삽입 된 요소 가 있습니다 .


태그와 문자 엔티티 참조는 서로 다른 이유로 존재합니다. 문자 엔티티는 특정 문자 (때때로 이스케이프 시퀀스로 필요함-예 &amp;들어 앰퍼샌드 &)에 대한 스탠드 인 이고 태그는 구조를 위해 존재합니다.

<br>태그가 존재 하는 이유는 HTML이 공백을 축소하기 때문입니다. 장소 - 하드 줄 바꿈을 지정하는 방법이있을 필요 줄 바꿈을 할 수 있습니다. 이것이 <br>태그 의 기능입니다 .

U+2028 LINE SEPARATOR비슷한 의미를 가지고 있지만이 의미를 가진 단일 문자는 없으며, 사용하더라도 공백으로 간주되고 HTML 이이를 축소하므로 도움이되지 않습니다.

이 측면에 대한 자세한 내용 @John Kugelman@John Hanna 의 답변을 참조하십시오 .


완전히 관련 &br;되지는 않습니다 . 문자 엔티티 참조가 존재하지 않는 또 다른 이유 가 있습니다. 줄 바꿈은 하나 이상의 문자를 가질 수있는 방식으로 정의됩니다. HTML 4 사양을 참조하세요 .

줄 바꿈은 캐리지 리턴 ( &#x000D;), 줄 바꿈 ( &#x000A;) 또는 캐리지 리턴 / 줄 바꿈 쌍으로 정의됩니다.

문자 엔티티는 단일 문자 이스케이프이므로 HTML 4 사양 에서 다시 표현할 수 없습니다 .

문자 엔티티 참조는 문서 문자 세트의 문자를 참조하는 SGML 구조입니다.

정의 된 모든 문자 엔티티가 단일 문자로 매핑되는 것을 볼 수 있습니다. 줄 바꿈 / 새 줄은 이러한 방식으로 명확하게 매핑 될 수 없으므로 문자 엔티티 참조 대신 엔티티가 필요합니다.

이것이 문자 엔티티 참조로 줄 바꿈을 표시 할 수없는 이유입니다.

어쨌든 단순히 Enter를 사용하면 줄 바꿈이 삽입 되므로 필요하지 않습니다 .


엔터티는 다른 문자 나 텍스트의 일부를 의미합니다. HTML에서는 입력하기 어려운 문자 (예 : &mdash;"—") 또는 이스케이프해야하는 문자 ( &amp;"&") 를 나타내는 데 사용됩니다 . 가상의 &br;실체 는 무엇 을 의미합니까?

이미 입력하기 쉽기 때문에 \r또는 \n또는 일 수 없습니다 \r\n(Enter를 누르기 만하면됩니다). 해결하려는 문제는 HTML이 대부분의 컨텍스트에서 공백축소하고 줄 바꿈을 공백으로 취급 한다는 것 입니다. 즉, \n줄 바꿈 문자가 아니라 탭 및 공백과 같은 공백 일뿐입니다.

엔티티 &br;는 다른 텍스트로 대체되어야합니다. "하드 줄 바꿈"의 개념을 표현하기 위해 어떤 문자를 사용합니까? 표준 줄 바꿈 문자 \n는 정확히 올바른 문자이지만, 안타깝게도 일반적인 "공백"버킷에 던져지기 때문에 적합하지 않습니다. "하드 줄 바꿈"을 나타 내기 위해 다른 제어 문자를 오버로드하거나 일부 확장 된 유니 코드 문자를 사용해야합니다. HTML이 디자인되었을 때 유니 코드는 아직 초기 단계에 불과한 표준 이었으므로 선택 사항이 아니 었습니다.

<br>요소는 어떤 캐릭터가 그 개념을 표현하지 수 있기 때문에 문서에 "줄 바꿈"의 개념을 추가하는 단순하고 간단한 방법이었다.


HTML에서 모든 줄 바꿈 은 공백으로 처리됩니다.

줄 바꿈은 캐리지 리턴 ( &#x000D;), 줄 바꿈 ( &#x000A;) 또는 캐리지 리턴 / 줄 바꿈 쌍으로 정의됩니다. 모든 줄 바꿈은 공백을 구성합니다.

그리고 공백 은 단어를 분리하고 공백 시퀀스는 축소됩니다.

를 제외한 모든 HTML 요소의 경우 PRE공백 시퀀스는 "단어"를 구분합니다 (여기서 "단어"라는 용어는 "비 공백 문자 시퀀스"를 의미 함). […]

[…]

소스 문서의 단어 사이에 일련의 공백이 있으면 완전히 다른 렌더링 된 단어 간 간격이 발생할 수 있습니다 ( PRE요소 의 경우 제외 ). 특히 사용자 에이전트는 출력 단어 간 공간을 생성 할 때 입력 공백 시퀀스를 축소해야합니다. […]

이것은 줄 바꿈을 일반 문자로 표현할 수 없음을 의미합니다. 유니 코드에는 줄과 단락을 명확하게 구분하는 특정 특수 문자가 있지만 HTML에서도이를 수행하도록 지정되지 않았습니다.

하지만주의 &#x2028;와는 &#x2029;분명하게 별도의 라인과 단락에 [ISO10646]에서 정의 된 각각 이러한 HTML에서 줄 바꿈을 구성하지 않습니다 [...]

즉, HTML에서 줄 바꿈을 표시하는 일반 문자 또는 일반 문자 시퀀스가 ​​없습니다. 그래서 BR요소가 있습니다.

이제 &br;대신 사용 하려면 값을 나타내는 br<br> 엔티티를 선언하면됩니다 .<br>

<!ENTITY br "<br>">

br 이라는이 추가 엔티티를 선언하면 범용 XML 또는 SGML 프로세서가 엔티티 참조의 모든 항목을 &br;나타내는 값 ( <br>)으로 대체합니다 . 예제 문서 :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd" [
   <!ENTITY br "<br>">
]>
<HTML>
   <HEAD>
      <TITLE>My first HTML document</TITLE>
   </HEAD>
   <BODY>
      <P>Hello &br;world!
   </BODY>
</HTML>

Entities are content, tags are structure or layout (very roughly speaking). It seems whoever made the <br> a tag decided that breaking a line has more to do with structure and layout than with content. Not being able to actually "see" a <br> I'd tend to agree. Oh and I'm making this up as I go so feel free to disagree ;)


HTML is a mark-up language - it represents the structure of a document, not how that document should appear visually. Take the <EM> tag as an example - it tells user-agents that they should give emphasis to any text that is placed between the opening and closing <EM> tags. However, it does not state how that emphasis should be represented. Yes, most visual web-browsers will place the text in italics, but this is only convention. Other browsers, such as monochrome text-only browsers may display the text in inverse. A screen reader might read the text in a louder voice, or change the pronunciation. A search-engine spider might decide the text is more important than other elements.

The same goes for the <BR> tag - it isn't just another character entity, it actually represents a break in the document structure. A <BR> is not just a replacement for a newline character, but is a "semantic" part of the document and how it is structured. This is similar to the way an <H1> is not just a way of making text bigger and bolder, but is an integral part of the way the document is structured.


br elements can be styled, though. How would you style an HTML entity? Because they're elements it makes them more flexible.


Yes. An HTML entity would be more appropriate, as a break tag cannot contain text and behaves much like a newline.

That's just not the way things are, though. Too late. I can't tell you the number of non-XML-compatible HTML documents I've had to deal with because of unclosed break tags...

ReferenceURL : https://stackoverflow.com/questions/3488198/why-is-br-an-html-element-rather-than-an-html-entity

반응형

'program tip' 카테고리의 다른 글

Liskov 대체 원칙-재정의 / 가상 방법 없음?  (0) 2020.12.31
서블릿 출력 스트림을 닫아야합니까?  (0) 2020.12.31
git 브랜치 : gh-pages  (0) 2020.12.31
Java Micro ORM 해당  (0) 2020.12.31
ARC 시대의 속성 대 ivar  (0) 2020.12.31