xmllint学習 #3 helpを日本語化-1日目

2019年7月6日

xmllint テクノロジー プログラミング 特集

だいぶ使い慣れてきたxmllintですが、HTMLがパースできたり、xmlの深い機能にも対応いていたり、macOSなどにもデフォルトで搭載されている事を考えると、より深く知っておく必要を感じます。 今回は、helpの内容を日本語化してみることにします。 これにより、少し不明だった機能も見えてくるかもしれません。 ちなみに、今の所、"--format"と"--xpath"と"--shell"ぐらいしか使っていないので、他の機能も興味津津です。

とりあえずHELP表示してみる

$ xmllint Usage : xmllint [options] XMLfiles ... Parse the XML files and output the result of the parsing --version : display the version of the XML library used --debug : dump a debug tree of the in-memory document --shell : run a navigating shell --debugent : debug the entities defined in the document --copy : used to test the internal copy implementation --recover : output what was parsable on broken XML documents --huge : remove any internal arbitrary parser limits --noent : substitute entity references by their value --noenc : ignore any encoding specified inside the document --noout : don't output the result tree --path 'paths': provide a set of paths for resources --load-trace : print trace of all external entities loaded --nonet : refuse to fetch DTDs or entities over network --nocompact : do not generate compact text nodes --htmlout : output results as HTML --nowrap : do not put HTML doc wrapper --valid : validate the document in addition to std well-formed check --postvalid : do a posteriori validation, i.e after parsing --dtdvalid URL : do a posteriori validation against a given DTD --dtdvalidfpi FPI : same but name the DTD with a Public Identifier --timing : print some timings --output file or -o file: save to a given file --repeat : repeat 100 times, for timing or profiling --insert : ad-hoc test for valid insertions --compress : turn on gzip compression of output --html : use the HTML parser --xmlout : force to use the XML serializer when using --html --nodefdtd : do not default HTML doctype --push : use the push mode of the parser --pushsmall : use the push mode of the parser using tiny increments --memory : parse from memory --maxmem nbbytes : limits memory allocation to nbbytes bytes --nowarning : do not emit warnings from parser/validator --noblanks : drop (ignorable?) blanks spaces --nocdata : replace cdata section with text nodes --format : reformat/reindent the output --encode encoding : output in the given encoding --dropdtd : remove the DOCTYPE of the input docs --pretty STYLE : pretty-print in a particular style 0 Do not pretty print 1 Format the XML content, as --format 2 Add whitespace inside tags, preserving content --c14n : save in W3C canonical format v1.0 (with comments) --c14n11 : save in W3C canonical format v1.1 (with comments) --exc-c14n : save in W3C exclusive canonical format (with comments) --nsclean : remove redundant namespace declarations --testIO : test user I/O support --catalogs : use SGML catalogs from $SGML_CATALOG_FILES otherwise XML Catalogs starting from file:///etc/xml/catalog are activated by default --nocatalogs: deactivate all catalogs --auto : generate a small doc on the fly --xinclude : do XInclude processing --noxincludenode : same but do not generate XInclude nodes --nofixup-base-uris : do not fixup xml:base uris --loaddtd : fetch external DTD --dtdattr : loaddtd + populate the tree with inherited attributes --stream : use the streaming interface to process very large files --walker : create a reader and walk though the resulting doc --pattern pattern_value : test the pattern support --chkregister : verify the node registration code --relaxng schema : do RelaxNG validation against the schema --schema schema : do validation against the WXS schema --schematron schema : do validation against a schematron --sax1: use the old SAX1 interfaces for processing --sax: do not build a tree but work just at the SAX level --oldxml10: use XML-1.0 parsing rules before the 5th edition --xpath expr: evaluate the XPath expression, imply --noout Libxml project home page: http://xmlsoft.org/ To report bugs or get some help check: http://xmlsoft.org/bugs.html 何もオプション指定しないとヘルプが出る仕組みのようです。 1行目の「Parse the XML files and output the result of the parsing」は 「XMLファイルを解析して解析結果を出力する」という事で、簡単に説明してくれています。

--version

display the version of the XML library used 使用されているXMLライブラリのバージョンを表示する $ xmllint --version xmllint: using libxml version 20903 compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib Lzma   少しわかりずらいバージョン表記ですが、ちゃんとライブラリ名なども記されています。

--debug

dump a debug tree of the in-memory document メモリ内ドキュメントのデバッグツリーをダンプします。   $ xmllint --debug alert.svg DOCUMENT version=1.0 URL=alert.svg standalone=true namespace xml href=http://www.w3.org/XML/1998/namespace COMMENT content=?xml version="1.0" encoding="utf-8"? COMMENT content= Generator: Adobe Illustrator 15.1.0, SV... ELEMENT svg default namespace href=http://www.w3.org/2000/svg namespace xlink href=http://www.w3.org/1999/xlink ATTRIBUTE version TEXT compact content=1.1 ATTRIBUTE id TEXT compact content=_x32_ ATTRIBUTE x TEXT compact content=0px ATTRIBUTE y TEXT compact content=0px ATTRIBUTE width TEXT compact content=512px ATTRIBUTE height TEXT compact content=512px ATTRIBUTE viewBox TEXT compact content=0 0 512 512 ATTRIBUTE style TEXT content=width: 128px; height: 128px; opacity: 1;... ATTRIBUTE space TEXT compact content=preserve TEXT compact content= ELEMENT style ATTRIBUTE type TEXT compact content=text/css TEXT content= .st0{fill:#4B4B4B;} TEXT compact content= ELEMENT g TEXT compact content= ELEMENT path ATTRIBUTE class TEXT compact content=st0 ATTRIBUTE d TEXT content=M452.938,19.112c-3.219-2.109-7.281-2.469... TEXT compact content= ELEMENT path ATTRIBUTE class TEXT compact content=st0 ATTRIBUTE d TEXT content=M167.063,127.034H45.844c-25.313,0-45.828... TEXT compact content= ELEMENT path ATTRIBUTE class TEXT compact content=st0 ATTRIBUTE d TEXT content=M475.625,186.44v86.25c15.625,0,36.375-19... TEXT compact content= ELEMENT path ATTRIBUTE class TEXT compact content=st0 ATTRIBUTE d TEXT content=M147.969,342.753H66.031L99.656,478.44c1.... TEXT compact content= TEXT compact content= svgファイルを--debugで表示してみましたが、namespaceも表示されて簡易確認できるモードのようです。

--shell

run a navigating shell ナビゲートシェルを実行する 言わずとしれたオプションなので、詳細説明は省きます。

--debugent

debug the entities defined in the document 文書で定義されているエンティティをデバッグする xmllint --debugent alert.svg new input from file: alert.svg <?xml version="1.0"?> <!--?xml version="1.0" encoding="utf-8"?--> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="_x32_" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 128px; height: 128px; opacity: 1;" xml:space="preserve"> <style type="text/css"> .st0{fill:#4B4B4B;} </style> <g> <path class="st0" d="M452.938,19.112c-3.219-2.109-7.281-2.469-10.813-0.953L188.641,127.034l-0.016,194.282l253.5,108.891 c3.531,1.516,7.594,1.156,10.813-0.969s5.156-5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"/> <path class="st0" d="M167.063,127.034H45.844c-25.313,0-45.828,20.516-45.828,45.828L0,275.472 c0,25.328,20.531,45.844,45.844,45.844h121.219V127.034z"/> <path class="st0" d="M475.625,186.44v86.25c15.625,0,36.375-19.313,36.375-43.11C512,205.752,491.25,186.44,475.625,186.44z"/> <path class="st0" d="M147.969,342.753H66.031L99.656,478.44c1.844,9.5,10.156,16.328,19.813,16.328h46.578 c6.359,0,12.359-3,16.172-8.125c3.828-5.094,5-11.703,3.188-17.813L147.969,342.753z"/> </g> </svg> DOCUMENT No entities in internal subset No entities in external subset よく理解できませんが、情報表示の他に何かファイルをコントロールするんでしょうか? あまり使わなそうな機能なので、深掘りしないでおきましょう。

--copy

used to test the internal copy implementation 内部コピーの実装をテストするために使用されます $ xmllint --copy alert.svg <?xml version="1.0"?> <!--?xml version="1.0" encoding="utf-8"?--> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="_x32_" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 128px; height: 128px; opacity: 1;" xml:space="preserve"> <style type="text/css"> .st0{fill:#4B4B4B;} </style> <g> <path class="st0" d="M452.938,19.112c-3.219-2.109-7.281-2.469-10.813-0.953L188.641,127.034l-0.016,194.282l253.5,108.891 c3.531,1.516,7.594,1.156,10.813-0.969s5.156-5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"/> <path class="st0" d="M167.063,127.034H45.844c-25.313,0-45.828,20.516-45.828,45.828L0,275.472 c0,25.328,20.531,45.844,45.844,45.844h121.219V127.034z"/> <path class="st0" d="M475.625,186.44v86.25c15.625,0,36.375-19.313,36.375-43.11C512,205.752,491.25,186.44,475.625,186.44z"/> <path class="st0" d="M147.969,342.753H66.031L99.656,478.44c1.844,9.5,10.156,16.328,19.813,16.328h46.578 c6.359,0,12.359-3,16.172-8.125c3.828-5.094,5-11.703,3.188-17.813L147.969,342.753z"/> </g> </svg> このオプションも内容をダンプするだけの機能のようです。

--recover

output what was parsable on broken XML documents 壊れたXML文書に対して解析可能だったものを出力する $ xmllint --recover alert_error.svg alert_error.svg:12: parser error : Opening and ending tag mismatch: path line 11 and __path -5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"></__path ^ <?xml version="1.0"?> <!--?xml version="1.0" encoding="utf-8"?--> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="_x32_" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 128px; height: 128px; opacity: 1;" xml:space="preserve"> <style type="text/css"> .st0{fill:#4B4B4B;} </style> <g> <path class="st0" d="M452.938,19.112c-3.219-2.109-7.281-2.469-10.813-0.953L188.641,127.034l-0.016,194.282l253.5,108.891 c3.531,1.516,7.594,1.156,10.813-0.969s5.156-5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"/> <path class="st0" d="M167.063,127.034H45.844c-25.313,0-45.828,20.516-45.828,45.828L0,275.472 c0,25.328,20.531,45.844,45.844,45.844h121.219V127.034z"/> <path class="st0" d="M475.625,186.44v86.25c15.625,0,36.375-19.313,36.375-43.11C512,205.752,491.25,186.44,475.625,186.44z"/> <path class="st0" d="M147.969,342.753H66.031L99.656,478.44c1.844,9.5,10.156,16.328,19.813,16.328h46.578 c6.359,0,12.359-3,16.172-8.125c3.828-5.094,5-11.703,3.188-17.813L147.969,342.753z"/> </g> </svg> 少し分かりづらいですが、pathタグの閉じを__pathタグに名称変更して不具合を作ってみました。 その箇所を見つけてくれるので、xml構築したときの構文チェックに使えそうです。

--huge

remove any internal arbitrary parser limits 任意の内部パーサ制限を削除 $ xmllint --huge alert.svg <?xml version="1.0"?> <!--?xml version="1.0" encoding="utf-8"?--> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="_x32_" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 128px; height: 128px; opacity: 1;" xml:space="preserve"> <style type="text/css"> .st0{fill:#4B4B4B;} </style> <g> <path class="st0" d="M452.938,19.112c-3.219-2.109-7.281-2.469-10.813-0.953L188.641,127.034l-0.016,194.282l253.5,108.891 c3.531,1.516,7.594,1.156,10.813-0.969s5.156-5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"/> <path class="st0" d="M167.063,127.034H45.844c-25.313,0-45.828,20.516-45.828,45.828L0,275.472 c0,25.328,20.531,45.844,45.844,45.844h121.219V127.034z"/> <path class="st0" d="M475.625,186.44v86.25c15.625,0,36.375-19.313,36.375-43.11C512,205.752,491.25,186.44,475.625,186.44z"/> <path class="st0" d="M147.969,342.753H66.031L99.656,478.44c1.844,9.5,10.156,16.328,19.813,16.328h46.578 c6.359,0,12.359-3,16.172-8.125c3.828-5.094,5-11.703,3.188-17.813L147.969,342.753z"/> </g> </svg> このサンプルだけでは、何の制限が削除されているのかわかりませんね。 この機能も、あまり使わなそうな機能なのかも・・・

--noent

substitute entity references by their value その値で実体参照を置換する $ xmllint --noent alert.svg <?xml version="1.0"?> <!--?xml version="1.0" encoding="utf-8"?--> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="_x32_" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 128px; height: 128px; opacity: 1;" xml:space="preserve"> <style type="text/css"> .st0{fill:#4B4B4B;} </style> <g> <path class="st0" d="M452.938,19.112c-3.219-2.109-7.281-2.469-10.813-0.953L188.641,127.034l-0.016,194.282l253.5,108.891 c3.531,1.516,7.594,1.156,10.813-0.969s5.156-5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"/> <path class="st0" d="M167.063,127.034H45.844c-25.313,0-45.828,20.516-45.828,45.828L0,275.472 c0,25.328,20.531,45.844,45.844,45.844h121.219V127.034z"/> <path class="st0" d="M475.625,186.44v86.25c15.625,0,36.375-19.313,36.375-43.11C512,205.752,491.25,186.44,475.625,186.44z"/> <path class="st0" d="M147.969,342.753H66.031L99.656,478.44c1.844,9.5,10.156,16.328,19.813,16.328h46.578 c6.359,0,12.359-3,16.172-8.125c3.828-5.094,5-11.703,3.188-17.813L147.969,342.753z"/> </g> </svg> どうやって置換するんでしょう? このヘルプだけでは、操作方法がわかりませんね・・・

--noenc

ignore any encoding specified inside the document 文書内で指定されているエンコードを無視します $ xmllint --noenc alert.svg <?xml version="1.0"?> <!--?xml version="1.0" encoding="utf-8"?--> <!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="_x32_" x="0px" y="0px" width="512px" height="512px" viewBox="0 0 512 512" style="width: 128px; height: 128px; opacity: 1;" xml:space="preserve"> <style type="text/css"> .st0{fill:#4B4B4B;} </style> <g> <path class="st0" d="M452.938,19.112c-3.219-2.109-7.281-2.469-10.813-0.953L188.641,127.034l-0.016,194.282l253.5,108.891 c3.531,1.516,7.594,1.156,10.813-0.969s5.156-5.703,5.156-9.563V28.69C458.094,24.831,456.188,21.221,452.938,19.112z"/> <path class="st0" d="M167.063,127.034H45.844c-25.313,0-45.828,20.516-45.828,45.828L0,275.472 c0,25.328,20.531,45.844,45.844,45.844h121.219V127.034z"/> <path class="st0" d="M475.625,186.44v86.25c15.625,0,36.375-19.313,36.375-43.11C512,205.752,491.25,186.44,475.625,186.44z"/> <path class="st0" d="M147.969,342.753H66.031L99.656,478.44c1.844,9.5,10.156,16.328,19.813,16.328h46.578 c6.359,0,12.359-3,16.172-8.125c3.828-5.094,5-11.703,3.188-17.813L147.969,342.753z"/> </g> </svg> エンコードなので2バイト文字などを入れていると強制的にOS使用の文字エンコードに変換されるんでしょうか?

--noout

don't output the result tree 結果ツリーを出力しません xmllint --noout alert.svg 標準出力がされません。 あまり使う機械がなさそうですね。

--path 'paths'

provide a set of paths for resources リソースへの一連のパスを提供する $ xmllint sample.xml --path <?xml version="1.0" encoding="utf-8" standalone="yes"?> <hoge> <hage name="aaa" value="12345" a="1">DOG</hage> <hage name="bbb" value="56789" b="2">CAT</hage> </hoge> pathsには何を挿入すればいいのでしょう? 現時点ではさっぱりわかりません・・・

続きは明日・・・

かなり長引きそうな感じがするので、続きは次回に持ち越すことにします・・・ お楽しみに!!

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ