CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/06/28 14:00

ダウンロード サンプルコード (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をもう少し掘り下げて説明します。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

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

著者プロフィール

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

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

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5