'W3C/XML'에 해당하는 글 18건

XPath Functions

W3C/XML 2006. 12. 12. 18:44
필터를 이용한 엘리먼트 선택

필터는 특정한 엘리먼트를 선택할 때 사용된다.
조건식이나 XPath에서 제공하는 다양한 연산자, 표준함수와 같이 사용된다.
XPath 표현식에서 사용되는 모든 연산자와 함수들은 XPath 필터인 "["와 "]" 사이에 사용된다.

* XPath 연산자
+ 더하기
- 빼기
* 곱하기
div 나누기
mod 나눈 후 나머지값
= 같다
!= 같지 않다
< 작다
<= 작거나 같다
> 크다
>= 크거나 같다
or 또는
and 그리고

* XPath Node Set 함수
count - 현재 선택된 엘리먼트의 수를 가져온다.
id - 선택된 엘리먼트의 고유 ID를 가져온다.
last - 선택된 엘리먼트의 마지막 자식 엘리먼트를 가져온다.
local-name - 선택된 엘리먼트의 접두사를 제외한 이름을 가져온다.
name - 선택된 엘리먼트의 접두사를 포함한 이름을 가져온다.
namespace-uri - 네임스페이스의 경로를 가져온다.
position - 현재의 위치 정보를 가져온다.

* XPath 문자열 함수
concat - 두 문자열의 결합된 결과를 가져온다.
normalize-space - 불필요한 공백을 제거한다.
contains - 두 인자 중에 첫 번째 인자에 두 번째 인자의 문자가 있으면 true, 그렇지 않으면 false를 반환한다.
starts-with - 두 인자 중에 첫 번째 인자의 스트링의 첫 번째 문자와 두번째 인자의 시작 문자가 같으면 true를 반환한다.
string - 문자열로 변환한다.
string-length - 문자열의 길이를 반환한다.
substring - 전체 문자열 중에 지정한 만큼의 부분 문자열을 반환한다.
substring-after - 전체 문자열 중에 지정된 문자열의 바로 뒤의 문자열을 반환한다.
substring-before - 전체 문자열 중에 지정된 문자열의 바로 앞의 문자열을 반환한다.
translate - 문자열 안에서 해당 문자를 대체 문자로 치환한다.

* XPath 숫자형 함수
celling - 입력된 인자 중에서 가장 작은 자리의 정수(integer)를 반환한다.
floor - 입력된 인자 중에서 가장 큰 자리의 정수(integer)를 반환한다.
number - 수를 갖는 문자열을 인자로 입력받아 숫자로 바꾸어 준다.
round - 소수점의 자리를 없애준다.
sum - 엘리먼트의 값을 모두 찾아 더한다.

* XPath 부울형 함수
boolean - 인자를 Boolean으로 변환시킨다.
false - false를 반환한다.
not - 인자가 true이면 false를, false면 true를 반환한다.
true - true를 반환한다.

/책목록/책[1]
- 최상위 엘리먼트 <책목록>의 <책> 엘리먼트 중 첫번째 자식 엘리먼트가 선택된다.

/책목록/책[last()]
- 최상위 엘리먼트 <책목록>의 <책> 엘리먼트 중 마지막 자식 엘리먼트가 선택된다.

/책목록/책[가격>10000]/가격
- <책목록>의 <책> 엘리먼트 중 가격이 10000보다 큰 가격 엘리먼트가 선택된다.


다중 Path를 이용하여 선택하기

연산자 "|"를 이용하여 여러개의 Path 중 하나를 선택하여 사용할 할 수 있다.
"|" 표현문자는 여러 상황에 따라 필요한 값을 미리 설정해 놓는다.
주로 <xsl:if>와 함께 쓰여 조건에 부합하면 앞의 것을 부합하지 않으면 뒤의 것을 선택한다.

/책목록/책/제목 | /책목록/책/저자
//저자 | //가격



속성 선택하기

속성을 선택하기 위해서는 선택하고자 하는 속성 이름 앞에 Lcation path 표현식 중에 "Attribute::"의 단축 표현식인 "@"를 붙여준다.

- 문서 전체에서 이름이 country 인 속성을 모두 선택한다.

//책[@country]
- 문서 전체에서 속성 이름이 country를 가지는 모든 <책> 엘리먼트를 선택한다.

//책[@country='한국']
- 문서 전체에서 속성 이름이 '한국'인 <책> 엘리먼트를 선택한다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

XPath

W3C/XML 2006. 12. 12. 18:32
XPath

  • XML 엘리먼트의 경로를 설정하는데 사용되고, 주로 XSLT의 문서 변환에 사용된다.
  • 많은 표준 함수 라이브러리 형태로 제공한다.
  • XML 문법을 따르지 않는다.
  • XPath 표현식은 노드 집합(node-set), 문자열(string), 숫자형(number), 부울형(boolean) 타입으로 구분하여 사용자에게 원하는 결과를 알려준다.
  • XPath 표현식은 Location path 표현식을 기본으로 한다.

Location path

XML 문서의 어떤 노드에 대해서 절대경로와 상대경로의 위치에 존재하는 노드들을 선택할 수 있게 한다. 계산된 최종 결과는 선택된 노드들의 집합(node-set)이 된다.

axisname::nodetest[predicate]

- axisname : 어떤 노드를 검색하고자 하는 키가 되는 Location path 이름
- nodetest : 검색하고자 하는 노드
- predicate : 조건식

child::가격[가격>10000]

- 자식 엘리먼트 중에 10000보다 큰 가격을 갖는 <가격>엘리먼트를 선택한다.


Location path 표현식 (axisname)

ancestor - 현재 노드의 모든 부모 노드들을 가져온다.
ancestor-or-self - 모든 부모노드에 현재 노드를 포함하여 가져온다.
attribute - 현재 노드의 모든 속성을 가져온다.
child - 현재 노드의 모든 자식노드를 가져온다.
descendant - 현재 노드의 모든 자식노드를 가져온다.
descendant-or-self - 모든 자식노드에 현재 노드를 포함하여 가져온다.
following-sibling - 현재 노드 다음에 있는 모든 형재노드를 가져온다.
namespace - 현재 노드의 모든 네임스페이스 노드들을 가져온다.
parent - 현재 노드의 부모노드를 가져온다.
preceding-sibling - 현재 노드 전에 있는 모든 형제노드를 가져온다.
self - 현재 노드를 가져온다.


Location path 표현식의 단축 표현식

@ - attribute::
. - self::node()
.. - parent::node()
// - /descendant-or-self::node()
/ - Document Root


"/" 이용하여 노드 지정하기

"/"와 "//"은 XSLT에서 변환하고자 하는 XML 문서의 노드를 지정할 때 사용한다.
"/"는 문서의 루트(root)노드로서 가상 문서노드라고도 한다.
문서 루트노드는 최상위 엘리먼트보다 상위에 위치해 있다.

/책목록
- 최상위 엘리먼트인 <책목록> 엘리먼트가 선택된다.

/책목록/책/가격
- <책목록>의 하위에 있는 <책>엘리먼트 중에서 <가격>이라는 모든 엘리먼트를 선택한다.


"//" 이용하여 노드 지정하기

"//"는 경로와 상관없이 지정된 노드를 검색할 때 사용한다.
따라서 XML 문서 안에서 찾고자 하는 엘리먼트 이름과 동일한 이름의 엘리먼트를 모두 가져오게 된다.

//책
- XML 문서 안에 있는 모든 <책> 엘리먼트를 가져온다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

XSLT

W3C/XML 2006. 12. 12. 18:20
XML 문서에 XSL 스타일 적용

@ book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<책목록>
  <책>
       <제목>vb와 asp를 이용한 XML 프로그래밍</제목>
       <저자>Mark Wilson, Tracey wilson</저자>
       <국가>USA</국가>
       <출판사>이한 출판사</출판사>
       <가격>18,000</가격>
       <출판년도>1998</출판년도>
  </책>
  <책>
       <제목>인터넷 마크업 언어(XML)</제목>
       <저자>정회경</저자>
       <국가>한국</국가>
       <출판사>배재 출판사</출판사>
       <가격>5,000</가격>
       <출판년도>2000</출판년도>
  </책>
  <책>
       <제목>XML by Example</제목>
       <저자>Benoit Marchal</저자>
       <국가>미국</국가>
       <출판사>이한 디지털리</출판사>
       <가격>25,000</가격>
       <출판년도>2001</출판년도>
  </책>
  <책>
       <제목>비주얼 베이직</제목>
       <저자>홍길동</저자>
       <국가>한국</국가>
       <출판사>대림 출판사</출판사>
       <가격>28,000</가격>
       <출판년도>2000</출판년도>
  </책>
</책목록>

XSL을 적용하고 HTML 문서로 변환하여 브라우저로 보여주기 위해 HTML 태그를 사용

@ book.xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
  <html>
  <body>
       <h2>나의 컴퓨터 서적 목록</h2>
       <table border="1">
       <tr bgcolor="#9acd32">
       <th align="left">제목</th>
       <th align="left">저자</th>
       </tr>
  <xsl:for-each select="책목록/책">
       <tr>
       <td><xsl:value-of select="제목"/></td>
       <td><xsl:value-of select="저자"/></td>
       </tr>
  </xsl:for-each>
       </table>
  </body>
  </html>
  </xsl:template>
</xsl:stylesheet>

  • <xsl:template match="/">
    XSL 문서에 있는 template는 스타일을 적용하고자 하는 노드를 가리킬 때 사용한다. match 속성에 지정한 노드를 만나면 템플릿을 적용하라는 뜻이다. 즉, 최상위 엘리먼트(/)를 만나면 템플릿을 적용하라는 의미를 갖는 엘리먼트이다.

  • <xsl:for-each select="element">
    select 속성을 통해 찾고자하는 XML 문서의 엘리먼트를 반복하면서 모두 가져온다. 즉, 책목록의 하위 엘리먼트인 <책>이라는 이름을 가진 엘리먼트를 모두 가져온다.

  • <xsl:value-of select="element">
    select 속성을 통해 선택된 엘리먼트 내용의 값을 XPath 표현식으로 가져온다. XPath 표현식을 사용하여, <책>엘리먼트 중 저자가 "정회경"인 <책>엘리먼트를 가져올 때는 select="책목록/책[저자='정회경']" 과 같이 할 수 있다.
- 이 밖에도 몇가지 XSL 문법이 더 있다.

  • <xsl:sort select="저자" />
    sort는 변환된 데이터를 정렬할 때 사용하고, <xsl:for-each> 바로 밑에 위치한다. 한글과 영어가 혼합된 데이터에서는 한글 다음에 영어가 정렬된다.

  • <xsl:if>
    if는 주로 XML 문서의 데이터를 조건에 따라 만족하는 값으로 추출할 때 사용된다.
    <xsl:if test="가격&gt;'10000'">
      문장...
      문장...
    </xsl:if>

    - 가격이 10,000원 이상일 때 다음 문장을 수행하라는 뜻이다.

  • <xsl:choose>
    C 언어에서의 switch...case문처럼 어떤 특정한 조건이 맞을 때 그 맞는 조건에 대한 값을 선택할 때 사용한다. <xsl:choose>는 <xsl:when>과 <xsl:otherwise>와 함께 사용한다.
    <xsl:choose>
      <xsl:when test="가격&gt;'10000'">
          문장 수행...
      </xsl:when>
      <xsl:otherwise>
          문장 수행...
      </xsl:otherwise>
    </xsl:choose>

    - 가격이 10,000원 보다 크면 <xsl:when> 이하의 문장 수행, 그렇지 않은 경우에는 <xsl:otherwise> 이하의 문장 수행

  • <xsl:apply-templates>
    XML 문서의 엘리먼트에 대해서 개별적인 스타일을 지정하는 template를 구성하여 적용할 수 있도록 한다. 즉, 특정한 그룹을 묶어 따로 스타일을 적용한다.

* XSL 문서를 작성했으면 XML 문서의 선언부 바로 밑에 XSL 정보를 삽입한다.
<?xml-stylesheet type="text/xsl" href="book.xsl"?>


View XSL Output

XSL 문서가 XML 문서에 적용되어 소스도 HTML로 보여져야 하지만 MSXML 파서가 XSLT를 완벽하게 지원하지 않으므로 XML 소스를 그대로 보여준다.

하지만 DTD 유효성 검사를 위한 유틸리티를 설치했던 "maxmlvw.inf"가 XSLT를 통해 변환된 HTML 코드를 볼 수 있도록 해주는 역할을 한다.

XML 문서에서 오른쪽 마우스 버튼을 클릭하여 [View XSL Output] 항목을 클릭하면 XSL과 XML 문서를 이용하여 XSLT 변환기에 의해 생성된 HTML 소스를 볼 수 있다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

XSL

W3C/XML 2006. 12. 12. 18:06
XSL (eXtensible Stylesheet Language)

XSL은 문서의 스타일을 포현하는 XML 포맷팅 언어이다.
XML 문서에 적절한 XSL 문서를 적용하면 HTML처럼 화려한 XML 문서를 만들 수 있다.

  • XSLT (XSL-Transformation Language)
    XSL에 포함되어 기존의 XML 문서를 주로 XML, HTML과 같은 다른 포맷의 문서나 다른 XML 문서로 변환하고자 할 때 사용한다. XSL 문서는 XSLT 처리기를 거쳐 다양한 형태의 문서로 변환된다.


  • XPath (XML Path Language)
    XSLT를 통해 문서 변환할 때 사용되는 경로설정을 위한 표현식으로 XML 문서를 트리 형태로 관리하고 지정된 노드를 검색하는 기능을 한다.


  • XSL-FO (XSL-Formatting Object)
    FO의 한 종류로, 사용법은 복잡하지만 정교하게 스타일을 지정해야 하는 출판이나 XML 문서를 모든 출판매체로 출력하는 경우에 매우 유용하다. XSL-FO는 독자적으로 사용할 수 없기 때문에 사용자에 의해 만들어진 XSL Formatter를 거쳐 실제 결과를 얻는 동작 방식을 취해야 한다.

XSL 문서 생성

1: <?xml version="1.0" encoding="UTF-8">
2: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   ...
   </xsl:stylesheet>

  1. XSL도 XML 문법 규칙을 따라 작성되므로 XML 선언부를 꼭 기록한다.
  2. XSL 문서의 최상위 엘리먼트를 나타내는 XSL 네임스페이스를 포함한 <xsl:stylesheet>를 선언한다.
@ XSLT 사용
1: <?xml version="1.0" encoding="UTF-8">
2: <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   ...
   </xsl:transform>

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Schema DataType

W3C/XML 2006. 12. 11. 22:59
데이터타입 (DataType)

스키마에서는 문자, 디코딩된 바이너리, 숫자, 날짜/시간 데이터타입등 다양한 데이터타입을 제공한다.

1. string 형 데이터타입
string: 길이가 유한한 문자열을 나타낸다.
anyURI: 표준 인터넷 URI를 나타낸다.
NOTATION: 외부 비XML 데이터의 링크를 선언할 때 사용된다.
QName: 2개의 NCname의 연결된 형태를 나타낼 때 사용한다.

2. encoded binary 데이터타입
boolean: true와 false 중 하나의 값을 갖는다.
hexBinary: 16진수의 이진 데이터를 인코딩할 때 사용한다.
base64Binary: 이진 데이터의 base64 인코딩시 사용한다.

3. 숫자형 데이터타입
decimal: 십진수를 나타낼 때 사용된다.
float: 32비트의 부동 소수점을 갖는 수를 나타낼 때 사용된다.
double: 64비트의 부동 소수점을 갖는 수를 나타낼 때 사용된다.

4. 날짜/시간 데이터타입
duration: 아주 긴 시간을 표현할 때 사용된다.
dateTime: 그래고리언 시간 표기법에 의해 시간을 표현할 때 사용된다.
date: 그래고리언 시간 표기법 중에 날짜 표기를 나타낸다.
time: 시간을 표현할 때 사용한다.
gYearMonth: 년도와 월을 표현할 때 사용한다.
gYear: 년도만 표현할 때 사용한다.
gMonthDay: 월과 날짜를 표현할 때 사용한다.
gMonth: 월만 표현할 때 사용한다.
gDay: 날짜만 표현할 때 사용한다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,