質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

XSD

XSDは一般的に、XMLドキュメントの特定のタイプの表現を含んだ、W3C XML Schemaフォーマットで書かれたドキュメントを指します。

Q&A

0回答

2077閲覧

Javaでxsdの読み込みに失敗する

irohamaru

総合スコア15

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

XSD

XSDは一般的に、XMLドキュメントの特定のタイプの表現を含んだ、W3C XML Schemaフォーマットで書かれたドキュメントを指します。

0グッド

0クリップ

投稿2017/10/28 14:22

編集2022/01/12 10:55

###前提・実現したいこと
Javaで、e-Tax連携するためのXMLを出力する機能を作っています。
XMLの妥当性検証のため、検証で使うスキーマ文書を読み込みたいと思っています。

ところが、xsdの読み込みに失敗とのエラーが出ており、解決策が見つからない状況です。
どうやら、以下ソースコード中のXXXXX.xsdの読み込みはOKなのですが、その中でimportされているYYYYY.xsd,ZZZZZ.xsdの読み込みに失敗しているようです。

YYYYY.xsd,ZZZZZ.xsdの読み込みが正常に行われるためにはどうしたらよいでしょうか?

###発生している問題・エラーメッセージ
妥当性検証で以下のエラーが出力されてしまいます。
ただし、Exceptionが発生しているわけではなく、XML出力はできていますが妥当なXML文書ではないと思われます。

schema_reference.4: 1)ドキュメントが見つからなかった、2)ドキュメントを読み取れなかった、3)ドキュメントのルート要素が<xsd:schema>ではなかったため、スキーマ・ドキュメント'../general/YYYYY.xsd'の読取りに失敗しました。 schema_reference.4: 1)ドキュメントが見つからなかった、2)ドキュメントを読み取れなかった、3)ドキュメントのルート要素が<xsd:schema>ではなかったため、スキーマ・ドキュメント'../general/ZZZZZ.xsd'の読取りに失敗しました。

###該当のソースコード
以下サイトを参考にしてスキーマ検証のメソッドを実装しています。

XMLスキーマ検証の方法

java

1/** 2 * スキーマ検証 3 */ 4private Document schemaValidate(String xmlStr) { 5 6 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 7 8 try { 9 // XML Schemaによる妥当性検証を有効にする。 10 docFactory.setValidating(true); 11 // ネームスペースの認識を有効にする。 12 docFactory.setNamespaceAware(true); 13 14 // XML Schemaの仕様に従って検証を行うことを示す値,"http://www.w3.org/2001/XMLSchema"を設定する。 15 docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", XMLConstants.W3C_XML_SCHEMA_NS_URI); 16 // 検証に使うスキーマ文書を指定する。 17 docFactory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", new File("/XXXXX.xsd")); 18 19 // DocumentBuilder インスタンスの生成 20 DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 21 // スキーマ検証エラー発生時のエラーハンドラ 22 docBuilder.setErrorHandler(new MySaxErrorHandler()); 23 24 // 妥当性検証を実行し、Documetオブジエンドに変換する。 25 Document doc = docBuilder.parse(new InputSource(new StringReader(xmlStr))); 26 27 return doc; 28 29 } catch (ParserConfigurationException | SAXException | IOException e) { 30 throw new RuntimeException(e); 31 }

###補足情報
以下xsdのimport部分のxsdの読み込みに失敗しています。

XXXXX.xsd

<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema targetNamespace="http://xml.e-tax.nta.go.jp/XSD/kyotsu" xmlns="http://xml.e-tax.nta.go.jp/XSD/kyotsu" xmlns:gen="http://xml.e-tax.nta.go.jp/XSD/general" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" > <xsd:annotation> <xsd:documentation> XXXXXXXXXXXXXXXXXXXXXXXX version:1.0 Date:YYYY年MM月DD日 </xsd:documentation> </xsd:annotation> <!-- import --> <xsd:import namespace="http://xml.e-tax.nta.go.jp/XSD/general" schemaLocation="../general/YYYYY.xsd"/> <xsd:import namespace="http://xml.e-tax.nta.go.jp/XSD/general" schemaLocation="../general/ZZZZZ.xsd"/> (以下略)

YYYYY.xsd

<?xml version="1.0" encoding="utf-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2000/09/xmldsig#" version="1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"> <simpleType name="CryptoBinary"> <restriction base="base64Binary"> </restriction> </simpleType> <element name="Signature" type="ds:SignatureType"/> <complexType name="SignatureType"> <sequence> <element ref="ds:SignedInfo"/> <element ref="ds:SignatureValue"/> <element ref="ds:KeyInfo" minOccurs="0"/> <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="Id" type="ID" use="required"/> </complexType> (以下略)

ZZZZZ.xsd

<?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="http://xml.e-tax.nta.go.jp/XSD/general" xmlns="http://xml.e-tax.nta.go.jp/XSD/general" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"> <xsd:annotation> <xsd:documentation> 共通ボキャブラリ version:β2.1 Date:2017年01月13日 </xsd:documentation> </xsd:annotation> <!-- Include --> <xsd:include schemaLocation="../general/zeimusho.xsd" /> <xsd:include schemaLocation="../general/zeimoku.xsd" /> <xsd:include schemaLocation="../general/ITreference.xsd" /> <!--General--> <xsd:attributeGroup name="FormAttribute"> <xsd:attribute name="page" type="xsd:positiveInteger"/> <xsd:attribute name="softNM" type="xsd:string" use="required"/> <xsd:attribute name="sakuseiNM" type="xsd:string" use="required"/> <xsd:attribute name="sakuseiDay" type="xsd:date" use="required"/> <xsd:attribute name="id" type="xsd:ID"/> </xsd:attributeGroup> (以下略)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

geo

2020/12/10 01:35

パスにマルチバイト文字が含まれていると、同じエラーが出力されたことがあります。なぜそうなるのかはわからないのですが、もしパスにマルチバイトが含まれている場合は、パスにマルチバイト文字が含まれない箇所に置けば、解決するかもしれないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問