xml catalog in Eclipse
History
- 2013-01-28, initial version
- 2013-06-04, using catalogue extension point
overview
eclipse는 xml의
보통 이런 xsd 파일은 http로 공개되어져 있고 eclipse 같은 훌륭한 IDE에선 그 파일을 가져와서 xml 파일은 validation할 수 있다.
하지만 특정한 경우에 xsd를 override하고 싶은 경우가 있을 수 있다. 예를 들면
- element나 attribute의 자동완성 기능
- validation 기능
보통 이런 xsd 파일은 http로 공개되어져 있고 eclipse 같은 훌륭한 IDE에선 그 파일을 가져와서 xml 파일은 validation할 수 있다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ...위 maven xml의 경우 http://maven.apache.org/xsd/maven-4.0.0.xsd 에 xsd가 있다. 그래서 대부분의 경우 xsd가 resolve가 되면 validation이 가능하다.
하지만 특정한 경우에 xsd를 override하고 싶은 경우가 있을 수 있다. 예를 들면
- 내부 테스트 환경에서는 xsd위치가 다르다거나
- 로컬에서 xsd를 바꿔가며 테스트 해보고 싶은 경우
- 서버 이상으로 xsd에 접근을 못할 경우
xml fundamental
아래 설명을 이해하려면 최소한의 xml schema에 대한 지식이 있어야 한다.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.org/publishing" xmlns:tns="http://example.org/publishing" > <!-- type definitions --> <xsd:simpleType name="AuthorId"> <!-- define value space details here --> ... </xsd:simpleType> <xsd:complexType name="AuthorType"> <!-- define structural details here --> ... </xsd:complexType> <!-- global element/attribute declarations --> <xsd:element name="author" type="tns:AuthorType"/> <xsd:attribute name="authorId" type="tns:AuthorId"/> ... </xsd:schema>
- 위에서 xmlns:xxx는 xxx에대한 namespace정의다.
- schema 에 있는 targetNamespace 는 이 스키마의 namespace가 http://example.org/publishing 이라는 것
- xmlns:tns가 targetNamespace와 같은 것으로 한번 더 정의한 이유는 이 스키마 내부에서 특정 엘리먼트를 reference하기 위해서다. tns:AuthorType 이나 tns:AuthorId 처럼
<x:author xmlns:x="http://example.org/publishing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.org/publishing pubs.xsd" > ...
- xmlns:x 가 위 xsd에서 정의한 nampspace이고 그것을 사용하고 있다
- schemaLocation에서 <namespace> <xsd uri> pair를 한개 이상 정의할 수 있다
Defining xml catalog with dtd
Defining xml catalog with xsd
Preferences>XML>Xml Catalog 에서 xml catalog를 설정할 수 있다.
이렇게 정의한 xml catalog는 import/export도 가능하다.
<c:Catalogue xmlns:c="http://www.eclipse.org/webtools/Catalogue" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.eclipse.org/webtools/Catalogue http://www.eclipse.org/webtools/Catalogue/Catalogue.xsd "> <c:Book> <title>Professional XML Schema</title> <date>2001</date> <isbn>1-861005-47-4</isbn> <publisher>Wrox Press</publisher> </c:Book> </c:Catalogue>방법은 2가지
- by schema location
- location: XMLExamples/xsd/Catalogue.xsd
- key type : schema location
- key : http://www.eclipse.org/webtools/Catalogue/Catalogue.xsd
- by namespace name
- location: XMLExamples/xsd/Catalogue.xsd
- key type : namespace name
- key : http://www.eclipse.org/webtools/Catalogue
이렇게 정의한 xml catalog는 import/export도 가능하다.
Defining xml catalog using extension point
preference를 이용한 xml catalog는 설정은 자신의 eclipse workspace에만 적용되는 local한 것인 한계가 있다. 내가 개발한 plugin을 사용하는 사람에게 설정을 해주고 싶다면 extension point를 이용해서 설정을 하는것도 가능하다.
org.eclipse.wst feature에 있는 "org.eclipse.wst.xml.core.catalogContributions" extension point를 이용하면 된다. 예제는 org.eclipse.wst.standard.schemas plugin의 소스를 import해서 살펴보면 어떻게 정의하고 사용하였는지 알 수 있다.
ex>
point="org.eclipse.wst.xml.core.catalogContributions">
id="org.tizen.nativecpp.misc.manifest.catalog">
name="http://schemas.tizen.org/2012/12/manifest"
uri="xsd/manifest.xsd">
org.eclipse.wst feature에 있는 "org.eclipse.wst.xml.core.catalogContributions" extension point를 이용하면 된다. 예제는 org.eclipse.wst.standard.schemas plugin의 소스를 import해서 살펴보면 어떻게 정의하고 사용하였는지 알 수 있다.
ex>
uri="xsd/manifest.xsd">
reference
- http://wiki.eclipse.org/Using_the_XML_Catalog : how to add xml catalog
- http://www.eclipse.org/webtools/community/tutorials/XMLCatalog/XMLCatalogTutorial.html : tutorial
- http://help.eclipse.org/indigo/topic/org.eclipse.wst.xmleditor.doc.user/topics/txmlcat.html : eclipse xml catalog help
- http://msdn.microsoft.com/en-us/library/aa468557.aspx : xml schema explained
- https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html : xml catalog spec