• ベストアンサー

XMLShemaからXML文書を作成

こんにちは VB2005でXML文書をアプリを作成指定しています。 XML文書を読み込んでバリデーションをかけて、OKであれば処理続けていくプログラムです。 実際の業務でバリデーションのために使用する XMLSchemaをもらったのですが、階層が深くなかなか複雑なようで、 ファイルの数は100個近くあります。 プログラムのテストのために、指定のXMLSchema全ての構造体を反映したXMLファイルを作成したいのですが、 手動ではかなり厳しいです。 ちなみに、メインとなるXSDファイルがありますが、 その中では、子要素となる構造を定義したXSDファイルを importやincludeしているだけです。 このようなXSDファイルを指定して、全ての構造を網羅したXMLファイルを作成してくれるツールは存在しますでしょうか? もしくは、そのようなツールを作成するプログラムのサンプルでも結構です。 以上、よろしくお願いいたします。

  • XML
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.2

昔 XML Schema を扱う仕事をしていた時に,JAXBを使って XML Schema からJavaのコードを自動生成した記憶があるのですが…。 http://www.stackasterisk.jp/tech/java/jaxb01_01.jsphttp://www.atmarkit.co.jp/fxml/rensai2/xmltool02/01.html は参考にならないでしょうか? 後者ではMarshallerを使ってXML文書を出力する例も紹介しているので,もしかしたらお役に立つかもしれません。 ただ, > 全ての構造を網羅したXMLファイルを作成してくれる これは無理だと思います。XML Schema には繰り返しやoptionもあるので,一つの文書で全てのパターンを網羅することは無理だと思います。また,複数の文書であったとしても,例えば繰り返しを何回行うかには無限のパターンがあり得るため,やはり全てのパターンを網羅することは難しいと思います。 ただ,上述のJAXBを使えば,その手間はかなり減らせるかもしれません。 JAXBはJWSDPの一部なので,参考URLでダウンロードできます。

参考URL:
http://java.sun.com/xml/downloads/jaxb.html
sunasaka3
質問者

お礼

回答ありがとうございます。 JAXBは初めて聞きました・・・。勉強して試してみます。 やりたいことは、XML Schema に定義されている全てのElementとAttributeの タグ名称と親子関係を表すXMLファイルを作りたいということで、 繰返しの箇所は発生回数一回として扱いたいです。 これも無理でしょうか・・・ 無理でしたら、教えていただいたサイトを参考に、一度大まかな全体の構成を作成し、 最終的には人の手でチェックしながら修正していく、と言うことにするしかないのかもしれないですね ありがとうございました。

その他の回答 (2)

  • aton
  • ベストアンサー率47% (160/334)
回答No.3

No.2です。 > やりたいことは、XML Schema に定義されている全てのElementとAttributeの > タグ名称と親子関係を表すXMLファイルを作りたいということで、 > 繰返しの箇所は発生回数一回として扱いたいです。 > これも無理でしょうか・・・ スキーマ定義の中に xsd:choice が存在する場合,いずれにせよファイル1つの作成で済ませることは無理だと思いますが,全ての要素の出現回数を1に固定してよいのであれば,有限個のファイルで収めることは可能だと思います。 なお,JAXBはあくまでJavaのソースを自動生成してくれるツールなので,実際にXMLファイルを吐くコードは自分で書く必要があります。その手間がどれくらいになるのかはスキーマの複雑さにもよりますが,人力でXML Schemaをパースするよりは間違いが少なくなり,手間も省けると思います。 例えば,XHTMLのようなかなり複雑な構造でも,JAXBを使って文書生成している人が居るようなので, http://www.ruimo.com/2006/03/03/1141390674449.html 試してみる価値はあると思います。

sunasaka3
質問者

お礼

ありがとうございます。 JAXBを使ってやってみようと思ったのですが、 今回作ろうとしているXMLSchemaからXML文書を作成するツールはいろんなところで使われるようで、 そのマシンにJAVAがインストールされていることを前提にするのはNGとのことでした・・・ ですので、他の方法を探してみます。 せっかく紹介してくださったのにすみません。 ありがとうございました。

noname#39970
noname#39970
回答No.1

XSDもXMLの一種でしょ? http://www.google.co.jp/search?q=XSD%20XML&hl=ja&lr=lang_ja 何ならxsltで整形できるんじゃない? 処理はそれこそ今時のxslt使えるブラウザで。

sunasaka3
質問者

お礼

回答ありがとうございます。 お礼が遅くなり申し訳ありません。 XML⇒XMLの変換と考えればよいのでは、と言うことですよね。 考えてみます。ありがとうございました。

関連するQ&A

  • DTDとXML Schemaでのデフォルト値の指定について

    以下のようなXMLをパーズするプログラムがあります。 ------------------------------------------------------------------ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setValidating(true); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); Document doc = documentBuilder.parse(new InputSourc("a.xml")); ------------------------------------------------------------------ a.xmlに以下のようなXMLの構造をDTDで指定した場合のxmlをパーズさせると、 <!DOCTYPE a [ <!ELEMENT a (#PCDATA)> <!ATTLIST a a1 CDATA "abc"> ]> <a/> 上記のプログラム3行目のvalidationの設定がtrue、falseに関わらす、 <a a1="abc"/> というような形式のドキュメントオブジェクトが返ってきます。 ですが、以下のようにXMLの構造をXML Schemaで定義した場合、 a.xml <a xsi:noNamespaceSchemaLocation="b.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> b.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="a"> <xsd:complexType> <xsd:attribute name="a1" type="xsd:string" default="abc"/> </xsd:complexType> </xsd:element> </xsd:schema> 返ってくるドキュメントオブジェクトのa要素には、validationがtrueの場合はa1属性が含まれる、falseの場合は含まれません。 これは正しい動作なのでしょうか? また、XML Schemaの場合もvalidationがtrue、falseに関わらず、 デフォルト値が指定された属性を含めることはできないのでしょうか?

    • ベストアンサー
    • XML
  • XML-DB変換ツール

    今仕事であるデータをXSDの定義に従って XML文書を作成してほしいという依頼を受けました。 XMLのことはあまりよくわからないのですが、 無償のツールでこのようなことを行ってくれる ツールはありますでしょうか? ご存知のかたいらっしゃったら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • XML
  • XML文書の妥当性

    XML文書とDTDを作成しましたが、XML文書の妥当性を検証はどうやってすればよいです?検証ツールがありましたら教えてください。

    • ベストアンサー
    • XML
  • 要素の内容にxmlを入れたい

    次のようなxmlを作成しました。 <?xml version="1.0" encoding="UTF-8"?> <tns:StateChange xsi:schemaLocation="http://sample.com/Change.xsd" xmlns:tns="http://sample.com/XSDDefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceName>test</ServiceName> <wsdl></wsdl> </tns:StateChange> wsdl要素の内容として <?xml version="1.0" encoding="utf-8\"?><wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema".... といったいわゆるWSDLを文字列として指定したいと考えて、指定するとvalidate時にエラーになってしまいます。 xmlを要素の内容にしたい場合、どのようにすればいいのでしょうか?

    • ベストアンサー
    • XML
  • 至急お願いします。vbaでxmlファイルを読み込み

    【Excel マクロ】xmlファイルを読み込み、一覧形式で出力ファイルを作成したいです。有識者の方、ご教示いただけますと幸いです。 ◆やりたいこと①:指定したフォルダ内(C:/属性一覧)にxmlファイルが複数格納されています。(例:文書①.xml、文書②.xml…) このxmlファイルを読み込みたいです。 ◆やりたいこと②:①で読み込んだxmlファイルのデータの中身は下記のとおりです。 こちらから、"Path"と"Property Display"を出力するファイルを作成したいです。 下記にxmlファイルの中身を記載します。 <PropertiesInfo> <Documrent ="123456---------"> <DocumentKind = "abcde-----------" Path = "/階層1/階層2/階層3"> <FolderName = "\^-)('&%$#"-----------------------------------------------"> <System> <Property Display = "文書名" Value = "〇〇〇" ListPath = "---------------------------" > <Property Display = "作成日時" Value = "2021/12/31" ListPath = "---------------------------"> <Property Display = "作成者" Value = "▲▲" ListPath = "---------------------------"> <Property Display = "更新日時" Value = "2022/2/1" ListPath = "---------------------------"> <Property Display = ............ <Property Display = ........... ・ ・ ・ ・ ・ ◆やりたいこと③:②で取得したPathとProperty Displayを、出力ファイルの中に記載したいです。セルの区切りを「-」で表してみます。 1行目(ヘッダ):Path-文書名-作成日時-作成者-更新日時…… 2行目(文書①のデータ): 〇〇〇-2021/12/31-▲▲-2022/2/1… 3行目(文書②のデータ): …………… 4行目(文書③のデータ): …………… としたいです。 どうか有識者の方々、よろしくお願いいたします。

  • XML-DB変換について

    今、新しい仕事でXML文書で顧客でデータ転送する仕事があります。 XSDというファイルがあるのですがこの定義にしたがって あるデータをXML文書に変換する機能ってMysqlにあるのでしょうか? XMLについてまだあまりよく知らないため質問の内容がおかしかったらすみません。 ご存知のかたがいらっしゃったら教えていただけますでしょうか?

  • XML Schemaの名前空間

    XML Schemaを利用する際、名前空間としてhttp://www.w3.org/2001/XMLSchemaを定義する必要があります。上記の末尾に.xsdを追加し、ブラウザで開くと、組み込みデータ型が定義してあるファイルを参照できます。XML Schemaを利用してXMLの検証を行うアプリは、名前空間を元にこのファイルを参照して、組み込みデータ型の検証を行うのでしょうか。いまいち挙動がわかりません。

    • 締切済み
    • XML
  • PHPでXMLデータ生成、スキーマで失敗

    PHPのDOMDocumentを使ってXMLデータを生成しています。 $dom->schemaValidate('xsdファイル'); で失敗してしまします。 どうしても原因がわからないので吐き出すデータを最小限にして試してみましたが状況が変わりませんでした。 スキーマは以下のようになっています。 <?xml version="1.0" encoding="Shift_JIS" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Response"> <xsd:complexType> <xsd:sequence> <xsd:element name="user" type="user_type" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="user_type"> <xsd:sequence> <xsd:element name="developerID" type="xsd:string" /> <xsd:element name="operation" type="xsd:string" /> <xsd:element name="User-Agent" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> そして吐き出されるxml形式のデータは、 <?xml version="1.0" encoding="Shift-JIS"?> <Response> <user> <developerID>testdeveloperID</developerID> <operation>testoperation</operation> <User-Agent>Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1</User-Agent> </user> </Response> 出てしまうエラーは、 Warning: DOMDocument::schemaValidate() [<a href='domdocument.schemavalidate'>domdocument.schemavalidate</a>]: The document has no document element. in "実行しているphpファイルのパス" on line 12 ちなみに実行phpの12行目には、 $dom->schemaValidate('xsdファイル'); があります。 スキーマを使用してのxmlデータ吐き出しは初めてなのでいろいろと戸惑っています。 何か解決方法もしくはエラーが出てしまう原因をご存知の方がいらっしゃいましたらアドバイスをいただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • XML
  • TeXで文書作成しているのですが、

    TeXで文書作成しているのですが、 #include <stdio.h> main() { } のプログラムを、 ―――――――――― |#include<stdio.h>  |  |main()          | |{             |  |}             |  ―――――――――― のように、四角の枠で囲むにはどうすればいいでしょうか?

  • PHPでXMLデータ生成、スキーマで失敗

    PHPのDOMDocumentを使ってXMLデータを生成しています。 $dom->schemaValidate('xsdファイル'); で失敗してしまします。 どうしても原因がわからないので吐き出すデータを最小限にして試してみましたが状況が変わりませんでした。 スキーマは以下のようになっています。 <?xml version="1.0" encoding="Shift_JIS" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="Response"> <xsd:complexType> <xsd:sequence> <xsd:element name="user" type="user_type" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="user_type"> <xsd:sequence> <xsd:element name="developerID" type="xsd:string" /> <xsd:element name="operation" type="xsd:string" /> <xsd:element name="User-Agent" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:schema> そして吐き出されるxml形式のデータは、 <?xml version="1.0" encoding="Shift-JIS"?> <Response> <user> <developerID>testdeveloperID</developerID> <operation>testoperation</operation> <User-Agent>Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1</User-Agent> </user> </Response> 出てしまうエラーは、 Warning: DOMDocument::schemaValidate() [<a href='domdocument.schemavalidate'>domdocument.schemavalidate</a>]: The document has no document element. in "実行しているphpファイルのパス" on line 12 ちなみに実行phpの12行目には、 $dom->schemaValidate('xsdファイル'); があります。 スキーマを使用してのxmlデータ吐き出しは初めてなのでいろいろと戸惑っています。 何か解決方法もしくはエラーが出てしまう原因をご存知の方がいらっしゃいましたらアドバイスをいただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう