• 締切済み

XMLSchemaのデータ型をインポートしたい

外部ファイルで定義したXMLSchemaのデータ型をimportで取り込んで使おうとすると、エラーになってしまいます。 XMLSchemaで使用するデータ型を次のように定義しました。 ------------- datatype.xsd ---------------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema  targetNamespace="http://datatype.com"  xmlns:datatype="http://datatype.com"  xmlns="http://datatype.com"  xmlns:sd="http://www.w3.org/2001/XMLSchema" > <sd:simpleType name="html_xhtml_id">  <sd:restriction base="sd:token">   <sd:pattern value="[A-Za-z]+[A-Za-z0-9]*" />  </sd:restriction> </sd:simpleType> </sd:schema> ------------------------------------------------- そして次のようにXMLSchemaで呼び出しました。 ----------------- caller.xsd ----------------------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema  targetNamespace="http://example.com"  xmlns="http://sample.com"  xmlns:datatype="http://datatype.com"  xmlns:sd="http://www.w3.org/2001/XMLSchema" > <sd:import namespace="http://datatype.com" schemaLocation="./datatype.xsd" /> <!-- ここでエラーが発生する模様 --> <sd:element name="testElement" type="datatype:html_xhtml_id" /> </sd:schema> ----------------------------------------------------------- エラーの内容(Java): org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'datatype:html_xhtml_id' to a(n) 'type definition' component. ちなみに、datatype.xsdで定義せずにcaller.xsdで定義したデータ型を使っても、エラーは発生しません。 何がいけないのでしょうか。 分かる方よろしくお願いします。

みんなの回答

回答No.1

VisualStudio 2005で試してみました。 caller.xsdのschema要素のxmlns属性が"http://sample.com"になっているのがだめみたいで、"http://example.com"にしたらエラーがなくなりました。

ggaogg
質問者

お礼

検証して頂いてありがとうございます。 提示した例のxmlnsが間違っていて、余分な時間をとらせてしまいまってすみません。 こちらはVisualStudioの環境がなく、Javaでスキーマを読み込んでいて、問題は解決しません。 他の言語でXMLSchemaを扱ったことがないので、Javaの場合のみおかしくなるのかどうかが判断しかねますので、(結構時間かかると思うけど)他の言語でも試してみようと思います。 ちなみに、当方がJavaで試したものを捕捉のほうに書かせてもらいます。(さきほどのサンプル間違っていたので、もう一度すべて載せます。。)

ggaogg
質問者

補足

------- caller.xsd --------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema targetNamespace="http://example.com" xmlns="http://example.com" xmlns:datatype="http://datatype.com" xmlns:sd="http://www.w3.org/2001/XMLSchema"> <sd:import namespace="http://datatype.com" schemaLocation="./datatype.xsd" /> <!-- ここでエラーが発生する模様 --> <sd:element name="testElement" type="datatype:html_xhtml_id" /> </sd:schema> ------- datatype.xsd -------- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sd:schema targetNamespace="http://datatype.com" xmlns:datatype="http://datatype.com" xmlns="http://datatype.com" xmlns:sd="http://www.w3.org/2001/XMLSchema"> <sd:simpleType name="html_xhtml_id"> <sd:restriction base="sd:token"> <sd:pattern value="[A-Za-z]+[A-Za-z0-9]*" /> </sd:restriction> </sd:simpleType> </sd:schema> ----- Test.java ------ package test.schema; import java.io.InputStream; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; public class Test { public static void main(String[] args) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setSchema(getSchema()); DocumentBuilder parser = dbf.newDocumentBuilder(); } catch (Exception e) { e.printStackTrace(); } } private static Schema getSchema() throws Exception { InputStream in = Test.class.getResourceAsStream("./caller.xsd"); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(new StreamSource(in)); return schema; } } --- ディレクトリ構成(こちらの環境と曖昧な点をなくすため --- Java実行ディレクトリ  |-test   |-schema    |-Test.class    |-datatype.xsd    |-caller.xsd