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

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

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

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

JAXB

JAXB(Java Architecture for XML Binding)は、XMLをドメインオブジェクトとして動作させるためのJavaの標準仕様です。Java のオブジェクトを XML にシリアライズし、XML から Java オブジェクトにデシリアライズすることも可能です。

Java

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

XSD

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

Q&A

解決済

1回答

4914閲覧

xsd:includeによるschemaLocationの設定について

keisukestrat

総合スコア13

XML

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

JAXB

JAXB(Java Architecture for XML Binding)は、XMLをドメインオブジェクトとして動作させるためのJavaの標準仕様です。Java のオブジェクトを XML にシリアライズし、XML から Java オブジェクトにデシリアライズすることも可能です。

Java

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

XSD

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

0グッド

1クリップ

投稿2016/10/05 11:12

編集2016/10/07 04:21

###前提・実現したいこと
下記ディレクトリ構成のXSDファイル構成において
schemaLocationに手を加えずに参照先を変え、
Antからのxjc実行によるJavaのクラスファイルを生成したいと考えております。
※ファイル自体は外部からの提供ファイルのため、変更を加えない方向で検討したいと思っております。
※B.xsdのschemaLocationをディレクトリに合せた変更をすれば正常にクラスファイル生成ができることは確認しています。

[フォルダ階層] /resource ├A.xsd └hoge └B.xsd [A.xsd] <?xml version="1.0" encoding="utf-8" standalone="no"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:simpleType name="A"> ~中略~ </xsd:simpleType> <xsd:attributeGroup name="AattbuteG"> <xsd:attribute name="Afoo" type="xsd:int" /> </xsd:attributeGroup> </xsd:schema> [B.xsd] <?xml version="1.0" encoding="utf-8" standalone="no"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:include schemaLocation="A.xsd" /> <xsd:element name="BTest"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="A"> <xsd:attributeGroup ref="AattbuteG" /> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> </xsd:schema>

- イタリックテキスト
B.xsdのschemaLocationを変更することなく、
xjc実行時にA.xsdを../A.xsdに読み替える、
又は、
予めA.xsdをパスに保持しておき、B.xsdが読み込まれた際に、パスから取得するような動作
もしくは、
C.xsdを自作し、A.xsdとB.xsdの階層関係を保持して読み込ませる等
は可能でしょうか?

###発生している問題・エラーメッセージ
特に何も指定せず、B.xsdのxjc実行を行うと下記のエラーが発生します。
WARNING] schema_reference.4: Failed to read schema document 'A.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not xsd:schema.
[exec] line 2 of file:/ファイルパス/B.xsd

###該当のソースコード

<exec executable="xjc" resultproperty="xjc.result"> <arg line="-d resource"/> <arg line="-extension"/> </exec>

###試したこと
【1】
B.xsdのschemaLocationを"../A.xsd"と指定し、xjcを実行し、正常に作成ができることは確認済み。
※但し、外部ファイルのため、極力修正したくありません。
【2】
C.xsdを作成し、includeでA.xsdとB.xsdをフォルダパスを指定し、xjc実行、同様のエラーが発生しました。

###補足情報(言語/FW/ツール等のバージョンなど)

xjc -version

xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB2.1.10 in JDK 6)

java -version

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)

Eclipse Platform
Version: 3.5.2
Build id: M20100211-1343

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

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

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

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

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

tmakita

2016/10/07 04:07

B.xsdの2行目のxsd:include/@schemaLocationは、実際にはどのように書かれているのでしょか?
keisukestrat

2016/10/07 04:18

前提条件で示したとおりに、<xsd:include schemaLocation="A.xsd" />とだけ書かれています。試したこと【1】の記述が誤っておりましたので修正いたします。
tmakita

2016/10/07 05:26

カタログファイルを用意し、xjcの-catalogパラメータを使用して、"A.xsd"を実際のファイル階層のA.xsdにマッピングすれば出来るように思えます.カタログファイルについてはお使いいただいたことはございますか?
keisukestrat

2016/10/07 05:33

xjcの-catalogについて使用したことはありませんでした。カタログファイルについて調べてみます。参考例等あると幸いです。
guest

回答1

0

ベストアンサー

まだ怪しげなところはありますが、とりあえずビルドだけは通りました.

まず以下がフォルダ構成です.

イメージ説明

各ファイルは次のとおりです.

[resource/A.xsd]

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3 <xsd:element name="person"> 4 <xsd:complexType> 5 <xsd:attribute name="name" type="xsd:string"/> 6 <xsd:attribute name="age" type="xsd:int"/> 7 <xsd:attribute name="sex" type="sex"/> 8 </xsd:complexType> 9 </xsd:element> 10 <xsd:simpleType name="sex"> 11 <xsd:restriction base="xsd:string"> 12 <xsd:enumeration value="male"/> 13 <xsd:enumeration value="female"/> 14 </xsd:restriction> 15 </xsd:simpleType> 16</xsd:schema>

[reource/hoge/B.xsd]

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3 <xsd:include schemaLocation="A.xsd"/> 4 <xsd:element name="persons"> 5 <xsd:complexType> 6 <xsd:sequence> 7 <xsd:element ref="person" 8 minOccurs="0" maxOccurs="unbounded"/> 9 </xsd:sequence> 10 </xsd:complexType> 11 </xsd:element> 12</xsd:schema>

[カタログファイル(試行錯誤の上これでやっと通りました)]

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE catalog PUBLIC "-//OASIS//DTD XML Catalogs V1.1//EN" "http://www.oasis-open.org/committees/entity/release/1.1/catalog.dtd"> 3<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> 4 <!-- Replace the suffix of system IDs --> 5 <systemSuffix systemIdSuffix="A.xsd" uri="resource/A.xsd"/> 6 <systemSuffix systemIdSuffix="B.xsd" uri="resource/hoge/B.xsd"/> 7</catalog>

[サンプルインスタンス test.xml]
カタログファイルを使用すれば、Xercesによる検証はOKで通ります.

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:noNamespaceSchemaLocation="B.xsd"> 4 <person name="tmakita" age="20" sex="male"/> 5 <person name="yuko" age="18" sex="female"/> 6</persons>

[build.xml]

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<project basedir="." name="xjc.test" default="main"> 3 <target name="main"> 4 <exec executable="xjc.exe" resultproperty="xjc.result"> 5 <arg line="-d ${basedir}${file.separator}out"/> 6 <arg line="-extension"/> 7 <arg line="-catalog ${basedir}${file.separator}catalog.xml"/> 8 <arg line="-nv"/> 9 <arg line="-verbose"/> 10 <arg line="${basedir}${file.separator}resource${file.separator}hoge/B.xsd"/> 11 </exec> 12 </target> 13</project>

[実行ログ]

text

1Executing: 2"c:\program files\oxygen xml editor 18\jre/bin/java" -Xmx256m -classpath "C:\Program Files\Oxygen XML Editor 18\tools\ant/lib/ant-launcher.jar" "-Dant.home=C:\Program Files\Oxygen XML Editor 18\tools\ant" org.apache.tools.ant.launch.Launcher -lib "C:\Program Files\Oxygen XML Editor 18\lib\resolver.jar" -lib "C:\Program Files\Oxygen XML Editor 18\lib\xml-apis.jar" -f "build.xml" "-Dwebhelp.trial.license=no" -Dxml.catalog.verbosity=999 3 4Buildfile: C:\Users\toshi\OneDrive\Documents\study\xml\20161007\build.xml 5 6main: 7 [exec] スキーマの解析中... 8 [exec] スキーマのコンパイル中... 9 [exec] [INFO] generating code 10 [exec] 不明な場所 11 [exec] 12 [exec] generated\ObjectFactory.java 13 [exec] generated\Person.java 14 [exec] generated\Persons.java 15 [exec] generated\Sex.java 16 17BUILD SUCCESSFUL 18Total time: 3 seconds 19 20The process finished with exit code: 0

oXygen 18.0でやっています.out/generatedフォルダを見たら、こんな感じで.javaファイルが出来ていました.

text

1C:\Users\toshi\OneDrive\Documents\study\xml\20161007\out\generated>dir 2 ドライブ C のボリューム ラベルは Windows8_OS です 3 ボリューム シリアル番号は 1CA4-CBD8 です 4 5 C:\Users\toshi\OneDrive\Documents\study\xml\20161007\out\generated のディレクト 67 82016/10/08 01:43 <DIR> . 92016/10/08 01:43 <DIR> .. 102016/10/08 01:43 1,536 ObjectFactory.java 112016/10/08 01:43 2,880 Person.java 122016/10/08 01:43 2,143 Persons.java 132016/10/08 01:43 1,442 Sex.java 14 4 個のファイル 8,001 バイト 15 2 個のディレクトリ 363,812,323,328 バイトの空き領域

参考にしていただければ幸いです.

投稿2016/10/07 17:01

編集2016/10/08 00:58
tmakita

総合スコア70

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

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

keisukestrat

2016/10/12 00:19

catalogファイルの配置で少し手間取ってしまい、回答が遅くなり申し訳ありません。 此方でも確認できました。 とても助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問