XSLT

XSLT
XSLT
패러다임선언적
개발자월드와이드웹컨소시엄(W3C)
처음 등장한1998
안정된 릴리스
3.0 / 2017년 6월 8일, 5년 전(2017-06-08)
파일 이름 확장자.xslt
웹 사이트www.w3.org/TR/xslt-30/
주요 구현
libxslt, 색슨, 잘란
영향을 받다
DSSL

다른 XMLdocuments,[1]또는 HTML과 같은 웹 페이지에 다른 형식, 일반 텍스트 또는 외형 정보 언어 형식 지정 형식 지정 목표,는 그 후에 PDF, PostScript, PNG.[2]XSL변환 1.0은 현대적인 웹 탐색입니다 같은 다른 형식으로 변환될 수 있에 XML문서 위하XSL변환(확장성 Stylesheet 언어 Transformations)가 국어입니다.rs.[3]

기존 문서는 변경되지 않고 기존 [4]문서의 내용을 기반으로 새 문서가 작성됩니다.일반적으로 입력 문서는 XML 파일이지만 프로세서가 XQueryXPath 데이터 모델을 구축할 수 있는 관계형 데이터베이스 테이블이나 지리적 정보 시스템 [1]등 무엇이든 사용할 수 있습니다.

XSLT는 XML 변환을 위한 특수 목적 언어로 설계되었지만, 이 언어는 튜링 완전하므로 이론적으로 임의 [5]연산이 가능합니다.

역사

XSLT는 기능 [6]언어와 SNOBOL 및 AWK같은 텍스트 기반 패턴 매칭 언어에 의해 영향을 받습니다.가장 직접적인 이전 버전은 DSSL로, [7]XSLT가 XML에 대해 수행하는 것과 마찬가지로 SGML에 대해서도 수행되었습니다.

  • XSLT 1.0: XSLT는 World Wide Web Consortium(W3C)의 1998~1999년 eXtensible Stylesheet Language(XSL) 개발 작업의 일부로서 XSL-FOXPath도 제작했습니다.편집자인 James Clark를 포함한 XSLT를 개발한 표준 위원회의 일부 구성원은 이전에 DSSL에 대해 작업한 적이 있습니다. XSLT 1.0은 1999년 [8]11월에 W3C 권고로 발표되었습니다.XSLT 1.0은[9] 오래된 버전이지만 웹 브라우저나 LAMP와 같은 환경에서 기본적으로 지원되지 않기 때문에 2018년 현재도 널리 사용되고 있습니다.
  • XSLT 2.0:[10] 2001년에 버전 1.1을 작성하려고 했으나 실패한 후 XSL 작업 그룹은 XQuery 작업 그룹과 협력하여 XML 스키마에 기반한 보다 풍부한 데이터 모델과 유형 시스템을 사용하여 XPath 2.0을 작성했습니다.[11]이를 바탕으로 2007년 [13]1월에 추천된 XSLT [12]2.0이 Michael Kay 편집자의 주도로 개발되었습니다.XSLT 2.0의 가장 중요한 혁신은 다음과 같습니다.
    • 정규 표현을 사용한 문자열 조작
    • 날짜, 시간, 기간을 조작하는 기능 및 연산자
    • 여러 출력 문서
    • 그룹화(평면 입력 시퀀스에서 계층 구조 생성)
    • 보다 풍부한 타입의 시스템과 강력한 타입 체크
  • XSLT 3.0:는 2017년 6월 8일에 W3C 권장 사항이 되었습니다.주요 신기능은 다음과 같습니다.[14]
    • 스트리밍 변환: 이전 버전에서는 입력 문서 전체를 [15]메모리로 읽어야 처리할 수 있었습니다.또한 처리가 완료될 때까지 출력을 쓸 수 없었습니다.XSLT 3.0에서는 XML 스트리밍을 사용할 수 있기 때문에 너무 큰 문서를 메모리에 저장할 수 없거나 변환이 XML 파이프라인에 연결되어 있을 때 유용합니다.
    • 패키지: 대형 스타일시트의 모듈성을 개선합니다.
    • 예를 들어 xsl:try 명령을 사용하여 동적 오류 처리가 향상되었습니다.
    • 지도 및 어레이 지원.XSLT는 XML뿐만 아니라 JSON도 처리할 수 있습니다.
    • 함수는 이제 다른(고차) 함수에 대한 인수가 될 수 있습니다.

설계 및 가공 모델

eXtensible Stylesheet Language Transformations의 기본 요소와 프로세스 흐름에 대한 다이어그램입니다.

XSLT 프로세서는 하나 이상의 XML 원본 문서와 하나 이상의 XSLT 스타일시트를 가져와서 출력 문서를 생성하도록 처리합니다.C와 같이 널리 구현된 명령형 프로그래밍 언어와는 대조적으로 XSLT는 [16]선언형입니다.기본적인 처리 패러다임은 패턴 [17]매칭입니다.템플릿 규칙은 스테이트풀 환경에서 실행하는 액션의 필수 시퀀스를 나열하는 것이 아니라 프로세서가 우연히 XPath 패턴과 일치하는 노드를 처리하는 방법만을 정의합니다.템플릿의 내용은 평가된 노드를 직접 나타내는 함수식효과적으로 구성합니다.폼: 결과 트리.프로세서 출력의 기초가 됩니다.

일반적인 프로세서는 다음과 같이 동작합니다.우선 스타일시트가 이미 읽혀져 준비되었다고 가정하면 프로세서는 입력 XML 문서에서 소스 트리를 구축한다.그런 다음 소스 트리의 루트 노드를 처리하고 스타일시트에서 해당 노드에 가장 적합한 템플릿을 찾아 템플릿의 내용을 평가합니다.일반적으로 각 템플릿의 명령어는 결과 트리에 노드를 작성하거나 루트 노드와 같은 방법으로 소스 트리에 노드를 더 많이 처리하도록 프로세서에 지시합니다.마지막으로 결과 트리는 XML 또는 HTML 텍스트로 시리얼화됩니다.

XPath

XSLT는 XPath를 사용하여 소스 문서 트리의 서브셋을 식별하고 계산을 수행합니다.XPath는 또한 다양한 기능을 제공하며 XSLT 자체에서 기능이 더욱 강화됩니다.

XSLT 1.0은 XPath 1.0을 사용하고 XSLT 2.0은 XPath 2.0을 사용합니다.XSLT 3.0은 XPath 3.0 또는 3.1 중 하나로 동작합니다.1.0 및 2.0의 경우 XSLT 및 XPath 사양이 같은 날짜에 공개되었습니다.그러나 3.0에서는 더 이상 동기화되지 않았습니다. XPath 3.0은 2014년 4월에 권장 사항이 되었고, 2017년 2월에 XPath 3.1이 이어졌으며, XSLT 3.0은 2017년 6월에 권장 사항이 되었습니다.

XQuery 비교

XSLT 기능은 XQuery의 기능과 중복됩니다.XQuery는 처음에는 XML 문서의 대규모 컬렉션에 대한 쿼리 언어로 간주되었습니다.

XSLT 2.0 및 XQuery 1.0 표준은 W3C 내의 개별 작업 그룹에 의해 개발되었으며, 적절한 경우 공통 접근 방식을 보장하기 위해 함께 작업합니다.이들은 동일한 데이터 모델, 유형 시스템 및 함수 라이브러리를 공유하며 둘 다 하위 언어로 XPath 2.0을 포함합니다.

그러나 이 두 언어는 다른 전통에 뿌리를 두고 있으며 다른 공동체의 요구를 충족시킨다.XSLT는 주로 화면, (웹 템플릿 언어) 또는 종이에 인간 독자를 위한 XML을 렌더링하는 것이 주된 목표인 스타일시트 언어로 생각되었습니다.XQuery는 주로 SQL의 전통에서 데이터베이스 쿼리 언어로 생각되었습니다.

두 언어는 서로 다른 커뮤니티에서 유래하기 때문에 XSLT는 보다 유연한 구조를 가진 서술형 문서를 다루는 데 있어 더욱 강력하며, XQuery는 관계형 [18]결합을 수행하는 등 데이터 처리에서 더 강력합니다.

미디어 타입

<output>요소는 선택적으로 속성을 취할 수 있습니다.media-type그러면 결과 출력의 미디어 유형(또는 MIME 유형)을 설정할 수 있습니다.다음은 예를 제시하겠습니다.<xsl:output output="xml" media-type="application/xml"/>XSLT 1.0 권장사항에서는 보다 일반적인 Atribute Type을 권장합니다.text/xml그리고.application/xml오랫동안 XSLT에 등록된 미디어 유형이 없었기 때문입니다.이 기간 동안.text/xsl사실상의 기준이 되었습니다.XSLT 1.0 에서는, 다음의 순서에 대해서는 지정되어 있지 않습니다.media-type값을 사용해야 합니다.

XSLT 2.0 릴리스에서 W3C는 MIME 미디어 유형의 등록을 권장했습니다.application/xslt+xml[19] 나중에 인터넷 번호 할당 [20]기관에 등록되었습니다.

1.0 이전 XSLT 작업 초안 사용text/xsl이 유형은 인터넷 익스플로러와[21] MSXML에서 마이크로소프트에 의해 구현되어 계속 홍보되고 있습니다.xml-stylesheet다른 브라우저에 의한 처리 명령.따라서 실제로 이 처리 명령을 사용하여 브라우저의 변환을 제어하려는 사용자는 이 미등록 미디어 [22]유형을 사용해야 합니다.

이러한 예에서는, 다음의 착신 XML 문서를 사용합니다.

<?xml version="1.0" ?> <persons> <person username="JS1"> <이름>John </name> <family-name> </family-name> </person> <person username="MI1"> <name> Morka </name> <가족명>Ismincius </family-name> </person> </person>

예 1(XML에서XML로 변환)

이 XSLT 스타일시트에서는 XML 문서를 변환하기 위한 템플릿을 제공합니다.

<?xml version="1.0" encoding="UTF-8"?> <xsl: 스타일시트 xmlns: xsl="http://www.w3.org/1999/XSL/Transform" 버전="1.0">   <xsl: 출력 방법="xml" 들여쓰기="네"/>    <xsl: 개요 일치="/사람">     <root>       <xsl: sysl-module 선택='사람'/>     </root>   </xsl: 삭제>    <xsl: 개요 일치='사람'>     <이름> username="{@filename}">       <xsl: 값 선택="이름 />     </name>   </xsl: 삭제>  </xsl: 스타일시트> 

평가 결과 다음과 같은 구조를 가진 새로운 XML 문서가 생성됩니다.

<?xml version="1.0" encoding="UTF-8"?> <root> <name username="JS1"> John </name> <name username="MI1"> Morka </name> </root>

예 2(XML을 XHTML로 변환)

다음 예제 XSLT 파일 처리

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> <xl:output method="xml" ind="yes" encoding="UTF-8"/> <xsl:param match="/persons"> <bead> <bead> <bead>시험 XMLExample<, /title>,<>/head>,<>body>,<>h1&gt을 말한다.Persons<, /h1>,<>ul>,<>xsl:apply-templates select="사람">,>xsl:종류 select="family-name"/>,<>/xsl:apply-templates>,<>/ul>,<>/body>,<>/html>,<>/xsl:template>, <, xsl:템플릿 match="사람">,<>li>,<>xsl:value-of select="family-name"/>,>xsl:text>,<>/xsl:text>,<>xsl:value-of sele.ct="이름"/>,<>/li>,<>/xsl:template>,<>/xsl: 스타일시트>

위의 XML 입력 파일을 사용하면 다음과 같은 XHTML이 생성됩니다(여기에서 공백은 명확성을 위해 조정되었습니다).

<?xml version="1.0" encoding="UTF-8"?> <backup xmlns="http://www.w3.org/1999/xhtml"> <head> <backup>XML 테스트 예 </title> </head> <h1> </h1> <ul> <li> Ismincius, Morka </li> </li> </l> </body> </html>

이 XHTML은 웹 브라우저에서 렌더링될 때 다음과 같은 출력을 생성합니다.

XML 입력 파일 및 XSLT 변환에서 생성된 XHTML 렌더링.

웹 브라우저가 표시되는 XML 문서에 XSL 변환을 적용하기 위해 XML 스타일시트 처리 명령을 XML에 삽입할 수 있습니다. 따라서 예를 들어 위의 예 2의 스타일시트가 "example 2.xl"로 사용 가능한 경우 다음 명령을 원래 [23]수신 XML에 추가할 수 있습니다.

<?xml-stylesheet href="type2.xsl" type="text/xsl" ?> 

이 예에서는,text/xslW3C 사양에[23] 따라 기술적으로 올바르지 않습니다(유형은application/xslt+xml2009년 현재 브라우저 전체에서 널리 지원되는 유일한 미디어 유형이며 2021년에도 상황은 변하지 않습니다.

프로세서의 실장

  • Altova의 RaptorXML은 XMLSpy 개발 툴킷에서 사용 가능한 XSLT 3.0 프로세서이며 REST 인터페이스를 사용하여 호출되는 독립 서버 구현입니다.
  • IBM은 특수 목적 하드웨어 어플라이언스에 내장된 XSLT 프로세싱을 Datapower 브랜드로 제공합니다.
  • libxsltMIT 라이선스에 따라 출시된 프리 라이브러리이며 상용 응용 프로그램에서 재사용할 수 있습니다.는 libxml을 기반으로 하며 속도와 휴대성을 위해 C에서 구현됩니다.XSLT 1.0 [24]EXSLT 확장을 지원합니다.
  • Microsoft 는, 2 개의 XSLT 프로세서를 제공하고 있습니다(모두 XSLT 1.0 만).이전 프로세서 MSXML은 COM 인터페이스를 제공합니다.MSXML 4.0부터는 명령줄 유틸리티도 포함되어 있습니다.msxsl.exe.NET 런타임에는 XSLT 프로세서가 별도로 내장되어 있습니다.[36]System.Xml.Xsl도서관.
  • Saxon은 XSLT 3.0 및 XQuery 3.1 프로세서로 독립 실행형 운영 및 Java, JavaScript전용 오픈 소스전용 버전입니다.NET. 별도의 제품 Saxon-JS는 Node.js브라우저에서 XSLT 3.0 처리를 제공합니다.
  • Xalan은 Java 및 C++에서 사용할 수 있는 Apache Software Foundation의 오픈 소스 XSLT 1.0 프로세서입니다.Xalan 프로세서의 변형은 Oracle의 표준 Java 배포판에 기본 XSLT 프로세서로 포함되어 있습니다.
  • 웹 브라우저: Safari, Chrome, Firefox, Opera 및 Internet Explorer는 모두 XSLT 1.0을 지원합니다(만).브라우저는 XML 파일의 온더플라이 변환을 실행하여 브라우저 창에 변환 출력을 표시할 수 있습니다.이를 수행하려면 XML 문서에 XSL을 포함하거나 XML 문서의 XSL 명령이 포함된 파일을 참조합니다.후자는 [38]보안 모델 때문에 로컬 파일 시스템의 파일에서는 Chrome과 함께 작동하지 않을 수 있습니다.

성능

대부분의 초기 XSLT 프로세서는 인터프리터였습니다.최근에는 휴대용 중간 언어(Java 바이트 코드 또는 등)를 사용하는 코드 생성도 점차 일반화되고 있습니다.NET Common Intermediate Language)를 대상으로 합니다.그러나 해석 제품조차도 일반적으로 별도의 분석 및 실행 단계를 제공하므로 최적화된 표현 트리를 메모리에 생성하고 여러 변환을 수행하기 위해 재사용할 수 있습니다.이로 인해 동일한 변환이 여러 소스 문서에 [39]초당 여러 번 적용되는 온라인 퍼블리싱 애플리케이션에서 상당한 성능 이점을 얻을 수 있습니다.이 분리는 XSLT 처리 API(JAXP 등) 설계에 반영되어 있습니다.

초기 XSLT 프로세서는 최적화가 거의 없었습니다.스타일시트 문서는 Document Object Model로 읽혀지고 프로세서가 직접 조작합니다.XPath 엔진도 최적화되지 않았습니다.단, XSLT 프로세서는 식 트리의 정적 재쓰기(루프에서 계산을 이동하는 등)나 파이프라인 평가 등 함수형 프로그래밍 언어 및 데이터베이스 쿼리 언어에서 볼 수 있는 최적화 기술을 사용하여 중간 결과의 메모리 풋프린트를 줄입니다(또한 pr이 pr에 의해 "조기 종료"할 수 있습니다.occessor는 다음과 같은 표현을 평가할 수 있습니다.following-sibling::*[1]모든 하위 표현식에 대한 완전한 평가 없이).또한 많은 프로세서는 범용 DOM 구현보다 훨씬 효율적인(공간과 [40]시간 모두에서) 트리 표현을 사용합니다.

2014년 6월 Debbie Lockett과 Michael Kay는 XSLT 프로세서를 위한 오픈 소스 벤치마킹 프레임워크인 XT-Speedo를 [41]발표했습니다.

「 」를 참조해 주세요.

  • XSLT 요소: 일반적으로 사용되는 XSLT 구조 목록.
  • Muenchian 그룹화: XSLT1과 XSLT2+ 사이의 방언 차이.
  • eXtensible Stylesheet Language – XSLT가 속한 언어 패밀리
  • XQuery와 XSLT 비교
  • XSL 포맷 오브젝트 또는 XSL-FO – 보통 XSLT를 사용하여 소스 문서를 변환하여 생성되는 문서용 XML 기반 언어. 포맷된 출력을 작성하기 위해 사용되는 오브젝트로 구성됩니다.
  • ID 변환 – 변환 파이프라인의 XML 트리에서 데이터 요소를 추가하거나 삭제하는 필터 체인의 시작점
  • Apache Cocoon – XSLT 및 기타 변압기로 데이터를 처리하기 위한 Java 기반 프레임워크입니다.

레퍼런스

  1. ^ a b "Transformation". 2012-09-19.
  2. ^ "XML Output Method". 2012-09-19.
  3. ^ "What is XSLT Used For?". 2018-02-07.
  4. ^ "Introduction". XSL Transformations (XSLT) Version 1.0 W3C Recommendation. W3C. 16 November 1999. Retrieved November 7, 2012.
  5. ^ XSLT 버전 2.0은 튜링 완전: 순수 변환 기반 증명
  6. ^ Michael Kay. "What kind of language is XSLT?". Retrieved July 8, 2016.
  7. ^ "A Proposal for XSL". W3C. Retrieved November 7, 2012.
  8. ^ "XML and Semantic Web W3C Standards Timeline" (PDF). Archived from the original (PDF) on 2013-04-24. Retrieved 2012-02-04.
  9. ^ "XSL Transformations (XSLT)". W3.org. 1999-11-16. Retrieved 2014-07-12.
  10. ^ "XSL Transformations (XSLT) Version 1.1". W3.org. 2001-08-24. Retrieved 2014-07-12.
  11. ^ "XML Path Language (XPath) 2.0 (Second Edition)". W3.org. 2010-12-14. Retrieved 2014-07-12.
  12. ^ "XSL Transformations (XSLT) Version 2.0". W3.org. 2007-01-23. Retrieved 2014-07-12.
  13. ^ "XML and Semantic Web W3C Standards Timeline" (PDF). 2012-02-04. Archived from the original (PDF) on 2013-04-24. Retrieved 2012-02-04.
  14. ^ "What's New in XSLT 3.0?". w3. Retrieved 6 January 2014.
  15. ^ Kay, Michael. "A Streaming XSLT Processor". Balisage: The Markup Conference 2010 Proceedings. Retrieved 15 February 2012.
  16. ^ "Discover the Wonders of XSLT: XSLT Quirks". Archived from the original on 2011-07-09. Retrieved 2011-02-11. XSLT is a very specialized language with a distinct declarative flavor.
  17. ^ Kay, Michael. "What kind of language is XSLT?". IBM. Retrieved 13 November 2013.
  18. ^ "Saxonica: XSLT and XQuery". www.saxonica.com. Retrieved 2022-06-29.
  19. ^ "XSL Transformations (XSLT) Version 2.0". W3C. Retrieved 19 October 2012.
  20. ^ "Application Media Types". IANA. Retrieved 19 October 2012.
  21. ^ "XSLT Requirements for Viewing XML in a Browser". Microsoft. Retrieved 19 October 2012.
  22. ^ Kay, Michael (2008). XSLT 2.0 and XPath 2.0 Programmer's Reference. Wiley. p. 100. ISBN 978-0-470-19274-0.
  23. ^ a b "XSL Transformations (XSLT) Version 1.0: W3C Recommendation – Embedding Stylesheets". W3C. 16 November 1999. Retrieved 20 September 2016.
  24. ^ "The XSLT C library for GNOME: libxslt". Retrieved 23 November 2012.
  25. ^ "The XSLT C library for GNOME: The xsltproc tool". Retrieved 23 November 2012.
  26. ^ "xsltproc man page". Retrieved 23 November 2012.
  27. ^ "New package: libxslt". Retrieved 23 November 2012.
  28. ^ "The WebKit Open Source Project - XSLT". Retrieved 2009-10-25.
  29. ^ "The XML C parser and toolkit of Gnome: Python and bindings". Retrieved 23 November 2012.
  30. ^ "XML::LibXSLT - Interface to the GNOME libxslt library". CPAN. Retrieved 23 November 2012.
  31. ^ "libxslt-ruby". Retrieved 23 November 2012.
  32. ^ "libxml". Retrieved 23 November 2012.
  33. ^ "cl-libxml2 High-level wrapper around libxml2 and libxslt libraries".
  34. ^ "TclXML". Retrieved 21 May 2013.
  35. ^ "libxml++". sourceforge.net. Retrieved 23 November 2012.
  36. ^ "Command Line Transformation Utility (msxsl.exe)". Microsoft. Retrieved 22 October 2012.
  37. ^ "Saxon-JS". Saxonica. Retrieved 6 September 2018.
  38. ^ "Issue 58151: Fails to load xml file on local file system using XMLHttpRequest".
  39. ^ Saxon: XSLT 프로세서의 구조 - 일반적인 XSLT 프로세서의 구현과 최적화에 대한 자세한 내용을 설명하는 문서.
  40. ^ Lumley, John; Kay, Michael (June 2015). "Improving Pattern Matching Performance in XSLT". XML London 2015: 9–25. doi:10.14337/XMLLondon15.Lumley01. ISBN 978-0-9926471-2-4.
  41. ^ Kay, Michael; Lockett, Debbie (June 2014). "Benchmarking XSLT Performance". XML London 2014: 10–23. doi:10.14337/XMLLondon14.Kay01. ISBN 978-0-9926471-1-7.

추가 정보

외부 링크

문서
XSLT 코드 라이브러리
  • EXSLT는 XSLT에 확장을 제공하기 위한 광범위한 커뮤니티 이니셔티브입니다.
  • FXSL은 XSLT에서 고차 함수를 지원하는 라이브러리입니다.FXSL은 XSLT 자체에서 작성됩니다.
  • XSLT Standard Library xsltsl은 XSLT 개발자에게 일반적으로 사용되는 기능용 XSLT 템플릿 세트를 제공합니다.이것들은 XSLT만으로 실장되어 있습니다.즉, 확장 기능을 사용하지 않습니다.xsltsl은 SourceForge 프로젝트입니다.
  • Kernow : 변환을 실행하기 위한 포인트 앤 클릭 인터페이스를 제공하는 색슨용 GUI.
  • xslt.js 브라우저에서 XML을 XSLT로 변환하는 XSLT JavaScript 라이브러리를 사용하여 XML을 변환합니다.