2009.03.05 22:33
아~~ 드뎌 3번째 입니다. 일단의 마의 3 번째를 넘었는데... 내용이 너무 허접하여 계속 이끌어갈수 있을지... ^^;;;
하이간 한번 끝까지 해볼랍니다. ^^
 
오늘은 XML Parsing에 대해 알아보도록 할까요?
Parsing이라 함은 간단히 Reading이라고 생각하시면 될 듯 합니다.
하지만 단순한 죽죽 읽어 내려가는 작업이 아닌 문서내에서 어떤 특정 데이터값을 찾는 다거나 특정 값과 관련된 일정 범위의 값들을 필터링하는 작업을 할수도 있고 XML 문서의 원하는 node를 찾아 내고 특정 element의 attribute 의 값을 찾아내는 일련을 작업을 말합니다.
그 밖에 Node type으로 리스트를 만들 수 있습니다.
Node를 Sort 할 수 있습니다.
XML Source 내에 있는 chile element들의 리스트를 만들 수 있습니다.
관련된 Node를 찾을 수 있습니다.
 
Parsing이 어떤 작업인지는 어련풋이 감을 잡으셨으리라 생각합니다.
 
그러면 XML Parsing Model에 대해서 알아볼까요?
크게 두가지 모델이 있다고 합니다.
그 것은 Push model과 Pull model 입니다.
Push model은 말 그대로 XML parsing 을 담당하는 객체가 데이터를 application에게 밀어 넣어주는 개념이라고 보시면 되고 이 모델은 SAX에서 사용하고 있습니다.
Pull model은 .NET Framework XML Reader가 채택하고 있는 모델로 application이Parsing 객체에 접근하여 데이터를 당겨오는 방식이라고 생각하시면 됩니다.
 
Push model은 xml data를 요청하는 application에게 filtering없이 처음부터 끝까지 주~~욱 데이터를 밀어 넣어 줍니다. 그래서 만약에 중간에 xml 파일이 well form이 아니거나 하면 걍 확 작업을 멈춰버리죠. 그래서 프로그래밍 시에 언제, 어떤 에러가 발생할지 모르니까 다양한 상황에 따른 error 처리를 해주어야 할 것입니다.
.NET에서는 SAX를 지원하지 않습니다.
하지만 .NET Based program에서 MSXML Parser 를 사용하는 방법으로 SAX방식을 구현할 수 는 있겠죠…
 
pull model같은 경우는 전에 말한 바와 같이 application이 parser에게 특정 node를 저정해주면 parser 는 xml source에서 그 node의 데이터만 가져오고 application은 그 가져온 데이터를 당겨 (pull) 옵니다.
.NET Framework 의 XmlReader class는 한번에 하나의 node만 읽습니다. 그리고 읽은 후에는 application에 읽었다는 notification은 날릴 뿐입니다.(야~~ 나 읽었어..라고요..^^)
만약에 xmlreader가 error를 만나면 야도 SAX와 같이 error를 발생시킵니다.
근데 SAX랑 약간 다른 점이 있다면 error를 만나도 하던 작업을 계속 진행합니다.
그게 다른 점이죠…
 
 
XmlReader에는 두가지 장점이 있는데 그 중하나는 coding이 쉽다는 점입니다.
우리가 datareader 객체의 read 함수를 사용해서 Looping 을 돌려 데이터를 가죠오듯이 쉽게 데이터를 가져올 수 있습니다.
Push model에서는 state 를 handle하는 routine리라는 걸 사용한다고 하네요…
글구 그런 routine을 사용하는 것보다 훨씬 쉽다고 합니다.(SAX를 사용해 보질 않아서.. ^^;)
글구 두번째는 XmlReader는 SAX보다는 적은 memory를 사용하기 때문에 수행면에서 더낫다는 것입니다.
그리고 전에도 이야기 했듯이. SAX는 내가 원하는 데이터를 찾기 위해서는 첫줄부터 마지막줄까지 일일이 한줄한줄 찾아 내려갑니다.
내가 원하는 데이터를 만날때까지.
그러나 Pulll model을 사용하는 XmlReader의 경우는 원하지 않는 element는 걍 넘어가 버리죠..
그러니 SAX보다는 빠르겠죠…
 
요약하면 이렇습니다.
상태관리(state management)면에서 push model의 경우는 context handler를 요구하지만
pull model 의 client는 상태관리가 단순하다고 하네요..(이 부분은 공부가 더 필요할 듯…ㅡㅡ;)
multiple input streams: pull model은 client가 파서에게 일을 준다고 해도 SAX보다는 덜 무리가 가겠죠..
 push model의 경우는 일을 받으면 데이터를 주~~욱 끝까지 읽으며 데이터를 가져와야지..
그리고 그 가져온걸 요청한 녀석에게 또 다 뿌려줘야지.. 할일이 억쓰로 많을 것입니다.
 
데이터를 가져오는 효율성을 보면 push model은 데이터를 두번 쓴다고 합니다.
Parser는 Xml 문서로부터 읽은 string 객체를 자신의 buffer에 한번 쓰고 다시 그걸 client의 buffer에 밀어 넣어 써주어야 한다고 하네요..
그래서 두번 쓴다고 합니다.
Pull model은 자신의 buffer에만 쓰면 되죠.. 그리고 client에게 notification만 날린다고 했죠. (야~ 다 읽었어! 라고.. ^^)
Push model은 원하는 데이터를 찾을 때 한줄 한줄 다 읽어 내려간다고 했죠. 각 item을 비롯해서 각 element 의 name, attribute 의 이름, 값, 공백까지..
다 읽어 내려간다고 합니다. 그러나 pull model 의 경우는 원하는 item 이 아닌 경우는 걍 skip 하고 뛰어 넘어 갈 수 있습니다. 그러니 push model 경우보다는 빠를 수 있다는 야그죠.
SAX가 Pull model 보다 나은 점에 대해서 예전에 들었었는데 기억이 가물가물해서 모르겠네요..
아시는 분께서는 알려주세요… ^^
그럼 다음 시간에는 XmlReader를 이용한 Parsing을 시작으로 Xml Parsing에 대해서 한번 주~욱 알아보죠…
 
긴 글 읽어 주셔서 감사합니다.
 
한주가 다시 시작됐습니다.
 
부디 행복한 한주 되시고
고수되십시요...
 
woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
작심삼일은 넘었으나.. 다시 작심삼일이 되지 않도록 기도해주세요... ^^;(작심삼일 되기전에 다시 마음을 먹었거든요..ㅋㅋㅋ)




'XML' 카테고리의 다른 글

[XML] AutomationML  (0) 2017.04.05
[XML] XML ??? ... (3)  (0) 2009.03.05
[XML] XML ??? ... (2)  (0) 2009.03.05
[XML] XML ??? ... (1)  (0) 2009.03.05
Posted by woojja
TAG xml
2009.03.05 22:32

저번시간에 이어 오늘도 좀 나아가 볼랍니다.
밤에 집에 와서 이렇게 멀 잡고 한다는게 힘드네요...
그래도 작심삼일이 되지 않게 하기 위해서... ^^;
 
이번에는 .NET Framework이 제공하는 XML 관련 class들과 W3C 규격의 XML 을 비교해 볼까요?
W3C XML Standard
NET Framework
namespace
.NET Framework
Class
XML 1.0 and Namespace in XML
System.Xml
 
XPath
System.Xml
System.Xml.XPath
XPath
XSLT
System.Xml.Xsl
XmlTransform
DOM Level1/Level2 Core
System.Xml
XmlDocument
XML Schemas
System.Xml
System.Xml.Schemas
XmlSchema
 
XML Schema Object Model(SOM)
System.Xml.Schemas
XmlSchema
 
그럼 .NET Framework의 XML Class들을 살펴보겠습니다.
Abstract base class
Use
Derived classes
XmlReader
Streaming model과 함께 사용하여 Xml 문서를 읽을 때 forword-only, read-only cursor로 접근하며 합니다. 그리고 schema, DTD, XDR, XSD에 대한 유효성을 검사할 때 사용합니다.
XmlTextReader
XmlNodeReader
XmlValidatingReader
XmlWriter
XML 문서를 만들 때 사용합니다.
XmlTextWriter
XmlNavigator
XML 문서를 검색할 때 사용합니다.
XmlPathNavigator
XmlResolver
URI 로 명명된 외부 XML Resource를 바꾸는데(resolve) 사용합니다.
XmlUrlResolver
 
이런 것들이 있다고 합니다.
그리고 위의 class들은 차츰 진행해 나가면서 언급되고 코딩을 통해서 쓰임새를 알아보도록 하겠습니다.(ㅡㅡ; 코드 만드는게 잴루다 문제일 것 같습니다.)
 
여러분도 잘 아시다시피 MS에서는 XML을 작업하기 위한 두가지 방법을 제공하고 있습니다.
지금 다루고 있는 .NET Framework의 XML class 이고요 다른 하나는 MSXML 이라는 녀석입니다.
MSXML 은 현재 버전이 4.0이고요, 이녀석에 대해서는 더 깊게는 다루지 않을 것입니다.
단지 두 녀석을 비교만 해보죠.
 
 
MSXML
.NET Framework Classes
Usage
COM 환경
.NET Managed 환경
XML 1.0 and
XML Namespace


XPath


XSLT


DOM Level1


DOM Level2 Core
 

XML Schemas


SOM
★(readonly)

SAX

 
 
이 정도의 차이가 있죠.
쓰임의 환경이 다르다는 가장 큰 차이가 있겠죠.
 
이정도로 할까요? 다음 글부터는 이제 실제 class를 들어 Pasing과 writing에 들어가 보도록 하겠습니다.
 
woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
허접하고 말주변이 없어...죄송합니다. ^^



'XML' 카테고리의 다른 글

[XML] AutomationML  (0) 2017.04.05
[XML] XML ??? ... (3)  (0) 2009.03.05
[XML] XML ??? ... (2)  (0) 2009.03.05
[XML] XML ??? ... (1)  (0) 2009.03.05
Posted by woojja
TAG xml
2009.03.05 22:29

배열...

오늘은 배열에 대해서 말해 보고자 합니다.


일단 배열은 동일한 타입의 데이터집합을 담기위한 자료구조라고 생각하시면 맞을 듯합니다.
그리고 배열은 차원을 가집니다. 2차원, 3차원.. 그 이상의 차원을 가지지만 대개 3차원정도까지를 사용합니다.

비쥬얼베이직에서의 배열의 시작은 0 부터입니다.

그리고 이전의 개발환경에서 배열은 고정형태의 배열을 사용했습니다.
예를 들어 (4, 5)의 크기를 갖는 2차원구조의 배열을 선언한다면

1 2 3 4 5 6
2 3 4 5 6 6
3 4 5 6 7 8
4 5 6 7 8 9
5 6 7 8 9 0

형태를 가지고 있었습니다.

값을 가지지 않는 다고 하더라도 위와 같은 Matrix 형태를 유지하고 있었지요.

하지만 자바나 닷넷의 경우는 가변길이 배열을 지원하게 되었습니다.



이 것은 위의 Matrix 형태가 아니 각각의 항목에 대해 길이가 변할수있는 구조이며 배열의 배열이라고말할 수있습니다.

형태로 보자면

1 2 3 4
2 3 4
3 4 5 6 7 8
4 5
5 6 7 8 9

위와 같은 형태를 가집니다.

이것은 1차원 배열에 링크된 다른 배열의 집합의 형태라고 말할 수 있겠지요.


먼저 배열의 선언을 살펴보겠습니다.

배열의 선언은

Dim A() as Integer '일차원 배열
Dim A(,,,) As Integer '다차원 배열(4차원)
Dim A()() as Integer '가변길이 2차원배열

와 같은 형태로 선언을 하게 됩니다.

초기화는

Dim A() as Integer = New Integer(2){3,4} '일차원 배열
위와 같이 선언과 함께 배열을 생성할 수 있고

아니면 추후에 배열 A 에 입력할 수있다.
A = New Integer() {}

그리고 배열의 크기를 변경시키고자 할때에는 ReDim A(4)와 같이 Redim 문을 사용해야 한다.


배열의 크기를 조회하고자 하시려면 A.length 이고
현재 사용하고자 하는 배열의 차수를 알고자 한다면
A.Rank 를 사용합니다.

배열내에 담긴 값들은 정렬도 가능하게되는데..

A.Sort 또는 반대로 정렬하고자 한다면 A.Reverse 를 사용하게 되면 정렬이 가능하게 됩니다.

그리고 배열이 어떤 데이터 Type 의 데이터를 담고 있는지를 알게 하려면...
TypeName(A) 라고 TypeName 함수를 사용하면 배열의 데이터 타입을 조회할 수 있습니다.


흠.. 오늘은 이만 줄이렵니다.

컥 3시...ㅡㅡ 짧게짧게해서 자주 올리도록 노력하겠습니다.

벗꽃도 활짝피고요... 행복한 봄이 왔습니다.
황사에 건강조심하시구요..

행복한 고수되세요...

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



'VB.NET' 카테고리의 다른 글

[VB.NET] Visual Basic 2005 Power Packs  (0) 2009.03.05
[VB.NET] VisualBasic.NET 키워드  (0) 2009.03.05
[VB.NET] 배열  (4) 2009.03.05
[VB.NET] 변수사용  (0) 2009.03.05
[VB.NET] As Customer와 As New Customer 의 차이...  (0) 2009.03.05
[VB.NET] Null Class  (0) 2009.03.05
Posted by woojja
TAG array, 배열
Dax Pandhi
Nukeation Studios

2006년 4월

요약: Dax Pandhi는 Windows 응용 프로그램을 위한 사용이 쉬운 사용자 인터페이스를 구현하는 방법과 사용자 환경 디자인 원칙에 대해 설명합니다.


목차


소개
적절한 UI를 만들기 위한 기본 원칙
   간격 조정 및 위치 지정
   크기
   그룹화
   사용 편이성
보다 효율적이고 편리한 사용자 환경 조성을 위한 20가지 팁
   1. 표준 준수
   2. 중요 단추에 주의 끌기
   3. 알아보기 쉽도록 아이콘 제공
   4. 알아보기 쉽도록 머리글 작성
   5. 사용자 지정 메시지 상자 사용
   6. 대체 명령 포함
   7. 중요 작업을 처리하는 방법
   8. 라디오 단추 또는 콤보 상자
   9. 사용자를 방해하지 마십시오
   10. 진행 상태 알리기
   11. 마법사로 복잡한 단계를 간단히 수행
   12. 텍스트의 어조를 정확히 전달
   13. 때로는 ListView가 더 효율적
   14. 이동 경로(Breadcrumb) 컨트롤과 세로 막대로 간단한 탐색 지원
   15. 멋진 그래픽 사용
   16. 가급적 크기 조정이 가능한 폼 제공
   17. 세로 막대/작업창으로 보다 다양한 기능 제공
   18. 알림 옵션 제공
   19. 도구 설명 제공
   20. 사소한 부분까지 배려
결론
참조 및 자료


http://www.microsoft.com/Korea/MSDN/library/Ko-Kr/dnwui/html/humanux.aspx



Posted by woojja

Rich Tebb

Content Master Ltd

2007년 2월

목차

 

http://www.microsoft.com/korea/msdn/library/ko-kr/bb330925(VS.80).aspx




Posted by woojja