電子書籍の厳選無料作品が豊富!

外部ファイルで定義した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で定義したデータ型を使っても、エラーは発生しません。

何がいけないのでしょうか。
分かる方よろしくお願いします。

A 回答 (1件)

VisualStudio 2005で試してみました。



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

この回答への補足

------- 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

補足日時:2008/05/14 20:40
    • good
    • 0
この回答へのお礼

検証して頂いてありがとうございます。
提示した例のxmlnsが間違っていて、余分な時間をとらせてしまいまってすみません。

こちらはVisualStudioの環境がなく、Javaでスキーマを読み込んでいて、問題は解決しません。
他の言語でXMLSchemaを扱ったことがないので、Javaの場合のみおかしくなるのかどうかが判断しかねますので、(結構時間かかると思うけど)他の言語でも試してみようと思います。

ちなみに、当方がJavaで試したものを捕捉のほうに書かせてもらいます。(さきほどのサンプル間違っていたので、もう一度すべて載せます。。)

お礼日時:2008/05/14 20:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!