오후 6:57 00-03-31
XML 조경민
---------------------------------------------
##개요##

HTML은 SGML의 한 종류이며 HTML도 DTD가 있지만
이미 브라우저에 내장된 DTD이다.

SGML은 DTD도 정의할수 있게 하는 마커블언어 표준 스펙
인데 이를 실제로 현실화하여 응용한것중 하나가 (application화)
XML이다.

XSL/CSS는 XML 데이타를 어떻게 표현하는가에 관한
스타일 시트이다.

DTD( Document Type Definition) 문서원형정의는
XML의 데이타 구조에 대한 문서 원형이다.
-> DTD는 사라지는 추세이며 XML 스키마로 대치되고 있다.

XML문서가 완성이 되려면 XML파일과 이 XML안에서
쓰이는 문서 형식을 알기위해 원형으로 DTD가 필요하며
이를 표현하기 위해서 CSS나 XSL가 필요하다.

-문서는 쪼개어도 하나의 요소를 담아야 한다.
-문서는 하나의 루트 요소가 있어야 한다. 루트 요소란 문서
  전체를 감싸는 고유한 시작(opening), 종료(closing)태그다.
-문서 안에 담긴 나머지 모든 요소들의 내포(nest)관계가 엉켜
  서는 (overlap) 안된다.

##예제##

....test.xml..........
<HTML>
<!DOCTYPE man SYSTEM "man.dtd">
<man>
<name>bro</name>
</man>
</HTML>
....man.dtd............
<!DOCTYPE man [
<!ELEMENT man (name+ , nickname?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT nickname (#PCDATA)>
]>
....................................
+는 하나이상의 요소가 있다는 의미
?는 생략가능하다는 말이다.


##스타일시트##

웹페이지에는 많은 양식이 존재하는데 한 사이트에 대해서는
대부분 일관된 외양과 구성을 갖는다. 그러나 모든 페이지들
마다 동일한 양식 관련 태그들이 포함되어 사용자는 결국
계속 똑같은 코드를 매번 전송받아야 한다. 양식관련코드를
하나의 문서(스타일시트)로 분리하여 나머지 페이지들은 링크
를 하여 단 한번 전송받음으로써 브라우저 캐시기능을 힘입어
효율을 좋게 할 수 있다.

종류
-CSS(Cascading Style Sheet, 계단식 스타일 시트 )
-XSL(Extensible Stylesheet Language, 확장성 스타일시트언어)
-DSSSL(Document Style Sementics and Specification Language,
        문서 양식 의미와 사양 언어)
-XS(DSSSL-0이라고함)


CSS
----
간단한 구조시 유용
XML본문에 해당 css를 링크 시킴
<?xml:stylesheet href="man.css" type="text/css"?>

......man.css.....
name {
        display: block;
        font-family: Arial, Helvetica;
        font-size: 20pt;
        color: #937011;
     }
nickname {
        display: block;
        font-family: Arial, Helvetica;
        font-size: 10pt;
        color: #117011;
        text-align: center;
     }

이렇게 하면 브라우저에서 man.xml을 출력하면 보이게
된다 (IE 5.0 이상만 )


XML
----------
DSSSSL과 CSS의 장점을 합친 것


MTML과 함께 사용가능 CSS(o) , XSL(x)
XML과 함께 사용가능 CSS(o), XSL(o)
변형 언어인가 CSS(x), XSL(o)
구문 구조 CSS(CSS), XSL(XML)


XSL 조경민
오전 9:08 2000-04-10
-------------------------------------------------------

CSS로도 XML을 브라우저화면에 나타나게 할 수 있지만
그 기능이 한정적이며 확정적이지 못하다. 그래서 나온것
이 XSL라는 스타일 시트형태인데, XSL은 XML 문법을 그대로
쓰고 있으며 XML 문서의 각 엘리먼트들의 화면에 나타나게
되는 양식을 정의하는 XML 문서이다.

다음의 두 문서가 있다.
..................test.xml........................
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<greeting>Hello XSL!</greeting>

..................test.xsl..........................
<xsl:stylesheet>
        <xsl:template metch="greeting">
                <fo:block color="red" font-size="16pt">
                        <xsl:process-children/>
                </fo:block>
        </xsl:template>
</xsl:stylesheet>

[ XSL 트리 구조 ]
     <greeting>
         |
     Hello XSL!


[ 결과 화면 ]
  Hello XSL!          ( 빨간색에 16크기로 )


xsl:template match="greeting"은 해당 XML에서 greeting
이라는 엘리먼트를 찾으라는 템플리트 명령이다.
이때 매치 값이 ="/" 이면 root를 찾으라는 것이다.
="*" 는 모든 엘리먼트(요소 노드 not root)를 말한다.
만일 "*"과 "greeting"두개의 매치가 있다면 greeting엘리
먼트는 정확히 매치하는 greeting으로만 분기된다.

<xsl:process-children/> 는 greeting 의 자식 엘리멘트를
처리하라는 것이다. ( 이 명령이 없다면 greeting의 자식인
Hello XSL!은 처리를 하지 않을 것이다.

블럭 플로우 객체 vs 인라인 객체
블럭 플로우 객체는 <> </>로 되는 객체이며 인라인 객체는
태그 하나가 곡 객체이며 문서에 삽입되어 다음 텍스트들에게
영향을 주는 것으로
블럭플로우 객체는 HTML에선 <A HREF="..">...</A> 가 있으며
<FONT>..</FONT>같은 것이며 XML 문서는 모두 블럭플로우 객체
이다. 인라인 객체는 <P> 나 <h1> 같은 것들이다.
<fo:block>는 블럭 플로우 객체를 생성하라는 명령어이다.


XSL의 특징중의 하나인 확장성은 xsl:template에 의해서
나타난다.

<xsl:template match="greeting">
        <fo:block>
                <xsl:text>Added by XSL</xsl:text>
                <xsl:process-children/>
                <xsl:process-children/>
        </fo:block>
</xsl:template>

[결과 트리 ]
           <greeting>
               |
     ------------------------
     |         |            |
Added by XSL Hello XSL!  Hello XSL!

결국엔 실제 화면에는

Added by XSL
Hello XSL!
Hello XSL!

원본 XML 문서를 XSL과 함쳐서 새로운 결과 트리를 만들었으며
이는 확장된 결과 트리이다.
XML을 XSL(또는 CSS)과 함께 쓰면 브라우저가 화면에 뿌릴수
있으나 원래는 XML로는 화면에 나타낼수 없다. 실제로는 HTML
을 만든후 이를 브라우저가 하면에 나타나게 하는것이다.

[원본 XML] + [XSL스타일시트]
          ▼
     [ DOM 파서 ]
          ▼
       HTML 문서
          ▼
  브라우저로 화면 표시


결국엔 XML 문서가 XSL과 함께 붙어서 새로운 문서인(SGML을 따르는)
HTML이라는 문서로 변환되었다. ( Transformation )


매치 기본 규칙
<xsl:template match="*|/">
는 루트 노드와 요소 노드 모두에게 적용되는 템플리트다.


XSL 이름공간
-----------------------------------------------
몰라도 별로 지장은 없다.


<xsl:stylesheet>
....
</xsl:stylesheet>

는 단순화된 표현이지만 실제 제대로된 것은

<xsl:stylesheet
      xmlns:xsl="http://www.w3.org/TR/WD-xsl"
      xmlns:fo="www.w3.org/TR/WD-xsl/FO"
      result-ns="fo">
    .....
</xsl:stylesheet>

이며 DOM 파서는 대충 맞으면 화면에 뿌릴수 있도록
하고 있다.


XSL 템플릿 규칙
---------------------------------------------------
~~~~~~~~~이름을 통한 선택~~~~~~~~~~~~~~
<xsl:template match=-"greeting">
요소 노드 이름이 greeting인것과 매치된다.

~~~~~~~~~조상을 통한 선택~~~~~~~~~~~~~~
<xsl:tempate match="P//EM">
슬래쉬 두개를 사용해서 조상-자손 관계를 표현한다는 점
이 주목할만한 점이며, 조상//자손이 된다.
( 이 관계는 직계 조상 이 아니라 중첩된 nested도 된다. )
<P>
  ...
   <EM>
   </EM>
</P>
이것도 매치되는 것이라는 것이다.


직계 자손 관계라면 슬래쉬를 하나만 쓴다.
<xsl:tempate match="P/EM">

<xsl:tempate match="DIV/P/EM">
는 DIV 직계 자손은 P이며 P의 직계자손이 EM일때 매치하느
템플리트 명령이다.

~~~~~~~~~~~~둘 이상의 이름을 통한 선택~~~~~~~~~~~~
<xsl:tempate match="H1 | H2 | H3">
엘리먼트가 H1이거나 H2이거나 H3이면 매치된다.

~~~~~~~~~~~~~~~~~루트의 선택~~~~~~~~~~~~~~~~~~~~~~
이때 루트 노드는 우리가 아는 루트가 아니라 DOM 파서가
만들어 내는 가상의 문서 노드 이다.
<xsl:template match="/">

~~~~~~~~~~~~~와일드 카드에 의한 선택~~~~~~~~~~~~~
<xsl:template match="*">


~~~~~~~~~~~~내장된 기본 템플릿 규칙~~~~~~~~~~~~~~
<xsl:template match="/|*">
        <xsl:process-children/>
</xsl:template>

<xsl:process-children/>는 자식노드를 처리하라는 명령이다.

~~~~~~~~~~~~~~~ID를 통한 선택~~~~~~~~~~~~~~~~~~~~
ID를 통한 선택은 XPointer의 구문과 동일
<xsl:template match="id(A1)">
물론 XML문서에는 다음의 요소 노드가 있다고 가정한다면
<greeting id="A1">Hello World!</greeting>
그렇다면 이 템플리트는 greeting이라는 요소노드를 매치하는
것이 된다.

~~~~~~~~~~~~~~~~특성을 통한 선택~~~~~~~~~~~~~~~~~~~~
<xsl:template match="para[attribute(type)]">
는 para라는 요소노드와 매치하되 에트리뷰트가 type인것을
매치한다.
-> <para type="no" ...> 인 요소노드가 매치됨

<xsl:template match="para[attribute(type)='yes']">
인 템플리트는
<para type="yes" ..> 인 것과 매치된다.

~~~~~~~~~~~~~~~~~자식을 통한 선택~~~~~~~~~~~~~~~~~~~~
<xsl:template match="para[emph]">
<emph>를 자식으로 가지는 모든 para요소들에게 적용

~~~~~~~~~~~~~~~~~~위치를 통한 선택~~~~~~~~~~~~~~~~~~~
여러가지 사양이 있다 ( 스펙을 참조 )

~~~~~~~~일치하는 것이 여러 템플릿규칙이면~~~~~~~~~~~~
좀더 세부적인 매치를 적용시킨다.


포매팅 객체들의 배치(layout)

.............. 생략 중 ....................

'KB > 기타' 카테고리의 다른 글

div 절대좌표로 태그로 놓기  (0) 2004.03.19
[db] mssql에서 트리거  (0) 2004.03.19
XML Link 약간;  (0) 2004.03.19
XSLT 스펙 정리  (0) 2004.03.19
[java] jar 패키지 만들기  (0) 2004.03.19

+ Recent posts