2 * xml resources for VMD-XML
4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sourceforge.mikutoga.vmd.model.xml;
10 import java.net.MalformedURLException;
12 import java.net.URISyntaxException;
14 import javax.xml.XMLConstants;
15 import javax.xml.parsers.DocumentBuilder;
16 import javax.xml.parsers.DocumentBuilderFactory;
17 import javax.xml.parsers.ParserConfigurationException;
18 import javax.xml.validation.Schema;
19 import javax.xml.validation.SchemaFactory;
20 import jp.sourceforge.mikutoga.xml.XmlResourceResolver;
21 import org.w3c.dom.ls.LSResourceResolver;
22 import org.xml.sax.ErrorHandler;
23 import org.xml.sax.SAXException;
26 * モーションデータ用各種XMLリソースの定義。
28 public final class VmdXmlResources {
31 public static final String VER_VMDXML =
34 public static final String NS_VMDXML =
35 "http://mikutoga.sourceforge.jp/xml/ns/vmdxml/110820";
37 public static final String SCHEMAURI_VMDXML =
38 "http://mikutoga.sourceforge.jp/xml/xsd/vmdxml-110820.xsd";
39 /** ローカルなスキーマファイル名。 */
40 public static final String LOCAL_SCHEMA_VMDXML =
41 "resources/vmdxml-110820.xsd";
44 public static final URI URI_SCHEMA_VMDXML;
45 /** XMLスキーマのローカルリソース。 */
46 public static final URI RES_SCHEMA_VMDXML;
49 private static final Class<?> THISCLASS = VmdXmlResources.class;
54 URI_SCHEMA_VMDXML = URI.create(SCHEMAURI_VMDXML);
56 THISCLASS.getResource(LOCAL_SCHEMA_VMDXML).toURI();
57 }catch(URISyntaxException e){
58 throw new ExceptionInInitializerError(e);
61 new VmdXmlResources().hashCode();
68 private VmdXmlResources(){
70 assert this.getClass().equals(THISCLASS);
77 * @param handler エラーハンドラ
80 public static DocumentBuilder newBuilder(ErrorHandler handler){
81 XmlResourceResolver resolver = createResolver();
83 Schema schema = createSchema(resolver);
85 DocumentBuilderFactory builderFactory = createBuilderFactory();
86 builderFactory.setSchema(schema);
88 DocumentBuilder builder;
90 builder = builderFactory.newDocumentBuilder();
91 }catch(ParserConfigurationException e){
93 throw new AssertionError(e);
95 builder.setEntityResolver(resolver);
96 builder.setErrorHandler(handler);
102 * URI参照をローカルなリソースアクセスへとリダイレクトするリゾルバを生成する。
105 private static XmlResourceResolver createResolver(){
106 XmlResourceResolver resolver = new XmlResourceResolver();
107 resolver.putURIMap(URI_SCHEMA_VMDXML, RES_SCHEMA_VMDXML);
108 // resolver.putURIMap(URI_DTD_VMDXML, RES_DTD_VMDXML);
114 * 検証用スキーマ(XML schema)を生成する。
115 * @param resolver リゾルバ
118 private static Schema createSchema(LSResourceResolver resolver){
119 SchemaFactory schemaFactory =
120 SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
121 schemaFactory.setResourceResolver(resolver);
125 localXsd = RES_SCHEMA_VMDXML.toURL();
126 }catch(MalformedURLException e){
128 throw new AssertionError(e);
133 schema = schemaFactory.newSchema(localXsd);
134 }catch(SAXException e){
136 throw new AssertionError(e);
143 * DocumentBuilderFavtoryを生成する。
146 private static DocumentBuilderFactory createBuilderFactory(){
147 DocumentBuilderFactory builderFactory =
148 DocumentBuilderFactory.newInstance();
150 builderFactory.setNamespaceAware(true);
151 builderFactory.setValidating(false); // DTD validation off
152 builderFactory.setIgnoringComments(true);
154 builderFactory.setXIncludeAware(true);
155 }catch(UnsupportedOperationException e){
160 return builderFactory;