応用Java(Java/XML) 第10回 2005年6月23日 植田龍男 後半の内容の予定 XPath (6/9) XSLT (6/16) 名前空間(Namespace) (6/23) XML文書の妥当性の検証(7/7,14) DTD,XML Schema J2SE 5.0 と XML API javax.xml javax.xml.parsers javax.xml.transform javax.xml.transform.dom javax.xml.transform.sax javax.xml.transform.stream javax.xml.xpath javax.xml.namespace javax.xml.validation javax.xml.datatype 前回の復習(宿題) 以下の要素をHTMLの形式に変換 <link to="http://www.wakhok.ac.jp"> See more... </link> 変換後: <a href=“http://www.wakhok.ac.jp”> See more… </a> 宿題の答え(xslファイルの記述) <xsl:template match="link"> <a> <xsl:attribute name="href"> <xsl:value-of select="@to"/> </xsl:attribute> <xsl:apply-templates /> </a> </xsl:template> もう1つの宿題 <xsl:template match="text"> の xsl: ってどういう意味? <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/ XSL/Transform"> のURIは何の働きをしているの? 名前空間とは? 名前の衝突の回避(一意性の保証) ローカル名の前に「場所」を指定 XML以外でも利用 XMLの名前空間の例(1) Prefix <wakhok:image source="java.png“ width="512" height="400"/> : <tatsuo:image src="elephant.png“ w="64“ h="64"/> XMLの名前空間の例(2) URI <wakhok:document xmlns:wakhok ="http://www.wakhok.ac.jp/public" xmlns:tatsuo ="http://www.wakhok.ac.jp/tatsuo"> <wakhok:title> Java and XML</wakhok:title> : </wakhok:document> 名前空間の例(3) 有効範囲 <tatsuo:image src="elephant.png“ w="64" h="64" xmlns:tatsuo ="http://www.wakhok.ac.jp/tatsuo"/> 名前空間の例(4) Prefixの省略 Prefixの名称を省略(URIのみ指定) この場合でも立派な名前空間 <document xmlns="http://www.wakhok.ac.jp/"> <title>Java and XML</title> <image s="java.png" w="128" h="64"/> </document> 名前空間の例(5) 特別なPrefix xmlns: はなぜURIなしでもいいのか? xml で始まるプレフィックスは特別 (一般のXML文書では使用できない) <xml:image source="elephant.png" xmlns:xml="http://www.wakhok.ac.jp"/> この表記はエラーとなる 名前空間の処理(1) パーサへの通知(Factoryクラスに) SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware( true ); SAXParser parser = spf.newSAXParser(); 名前空間の処理(2) PrefixとURIの処理がポイント void startElement( String uri, String localName, Stirng qName, Attributes attr ) SAX処理での名前空間の検知 ある名前空間の有効範囲に入った時 startPrefixMapping( String p, String u) ある名前空間の有効範囲が終わった時 endPrefixMapping( String p ) javax.xml.namespace たった1つのインタフェース NamespaceContext たった1つのクラス QName NamespaceContext 3個のメソッドの実装を要求 プレフィックスとURIの変換の手段 getNamespaceURI( String prefix) getPrefix( String uri ) getPrefixes( String uri ) URI : Prefix は1対他の可能性もある QName (Qualified Name ) URI, Prefix, ローカル名の情報を格納 QName(String local) QName(String uri, String local) QName(String uri, String local, String prefix) getLocalPart(), getPrefix() getNamespaceURI() equals() – URIとローカル名のみで判定 toString() – { URI }localName の形式 Quorified Name Qnameクラスの利用例 public void startElement( String nameSpace, String localName, String qName, Attributes attrs ) { System.out.println( new QName( nameSpace, localName ) );
© Copyright 2024 ExpyDoc