Remark : XML 과 MSXML
XML(Extensible Markup Language)은 웹에서 데이터를 사용하기 위한 범용 언어입니다. XML을 통하여 개발자는 매우 다양한 응용 프로그램으로부터 구조화된 데이터를 로컬 컴퓨팅 및 프레젠테이션을 위해 데스크톱으로 전달할 수 있습니다. XML을 사용하여 특정 응용 프로그램에 대한 독특한 데이터 형식을 만들 수 있습니다. 또한 XML은 서버 간에 구조화된 데이터의 전송을 위한 이상적인 형식입니다.
MSXML은 핵심 XML 서비스를 제공하는 Microsoft 소프트웨어 구성 요소입니다.
Microsoft XML Parser
Microsoft의 핵심 XML 서비스의 최근 버전은 다음 네 가지의 뚜렷한 기능을 제공합니다.
- DOM(Document Object Model) 기반 파서 – 텍스트 스트림(파일, 프로그램의 문자열 또는 XML로 변환할 수 있는 기타 모든 텍스트)을 취하여 이를 체계적으로 조작할 수 있는 탐색 가능 XML 트리 구조로 변환합니다.
- SAX(XML에 대한 단순 API) 파서 – 대형 문서의 처리 및 높은 처리량 시나리오에 대해 최적화되어 있습니다. SAX는 문서를 읽고 파싱 이벤트(요소의 시작과 끝과 같은)를 응용 프로그램에 직접 보고하는 이벤트 기반 파서입니다. 작성한 응용 프로그램은 처리기를 구현하여 그래픽 사용자 인터페이스(GUI)와 매우 유사하게 서로 다른 이벤트를 처리합니다.
- XSLT 프로세서 – XSLT(Extensible Stylesheet Language for Transformations) 파일을 읽고 XSLT 파일의 지침을 XML 파일에 적용하여 특정 종류의 출력을 발생시킵니다. XML 구조를 만드는 것 이외에 XSLT 프로세서는 결과적인 XSLT 필터에 특정 양의 최적화를 수행할 수 있으며 더욱 기술적으로는 컴파일러로 간주됩니다.
- 검증 파서(Validation parser) – DTD(document type definition) 또는 XML Schema를 읽고 결과적인 문서가 실제적으로 올바른 형식인지 그리고 여기에 스키마와 모순되는 데이터가 없는지 확인합니다. 스키마만의 경우 검증 스키마는 스키마 자체를 HTML 목록 상자의 옵션을 만드는 것과 같은 목적을 위해 참조할 수 있는 개체로 반환한다는 것을 참조하십시오.
위의 모든 기능은 동일한 MSXML 라이브러리 패키지에 포함되어있으며 SDN XML 개발자 센터에서 무료로 얻을 수 있습니다.
MSXML, MSXML2 및 MSXML3
여러 가지 버전의 Microsoft XML 파서가 존재한다는 것은 아마 놀라운 것이 아닐 것입니다. Internet Explorer 4.0에는 XML 파서의 초기 버전이 포함되어있으며 XSL, XML 데이터 또는 대부분의 기타 XML 기술(완전히 다른 DOM 모델을 가지고 있음)은 그 이후에 개발되었습니다. 파서의 이 초기 버전은 MSXML.dll 라이브러리에 포함되어있습니다. 사용하고 있는 파서를 MSDN XML 개발자 센터에서 더 최근의 파서로 업그레이드할 수 있습니다.
새로운 파서가 훨씬 우수하기 때문에 업그레이드를 단호히 권장합니다. Internet Explorer 5.0에는 XSL 및 XML Schema의 예비 버전이 포함되어 있는 MSXML 2.0 파서가 있습니다. MSXML2는 SQL Server 2000과 함께 판매되는 파서 버전입니다. MSXML2는 성능을 강화시킨 기능을 많이 가지고 있으며 일반적으로 향상된 성능과 확장성을 갖습니다. MSXML3은 현재 Technology Preview로 제공하고 있는 버전입니다. MSXML3은 XSLT 및 XPath 지원뿐만 아니라 SAX 인터페이스를 제공합니다.
Remark : WSDL과 MSXML
WSDL는 XML 기반의 표준 포맷으로, 웹 서비스의 인터페이스를 기술하는 문서입니다. WSDL은 웹 서비스의 기능, 사용 방법, 데이터 형식, 메시지 프로토콜 등을 명확히 정의하여, 클라이언트와 서버 간의 통신을 가능하게 만듭니다. WSDL은 주로 SOAP 기반의 웹 서비스에서 사용되며, RESTful 웹 서비스에서도 간혹 사용되기도 합니다.
WSDL의 주요 구성 요소
- Types (타입)
- 메시지에서 사용할 데이터 타입을 정의합니다. 보통 XML Schema (XSD)를 사용하여 데이터 형식을 지정합니다.
- Message (메시지)
- 웹 서비스에서 송수신되는 데이터 구조를 정의합니다. 메시지는 하나 이상의 part로 나누어져 있으며, 각 part는 특정 데이터 타입으로 정의됩니다.
- PortType (포트타입)
- 웹 서비스에서 제공하는 동작(operations)의 집합을 정의합니다. operation은 클라이언트가 웹 서비스에 요청할 수 있는 작업을 의미합니다.
- operation은 요청과 응답을 정의하는 메시지의 형식을 포함합니다.
- Binding (바인딩)
- 특정 프로토콜과 메시지 형식을 정의합니다. 예를 들어, HTTP와 SOAP를 사용할 수 있습니다.
- PortType에서 정의된 동작을 실제로 어떻게 전송할지에 대한 구체적인 방법을 설정합니다.
- Service (서비스)
- 실제 웹 서비스의 위치(URL)를 정의하며, 클라이언트가 이 URL을 통해 서비스에 접근할 수 있습니다.
WSDL 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<definitions> <types> <!-- 데이터 타입을 정의하는 XML Schema --> </types> <message name="GetItemRequest"> <part name="itemId" type="xsd:string"/> </message> <message name="GetItemResponse"> <part name="itemName" type="xsd:string"/> <part name="itemPrice" type="xsd:float"/> </message> <portType name="ItemServicePortType"> <operation name="GetItem"> <input message="tns:GetItemRequest"/> <output message="tns:GetItemResponse"/> </operation> </portType> <binding name="ItemServiceBinding" type="tns:ItemServicePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetItem"> <soap:operation soapAction="GetItem"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="ItemService"> <port name="ItemServicePort" binding="tns:ItemServiceBinding"> <soap:address location="http://example.com/itemservice"/> </port> </service> </definitions> |
XSD (XML Schema Definition)
XSD는 XML 문서의 구조와 데이터를 정의하는 XML 기반의 스키마 언어입니다. XSD는 XML 문서가 특정 구조, 타입, 규칙을 따르고 있는지 검증하는 데 사용됩니다. 즉, XML 문서의 유효성을 검사하는 역할을 합니다.
XSD의 주요 기능
- 데이터 타입 정의
- XSD는 기본 데이터 타입과 사용자 정의 타입을 제공합니다. 기본적으로xsd:string, xsd:integer, xsd:boolean 등의 타입이 있으며, 개발자가 이를 바탕으로 새로운 타입을 정의할 수 있습니다.
- 요소와 속성 정의
- XML 문서에 포함된 각 요소와 속성에 대한 타입, 최소/최대 발생 횟수, 길이 등의 제약 조건을 정의할 수 있습니다.
- 복합 타입 정의
- 복합 타입은 여러 요소와 속성을 포함할 수 있으며, 이로써 복잡한 데이터 구조를 정의할 수 있습니다. 예를 들어, 주소 정보를 포함하는 요소를 정의할 때, street, city, zipcode 등을 하나의 복합 타입으로 정의할 수 있습니다.
- 참조
- XSD는 다른 스키마 문서를 참조하여 재사용할 수 있는 구조를 제공합니다. 이를 통해 큰 규모의 XML 스키마를 관리할 수 있습니다.
XSD 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 단순 타입 정의 --> <xs:element name="item" type="xs:string"/> <!-- 복합 타입 정의 --> <xs:complexType name="ItemType"> <xs:sequence> <xs:element name="itemId" type="xs:string"/> <xs:element name="itemName" type="xs:string"/> <xs:element name="itemPrice" type="xs:float"/> </xs:sequence> </xs:complexType> <!-- 복합 타입을 사용하는 요소 정의 --> <xs:element name="ItemDetails" type="ItemType"/> </xs:schema> |
WSDL과 XSD의 차이점
- WSDL은 웹 서비스의 인터페이스를 기술하는 데 사용되며, 클라이언트와 서버가 상호작용할 때 어떤 데이터가 오가는지 설명합니다. WSDL은 데이터 타입 정의에 XSD를 참조합니다.
- XSD는 XML 문서의 데이터 구조를 정의하는 데 중점을 둡니다. WSDL 문서 내부에서 데이터 형식 정의 부분은 XSD를 기반으로 작성됩니다.
따라서, WSDL은 웹 서비스의 전체적인 “행동”과 구조를 설명하고, XSD는 그 내부에서 사용되는 데이터의 구조를 정의하는 역할을 합니다.