이번 주제는 Sementic Element 이다.
HTML 4 vs HTML 5 (1), (2) 주제의Contents Model 과  Language  에서 언급되었던 이야기를 조금 더 자세히, 특히 아웃라인인과 과 관련된 엘리먼트를 좀 더 살펴보려고 한다.

아래 내용들은 본인의 생각도 물론 많이? 포함되어 있지만

등을 참고하고 재구성 했음을 미리 말씀드립니다.

<!DOCTYPE HTML>
<html lang="ko">
  <head>
    <
meta charset="UTF-8">
  <title>HTML 5 예제</title>
  </head>  <body>
    <!-- 아시다시피 여기서부터 Body Contents 가 들어가겠죠? -->
    <p>안녕하시렵니까? HTML 5?</p>
  </body>
</html>
위 예제가 생각나시는지 모르겠다.
^^
위 요소들을 몇가지 살펴보려한다.


1. 문서타입과 Root 요소

1-1. 문서타입.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


이 문서타입은 Microsoft 가 Mac 용 internet explorer 5 를  개발하면서 예전에 만든 HTML페이지들이 제대로 표시되지 않는 심각한 문제가 발생하여, 이를 해결하기 위해서 문서의 상단에 HTML DocType 을 추가하였다...
Mac 용 Internet explorer의 경우 이 DocType 을 확인하도록 하여 이 DocType 이 포함되지 않은 기존 HTML 페이지는 옛날방식으로 렌더링하도록 하였다.

그래서 새 명세를 적용하려면 HTML Element 앞에 적절한 Doc Type만 지정하면 됐다.

그런데 아이디어가 남용되면서 (^^;) 명세를 최대한 지키는 표준모드와 표준을 따르지 않는 비표준모드로 나뉘고, 또 몇몇 요소에서 표준을 따르지 않는 준 표준모드까지 나오게 되었다.

위 DocType 은 여러 표준 Doc type 중 하나다 나머지는 이곳(http://www.w3.org/QA/2002/04/valid-dtd-list.html) 에서 확인할수 있다.

여러분이 생각해도 정리를 해야할 것 같다는 생각이 들지 않는가?
그래서 확~! 줄여서 나온 DocType !!!

<!DOCTYPE HTML>

인 것이다.
머리나쁜 본인도 외운다. ㅋㅋㅋ
그리고 모든 브라우져가 표준모드로 작동할 것이다.
한가지 주의할 점은 있는데...
맨 첫줄에 써주어야 한다는 것이다. 빈줄이 있으면 안된다는 것.
그렇지 않으면 비표준모드로 랜할 수 있다는...

그리고 또 한가지...
기존에 HTML 4.01 이나 XHTML 1.0, 1.1 로 작성한 페이지를 HTML 5로 변환하는 작업의 시작!!! 이라는 것. ^^

1-2. Root Element
HTML 페이지의 루트 엘리먼트인 <HTML> 는 기존에 XHTML 에서 사용하는 namespace 가 포함되어있었는데 이제 HTML 5 에서는 Lang 속성만 있다.( manifast 속성은 추후에 다시 알아보기로 하자...)
그래서... 
<html lang="ko"> 만 적으시면 된다.

1-3. <head> Element
head Element 는 변화 요소가 거의 없는데 문서의 Metadata 를 담는 Element 이며
Title Element 가 필수로 들어가고 Meta Element, Link Element, Script Element 가 들어간다는 것은 기본적인 사항이라 모두들 알고 있을 것이다.

1-4. Meta Element
Meta Element 는 Content 속성을 사용해서 나타내는데 이번에 새로 Charset 속성을 사용하여 문자 Encoding 을 나타낼 수 있게되었습니다.
HTTP Header 에 문자 Encoding 이 포함되어 있다면 Meta Element 의 문자 Encoding 보다 우선한다는 것도 알아두시길...
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
위와 같이 적긴하지만 다른 요소들은 생략하시더라도 아래와 같이 charset을 포함한 Meta Element 를 포함하기 바란다.
<meta charset="utf-8">


2. 아웃라인 구성 Element들
이번엔 이번에 추가된 아웃라인을 구성하는 Element 들을 살펴보려한다.
이전 글에서 소개했듯이 HTML 5 에 문서의 구조화와 관련된 요소들이 많이 추가되었다.

아래와 그림과 같이 간단히 나타낼 수 있는데 하나하나 중요하게 생각해야하는 사항들만 짚어 보도록 하자.


2-1. Section Element

Outline 을 구성하는 Element 들을 설명하기 위해서는 먼저 Section Element 를 알아봐야 할 것이라 생각한다.
Section Element 는 일반적인 Section을 나타낸다.
그런데 의미 자체로만 보게되면 기존에 사용하던 Div Element 와 사용하기에 혼동하기 쉽다.
Section Element 는 장이나 절 단위를 나타낸다고 생각하면 된다. 스타일을 적용하기위해서 Section Element 를 사용해서는 안되며 그런 용도라면 Div Element 를 사용하도록 해야한다.
Section Element 는 장이나 절을 나타내므로 제목과 본문을 하나로 묶을 때 사용합니다.
만약에 아래와 같이 제목과 본문에 스타일을 적용하고 싶다거나 구분을 지으려 한다면 Div Element 를 사용해야 할 것입니다.



 

<section class="title">
<h1>제목</h1>
<section class="content">
<p>본문</p>
</section>
</section>


위와 같이 Element 를 구성하게되면 제목과 본문을 다른 Section 으로 해석하게 될 것이다.
본문의 Level 이 하나 더 내려가게 되겠지?

그래서 위그림과 같은 구조에서는 아래와 같이 Mark up해야 할 것이다.
<section class="title">
<h1>제목</h1>
<div class="content">
<p>본문</p>
</div>
</section>

또한 아래와 같은 구성에서도
각각을 모두 Section Element 로 나누는 것이 아닌 HTML 5 의 OutLine 구성 Element 들을 적절히 사용하여 구성해야 할 것이다.


<body>
<header>제목</header>
<div class="left">
<nav>...
</nav>
</div>
<div>
<article>...
</article>
</div>
<div>
<aside>....
</aside>
</div>
<footer>....</footer>
</body>


이와 같이 말이다...
아직 언급하지 않은 Element 가 있지만 후에 알아볼테니 그런것이 있구나 식으로 생각하시면 되겠다. ^^'

2-2. nav Element
nav Element 는 Navigation Section 을 나타냅니다. 페이지상의 Header 나 좌측, 우측에 표현하는 Link 모음이고 간혹 Footer 에도 표현하기도 하지요.
모든 Link 에 nav Element 를 사용하면 안되겠고, 다시한번 이야기 하지만 스타일을 적용하기 위해서 nav Element 를 사용하면 안될 것입니다.
또 한가지!! Site Map Page 를 nav Element 로 표현하면 안될 것입니다.
Site Map 의 Link 는 nav 특성보다는 Main Contents 이기 때문입니다.

주로 nav Element 내에 ul Element 를 사용하여 목록으로 Navigation Link 를 Markup 합니다.

이번엔 nav Element를 그룹화하는 방법을 몇가지 알아보죠.


 


위 이미지는 제 블로그의 우측에 있는 링크들입니다.
붉은 부분만 떼어놓고 본다면 아래와 같이 Markup 할 수 있을 것입니다.
<nav>
<h3>카테고리</h3>
<ul>
<li><a href="...">분류전체보기</a></li>
<li><a href="...">VB.NET</a></li>
...
</ul>
</nav>
<nav>
<h3>글보관함</h3>
<ul>
<li><a href="">2011/05(8)</a></li>
<li><a href="">2011/04(4)</a></li>
...
</ul>
</nav>

한가지 더 생각해 보자면
위 그림상에 있는 컨텐츠의 내용은 aside element 에 속하는 것으로
아래와 같이 nav Element 들을 aside Element 내에 포함시킬 수 있을 것이다.
<aside>
<nav>
<h3>카테고리</h3>
<ul>
<li><a href="...">분류전체보기</a></li>
<li><a href="...">VB.NET</a></li>
...
</ul>
</nav>
<nav>
<h3>글보관함</h3>
<ul>
<li><a href="">2011/05(8)</a></li>
<li><a href="">2011/04(4)</a></li>
...
</ul>
</nav>
</aside>

이렇게 말이다.

글이 너무 길어진듯하여 나누어야 겠다.
다음 글에서는 article Element 부터 진행하도록 하겠다.


행복한 고수되십시요...


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

'Web > HTML 5' 카테고리의 다른 글

[HTML 5] 6. Strong Web Form  (0) 2011.06.05
[HTML 5] 5. Sementic Element (2)  (1) 2011.06.01
[HTML 5] 2. HTML4 vs HTML5 (1)  (0) 2011.05.14
[HTML 5] 3. HTML4 vs HTML5 (2)  (0) 2011.05.11
[HTML 5] 1. HTML 5 의 개요  (2) 2011.05.09


Registry 를 수정하는 Application 을 제작하였다.
기존에는 VisualStudio 의 UAC 를 상승시켜 사용을 하다보니 UnauthorizedAccessException 을 만나지 않았었다.


그래서 기존에 제작한 Application 의 UAC 를 상승시켜야만 했다.



UAC 를 상승시키는 한가지 방법으로 실행파일의 Manifest 를 사용하는 방법이 있다.
이방법을 사용하기위해선 Manifest 파일과 mt.exe 파일을 사용해야만 하는데 먼저 manifest 파일을 보게되면
대략 아래와 같다.

    1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

    2 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    3   <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>

    4   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

    5     <security>

    6       <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

    7         <requestedExecutionLevel level="asInvoker" uiAccess="false"/>

    8       </requestedPrivileges>

    9     </security>

   10   </trustInfo>

   11 </assembly>


이 파일에서 requestedExecuteionLevel 의 level 값이 중요한데 기본적으로 "asInvoker" 로 되어 있다.
이 값은 UAC 상승없이 실행하며 호출 Process 의 권한을 이용하도록 되어있다.
따라서 나같은 경우 Application 의 Debug 가 VisualStudio 의 UAC 를 바탕으로 실행이 되었으므로 UAC 가 상승되어 있는 상태였으므로 맘대로 Registry 를 건드릴수 있었던 것이다.

다른 값으로 "highestAvailable" 이 있는데 이것은 호출 Process 가 가지고 있는 권한 중 가장 높은 권한을 사용하는 옵션이다.

여기서 내가 사용할 값은 "requireAdministrator" 으로 실행시 관리자 권한으로 UAC 상승을 요청하도록 하는 옵션인데 따라서 확인창이 뜨게 된다.

내가 사용하는 방법을 간단히 소개를 했는데...
위 방법을 사용하려면 먼저 manifest 파일을 얻어야 한다.
간단히 얻는 방법이 있다.

woojja.exe 의 실행파일인 경우 실행파일이 컴파일되는 Target Folder 에 가보면 ("bin" Folder 에 "Debug", "Release" Folder)
woojja.vshost.exe.manifest 라는 파일이 보일 것이다.
ㅋㅋㅋ 이것을 사용하자.
파일을 복사하여 "woojja.exe.manifest" 라는 이름의 파일로 만들자...
그리고 파일을 열어
requestedExecuteionLevel 의 level 값을 "asInvoker" 에서 "requireAdministrator" 로 수정하자.
저장하고...

이제 mt.exe 를 실행시켜야 할 것이다.


mt.exe 파일의 위치는
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin"
에 있다.
Version 에 따라
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin" 에도 존재한다.

이제 실행시키자.

실행파일(exe)인 경우 옵션값 1 을 사용한다.
mt.exe -manifest "woojja.exe.manifest" -outputresource:"woojja.exe";#1

Library 파일(dll)의 경우 옵션값 2 를 사용한다.
mt.exe -manifest "woojja.dll.manifest" -outputresource:"woojja.dll";#2



 

D:\wizExpert\Source\woojja\Deploy>"C:\Program Files\Microsoft SDKs\Windows\v7.0A\

bin\mt.exe" -manifest "woojja.exe.manifest" -outputresource:"woojja.exe";#1

Microsoft (R) Manifest Tool version 5.2.3790.2076

Copyright (c) Microsoft Corporation 2005.

All rights reserved.

 

D:\wizExpert\Source\woojja\Deploy>

 

 



그러면 요로케 나올 것이며...

아래와 같이 UAC 확인창이 뜰 것이다.





^^
행복한 고수되셔요...
woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

캬캬캬
엄청나게 무식하다고 욕하지 마시라...

기존 Resources 에 포함되어 있는 Resource 들을 보면 아래 와 같은 이미지들이 포함되어 있습니다.
번호로되어있는 파일들이 보일텐데요...


그 Resource 들을 파일 이름으로 조회를 해야할 일이 발생했습니다.
xml 데이터를 이용해서 imageList 객체를 만들려고 하는데 먼저 imageList 객체에 image 를 어떻게 추가할 수 있는지 MSDN Document 를 찾아보면...

 

.

Paramenter 를 보면 string 형의 Key 값과 Bitmap 형의 image 가 필요한데...
Key 는 XML 파일에서 가져오고... XML 에 있는 데이터를 바탕으로 Resource 에 등록되어 있는 이미지를 가져올 계획이었다.

참고로 XML 파일에는 이런식으로 되어 있다.

   15   <PlayerTypes>

   16     <PlayerType category="Default" value ="0" enable="True" Default="True">Transparent</PlayerType>

   17     <PlayerType category="Normal" value ="10" enable="True">일반-검정</PlayerType>

   18     <PlayerType category="Normal" value ="11" enable="True">일반-파랑</PlayerType>

   19     <PlayerType category="Normal" value ="12" enable="True">일반-빨강­</PlayerType>

   20     <PlayerType category="Normal" value ="13" enable="True">일반-초록</PlayerType>

   21     <PlayerType category="Normal" value ="14" enable="True">일반-하늘색</PlayerType>

   22     <PlayerType category="PopUp" value ="20" enable="False">팝업-검정</PlayerType>

   23     <PlayerType category="PopUp" value ="21" enable="False">팝업-파랑</PlayerType>

   24     <PlayerType category="PopUp" value ="22" enable="False">팝업-빨강­</PlayerType>

   25     <PlayerType category="PopUp" value ="23" enable="False">팝업-초록</PlayerType>

   26     <PlayerType category="PopUp" value ="24" enable="False">팝업-하늘색</PlayerType>

   27     <PlayerType category="SimpleCircle" value ="30" enable="True">단순 원형-파랑</PlayerType>

   28     <PlayerType category="SimpleCircle" value ="31" enable="True">단순 원형-빨강­</PlayerType>

   29     <PlayerType category="SimpleCircle" value ="32" enable="True">단순 원형-검정</PlayerType>

   30     <PlayerType category="SimpleSquare" value ="40" enable="True">단순 사각-파랑</PlayerType>

   31     <PlayerType category="SimpleSquare" value ="41" enable="True">단순 사각-빨강­</PlayerType>

   32     <PlayerType category="SimpleSquare" value ="42" enable="True">단순 사각-검정</PlayerType>

   33   </PlayerTypes>


그렇다면 이제 Assembly 에 있는 Resource 에 접근하는 방법을 알아봐야 할텐데...
"Show All Files" 아이콘을 클릭하면 숨겨져 있는 파일을 모두 볼수 있는데.. Assembly 전체에서 사용하는 Resources.resx 의 Designer code 파일을 보도록 하자...(Resources.Designer.vb)

 



이 파일을 열어보면... 아래와 같이 Resource 들을 접근하기위한 Property 가 주~~욱 나열되어 있는 것을 확인할 수 있다.

   63         Friend ReadOnly Property _10() As System.Drawing.Bitmap

   64             Get

   65                 Dim obj As Object = ResourceManager.GetObject("_10", resourceCulture)

   66                 Return CType(obj,System.Drawing.Bitmap)

   67             End Get

   68         End Property

   69 

   70         Friend ReadOnly Property _11() As System.Drawing.Bitmap

   71             Get

   72                 Dim obj As Object = ResourceManager.GetObject("_11", resourceCulture)

   73                 Return CType(obj,System.Drawing.Bitmap)

   74             End Get

   75         End Property

   76 

   77         Friend ReadOnly Property _12() As System.Drawing.Bitmap

   78             Get

   79                 Dim obj As Object = ResourceManager.GetObject("_12", resourceCulture)

   80                 Return CType(obj,System.Drawing.Bitmap)

   81             End Get

   82         End Property

   83 

   84         Friend ReadOnly Property _13() As System.Drawing.Bitmap

   85             Get

   86                 Dim obj As Object = ResourceManager.GetObject("_13", resourceCulture)

   87                 Return CType(obj,System.Drawing.Bitmap)

   88             End Get

   89         End Property


이 파일은 어떤 녀석이 만들어 주느냐?


위 그림처럼... Resources.resx 파일을 클릭해보면 아래 Properties 창에 "Custom Tool" 이라는 항목이 나오는데...
값을 보면... VbMyResourcesResXFileCodeGenerator 라는 녀석이 있는데...
바로 이녀석이 자동적으로 Generating 해주는 역할을 한다.
이 녀석이 Resource 의 이름. 즉, String 을 건네주면 값을 반환하는 Function 같은 것을 지원해주면 좋으련만...
그런 함수를 지원하지 않기 때문에...
내가 손으로 직접 만들어 주려고 한다. ㅋㅋㅋ

그럴려면...
VisualBasic.NET 의 경우 Resource 에 어떻게 접근할까?
위에서 봤듯이... Custome Tool 에 의해서 쉽게 접근 할 수 있다..

VisualBasic.Net 의 경우 My Namespace 를 사용하면 쉽게? 접근할 수 있는데...

Dim img As System.Drawing.Image = My.Resources._10

이런식으로 하면 바로 이미지를 가져올 수 있다.

하지만 나는 XML 파일의 String 값을 기반으로 실행을 하려고 했으므로...

 VbMyResourcesResXFileCodeGenerator 라는 녀석이 만들어낸 "Resources.Designer.vb" 파일을 참고삼아..
모듈을 만들고 몸뚱이에... 함수를 추가하여 엇비슷하게 사용할까 한다. ㅋㅋㅋ
(완전 단순 무식... ^^')

그 단순무식의 실체는 아래와 같다...
ㅋㅋㅋ

    1 Option Strict On

    2 Option Explicit On

    3 

    4 Imports System

    5 

    6 Namespace My.Resources

    7 

    8     <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _

    9      Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _

   10      Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _

   11      Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _

   12     Module Resources_Partial

   13 

   14         Private resourceMan As Global.System.Resources.ResourceManager

   15 

   16         Private resourceCulture As Global.System.Globalization.CultureInfo

   17 

   18         '''<summary>

   19         '''  Returns the cached ResourceManager instance used by this class.

   20         '''</summary>

   21         <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _

   22         Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager

   23             Get

   24                 If Object.ReferenceEquals(resourceMan, Nothing) Then

   25                     Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("woojjaApplication.Resources", GetType(Resources).Assembly)

   26                     resourceMan = temp

   27                 End If

   28                 Return resourceMan

   29             End Get

   30         End Property

   31 

   32         '''<summary>

   33         '''  Overrides the current thread's CurrentUICulture property for all

   34         '''  resource lookups using this strongly typed resource class.

   35         '''</summary>

   36         <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _

   37         Friend Property Culture() As Global.System.Globalization.CultureInfo

   38             Get

   39                 Return resourceCulture

   40             End Get

   41             Set(ByVal value As Global.System.Globalization.CultureInfo)

   42                 resourceCulture = value

   43             End Set

   44         End Property

   45 

   46         Public Function GetBitmapByName(ByVal strName As String) As System.Drawing.Bitmap

   47 

   48             Dim obj As Object = ResourceManager.GetObject(strName, resourceCulture)

   49             Return CType(obj, System.Drawing.Bitmap)

   50 

   51         End Function

   52 

   53         Public Function GetStringByName(ByVal strName As String) As String

   54 

   55             Dim obj As Object = ResourceManager.GetObject(strName, resourceCulture)

   56             Return CType(obj, String)

   57 

   58         End Function

   59 

   60     End Module

   61 End Namespace

   62 



GetBitmapByName() 과 GetStringByName() 이라는 함수가 추가된 것을 볼 수 있을 것이다.

함수의 Parameter에 strName 과 Type 을 던지는 것도 한가지 방법일 것이다.

그건 여러분이 선택할 사항이고... ㅋㅋ

Reflection 을 사용하여 원하는 값을 가져올 수도 있겠지만...
그 정도로 값을 동적으로 가져와야 할 사항은 아닌 까닭에 한번 만들어 보았다. ^^;



행복한 고수되십시요...


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\



반응형

+ Recent posts