SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今からでも遅くない、W3C XML Schemaを学ぼう!

今からでも遅くない W3C XML Schemaを学ぼう!(前編)
難しいという固定観念を取り払う

まずは体験し、なぜ必要かを理解する


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (3.9 KB)

妥当性を検証する

 以上で、妥当性検証の準備は整いました。NetBeansを使って他のプロジェクトも同時に開いている場合、主プロジェクトとして設定する必要があります。[実行]-[主プロジェクトとして設定]を開くと、プロジェクトタブで開いているプロジェクト名がすべて表示されます。ここではXMLSchemaSample1を選択すれば、主プロジェクトになります。

 NetBeansで[実行]-[主プロジェクトを削除して構築]をクリックするとwarファイルが構築されデプロイされます。筆者のWindows環境では「C:\Users\tomoharu\Documents\NetBeansProjects\XMLSchemaSample1\dist\XMLSchemaSample1.war」に配備されます。デフォルトでインストールした場合、Usersの次のフォルダが皆さんのフォルダ名に替わるだけです

 次にNetBeansで[実行]-[主プロジェクト]を実行をクリックします。今回はWebアプリケーションとしてプロジェクトを構築しているためindex.jspが起動し、図2のような画面が表示されます。

図2.index.jspで初期画面を表示
図2.index.jspで初期画面を表示

 特にXML文書、XMLスキーマ文書とも異常がない場合、図3のような画面が表示されます。

図3.
図3.

 次にリスト5のように「杜氏潤平紅芋原酒」のABVを削除します(18行目と19行目の間のABVを削除します)。スキーマでABVはminOccursもmaxOccursも指定していないため、デフォルトで必須の要素とみなされます。またNAME、ABV、VOLUME、PRICEはこの順に並ばなければならないことをsequenceで指定しています。従って、妥当性検証の結果は図4のようになります。

リスト5.ABVをMEIGARAの要素に指定しない場合
001:<?xml version="1.0" encoding="UTF-8"?>
002:<MEIGARAS
003:	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
004:	xsi:noNamespaceSchemaLocation="sample1.xsd">
005:	<MEIGARA>
006:	    <NAME>がんご焼酎屋</NAME>
007:	    <ABV>25</ABV><!-- alcohol by volume(アルコール度数)の略 -->
008:	    <VOLUME>1800</VOLUME>
009:	    <PRICE>2630</PRICE>
010:    </MEIGARA>
011:	<MEIGARA>
012:        <NAME>一壺春</NAME>
013:        <ABV>25</ABV>
014:        <VOLUME>720</VOLUME>
015:        <PRICE>1360</PRICE>
016:	</MEIGARA>
017:	<MEIGARA>
018:        <NAME>杜氏潤平紅芋原酒</NAME>
019:        <VOLUME>500</VOLUME>
020:        <PRICE>2050</PRICE>
021:	</MEIGARA>
022:</MEIGARAS>
図4.ABV要素がない場合のエラー情報
図4.ABV要素がない場合のエラー情報

スキーマ文書自体の検証

 先述の通り、JAXPでDocumentBuilderFactoryのsetAttributeメソッドを使用し、スキーマ文書を設定します。このスキーマ文書自体も、検証することが可能です。例えばリスト6のように、element要素の閉じカッコを記述しなかった場合(8行目の最後)、図5のようにエラーが発生します。W3C XML Schema自体を学習するにもありがたいツールです。

リスト6.閉じカッコを記述しなかった場合
001:<?xml version="1.0" encoding="UTF-8"?>
002:<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
003:	targetNamespace="http://kawakubo.jp/sample1">
004:	
005:<xs:element name="MEIGARAS">
006:	<xs:complexType>
007:        <xs:sequence minOccurs="0" maxOccurs="unbounded">
008:		<xs:element name="MEIGARA"
009:		    <xs:complexType>
010:			<xs:sequence>
011:			    <xs:element name="NAME" type="xs:string"/>
012:			    <xs:element name="ABV" type="xs:int"/>
013:			    <xs:element name="VOLUME" type="xs:int"/>
014:			    <xs:element name="PRICE" type="xs:int"/>
015:			</xs:sequence>
016:	            </xs:complexType>		
017:	        </xs:element>
018:	    </xs:sequence>
019:	</xs:complexType>
020:</xs:element>
021:
022:</xs:schema>   
図5.XMLスキーマ文書自体のエラー情報
図5.XMLスキーマ文書自体のエラー情報

 ここでわざわざXMLスキーマ文書をいじくってエラーを出さなくとも、1からXMLスキーマ文書を作る時はエラーが発生します。その時このツールを使って、原因を突き止めるのに役立ててもらえればと思います(その場合、XML文書やXMLスキーマ文書を動的に選択できるように改良しなくてはなりません)。

おさらい

 今回はW3C XML Schemaの入門の入門レベルですが、学んだことを整理します。

  • XMLスキーマとはXML文書の文法書のようなもの。XMLスキーマの規則から外れたXML文書を見つけだすことができる。
  • 「今からでも遅くない JAXPを学ぼう!(前編) XPathとXSLTを体験する」ではXMLからHTMLへの変換を説明しましたが、XSLT1.0はスキーマ対応していない。従って、変換元のXML文書が妥当な文書か検証したい場合、今回のようにJAXPに検証機能のAPIがあるため、それを利用し妥当性を検証できる。XSLTには検証に合格したものを渡すことができる。
  • JAXPのAPIの検証ではXML文書だけでなくXMLスキーマ文書自体も検証することが可能である。

サンプルコード

 今回のプロジェクトは取り立てて複雑でもありませんが、図6のようなフォルダ構成になっています。Meigara2.xmlやsample1.xsdファイルはここにはないので、管理しやすいフォルダに置いていただければと思います。その際にはMyXMLValidator.javaのSOURCE_PATHとXSD_PATHを変更し再ビルドして実行してください。

図6.今回のフォルダ構成
図6.今回のフォルダ構成

 次回は、W3C XML Schemaをもう少し掘り下げて説明します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
今からでも遅くない、W3C XML Schemaを学ぼう!連載記事一覧

もっと読む

この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5219 2010/07/04 19:04

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング