gaggitのブログ

コーディング、ガジェット、TIPS関連、FX

XSLT xmlのスタイルシートを使用するちょっとしたコツ

 サーバから返されるxmlの値をブラウザで見たかったので、xmlスタイルシートであるxlstを初めて編集してみた。その時に引っ掛かった何点かメモ書きに残しておきたいと思います。

1.xmlのタグは消えたのに、意図したとおりの表示となっていない

原因:ルートとなる最初のタグに属性が書かれていたため

対策:ルートとなる最初のタグから属性を削除

 

2.階層的にデータを表現

マッチング属性の後、階層的に再度、apply-templatesを使用する

<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="xxxxx">
    <html><body><xxxxx>
    <xsl:apply-templates/>
    </xxxxx></body></html>
</xsl:template>

 

3.同じタグ名で属性が異なる値の抽出

例えば、複数の<hoge>というタグから"yahoo"という属性の値のみ抽出といった場合

xmlファイル

<hoge name="yahoo">

xslファイル

<xsl:template match="hoge[@name='yahoo']">

    <p><xsl:value-of select="." /></p>

</xsl:template>

<xsl:template match="hoge[@name!='yahoo']">

    <p></p>

</xsl:template>

 

matchのイコール後は、Xpath形式ですタグ名[@属性名=属性値です。

 

4行目から6行目でyahoo以外の属性値は表示しないというようなことをやっておかないと、表示されてしまいます。

 確認したのはxslのバージョン1.0なので、新しいバージョンでは変わっているかもしれません。

 

2019.03.31追記

使用しているブラウザは、Firefoxです。ちなみにChromeだと何も表示されません。Edgeの場合は、明示的にキャラクタセットを定義していても、漢字の部分が文字化けしている。

 

p.s.

Window→Ubuntu移行ですが、移行作業は2,3割済んだところでしょうか。

ざっくり、今まで実行したことを列挙します。

Ubuntuのアップ-デート

VNC導入

perl のモジュールのインストール

Android Studioのインストール

Dropboxの導入

VirtualBoxの導入

・ゲストOSにWindows10 64bitのインストール

 

Dropboxは、gizmodoさんの記事にあるように3デバイスで制限されていました。

Webからログインして、「設定」「セキュリティ」で過去のデバイスまで含めて、リンク解除可能です。(過去のデバイスがどうなるか、懸念していましたが、大丈夫でした)

ちなみに9年ぐらい前から10個以上のデバイスが表示されていました。

 

参考リンク

www.gizmodo.jp

Firefoxのバージョンダウン 66.0.2→65.0.2

昨日から、勝手にOSが再起動される現象が1日、2,3回発生しています。今年は、まだ静電気による再起動対策として、メモリの抜き挿しをしていなかったですが、昨日、掃除がてらメモリの抜き挿しをして様子見をしていたのですが、まだ発生します。

Firefoxを操作中に再起動が発生することが多いことから、Firefoxのバージョンダウンを行ってみることにしました。

参考リンクからVer.65.0.2のリンクがあるのでそこからダウンロード可能です。また、オプション設定で自動的に更新されないように設定を変更する必要があります。

 

2019.03.31追記

2日ほど経過しましたが、突然、OSが再起動することがなくなり、安定しています。原因は、Firefox のバージョン66.0以降に問題があったようです。

2019.04.01追記

Firefox のバージョンが66.0.2に戻ってしまいました。旧バージョンをインストール後にオプションの設定を「更新の確認は行うが、インストールするかを選択する」に設定しないと、設定のデフォルトが「更新を自動的にインストールする」になっており、設定は引き継いでいないようです。また、「更新のインストールにバックグランドサービスを使用する」のチェックを外しておかないと勝手にダウンロードが始まって危険です。

バージョン66.0での勝手にリブートする件ですが、URLに打ち損じや間違いがあると発生しています。

 2019.04.05追記

バージョンを65.0.2に戻しても、現象は発生していますが、発生頻度はかなり少ないです。イベントビューアーを見ると、因果関係は分かりませんが、Distributed COMでエラーが発生している模様。

2019.04.07追記

Distributed COMをAPP IDを追ってみたら、Runtime Brokerのエラーらしいのですが、Microsotftのサイトには、このエラーは問題ないような旨の回答がありました。ただ、権限がなくエラーを繰り返しているように見えますが、Runtime Brokerで検索すると、Winアプリを仲介する高CPU負荷でメモリを消費するexe&サービスとありました。こんな物が何回も、繰り返して失敗していたら、そりゃーPCも落ちますよ。Runtime Brokerの対策方法は、すぐ見つかるので、検索してみてください。

 

参考リンク

support.mozilla.org

ディスプレイ切替器なしでモニタを切り替える方法

 昨日、VNCを接続したまま、ディスプレイケーブルの接続を繋ぎ替えたりしていたら、Windows側のVNC Viewerの描写が止まってしまった。F8キーを押して、画面の更新「Refresh Screen」を実行しても、反応がない。

さすがに何回もケーブルを繋ぎ替えるのに疲れてきたので、HDMIケーブルをプラスして、物理的な作業がないように設定してみた。

物理的構成

Windows機の画面1のモニタ1にVDIで接続、画面2にVGAのモニタ、Ubuntu機にモニタ1にHDMIで接続し、画面2をメインディスプレイに設定。

 

1.WindowsUbuntuにモニタを切り替える

Windowsの画面を右クリックして「ディスプレイ設定」「マルチ ディスプレイ」「複数のディスプレイ」「2のみに表示する」を選択する。

 

2.UbuntuWindowsにモニタを切り替える

Ubuntuで「xset -display :0 dpms force off」を実行

Windowsの画面を右クリックして「ディスプレイ設定」「複数のディスプレイ」

「表示画面を拡張する」を選択する。

 (場合によっては、「ディスプレイの選択と整理」で「検出」。画面1か2をドラッグ&ドロップして場所を入れ替える)

 

p.s.

Ubuntu側のディスプレイオフ設定で 「-display :0」がキモでした。

Kernel4.14.30に変わってから、オプション扱いの「-display :0」が必須となっています。man xsetを見ても、オプション扱いのままでした。

 

参考リンク

 

github.com

Ubuntu18.04LTSにVNC リモートデスクトップを導入

DellWindows環境から自作機のUnbuntu18.04LTSに移行するにあたり、VNC Viewerを導入してみた。

www.realvnc.com

Windows環境に既にVNC Server(by RealVNC)を導入しているので、Linux側にViewerをインストール。

上記のリンクからデフォルトで設定されている「DEB x64」のままで「Download VNC Viewer」ボタンを押下し、ダウンロードして、インストールへ。

インストール後、VNC Viewerを立ち上げて、VNC Server側のIPアドレスを入力したところ、あっさり接続確認ができた。

 

今度は、逆にLinux側にVNC Server(6.4.1)を導入してみた。

VNC Server起動後、右上の設定ボタンの「Licensing...」をe-mailを登録する。

「Choose subscription」画面では、「Home subscription」を選択。

次の「Specify VNC password」画面でパスワードを入力するのですが、先ほどLicensing時にe-mailと一緒に登録したパスワードは、RealVNC account用でVNC Server用に別のパスワードを入力する必要があります。

VNC Server画面で、右上のステータスが緑色のチェックに変わったらOKです。

 

現在、インストールされているViewerのバージョン4.1.2k4では相当に古く、接続できなかったので、現時点の最新版であるバージョン6.19.107をインストール。

(後から、Serverダウンロードサイトの「Importatnt information」「Instllation instructions」を読むと、アップグレードするように記述されていました)

f:id:gaggit:20190325164456p:plain

VNC Viewer 6.19.107

 Viewer画面の右上にある「Sign in...」をクリックして、VNCサイトに登録したe-mailアドレスとパスワードを入力して、e-mailで送られてきた「CONTINUE SIGN IN」ボタンをクリックすると、Viewer画面の「Sign in...」がユーザ名で表示され、左側に緑のチェックが付きます。

 

 「Enter a VNC Server address or search」には、ホスト名やIPアドレスではなく、チーム名を入力します。(Server側の左「Connectivity」に表示されてます)

パスワードをきいてくるので、Server側のパスワードを入力、これで接続できます。

(ファイヤウォールの設定が表示されます)

 

p.s.

最初のWindows:Server Ubuntu:Viewerのパターンでは、Windows側のVNC Serverのバージョンが古い為にカクカクと動作していましたが、Ubuntu:Server Windows:Viewerの逆のパターンでは、どちらも新しいバージョンの為、スムーズに動作します。

後で、Windows側のServerも新しくしてみたいと思います。

 

Athlon PRO 200GE このマザーボードではディスプレイ制限は解除

 一昨日、自作機を組み上げました。現在、使用しているデスクトップPCがそろそろ9年弱しているのと、ノートPCの電源ボタンが壊れ、マザーボードの突起状のボタンをボールペンで押して起動しているという、末期症状からやむを得なくという感じです。

 

 マザーボードは、ASRock > AB350M-HDVを使用、amazonで1000円のクーポン券を使用して、パソコン工房から購入しました。

 下記のサイトの説明では、もともと、200GEとこのマザーボーのBIOSのバージョン(P4.80)の組み合わせでは、DVI映像出力端子に制限があり、この端子を使用したマルチディスプレが不可能となっていました。

AMD Athlon 200GEプロセッサ搭載時におけるマザーボードの映像出力端子について | 株式会社アスク

 購入時のBIOSバージョンは5.10で、マザーボードのサポートサイトで確認したところ、5.10のバージョンの2番目にディスプレイ制限が変更されている旨の記述がありました。

f:id:gaggit:20190323181835p:plain

AB350M-HDB BIOS 5.10

ちなみにOSは、このマザーボードでは未サポートのUbuntu18.04TLSですが、問題なく作動してます。また、DVI端子を使用した、VGA端子とのマルチディスプレイも無事表示されました。

今回、コストを抑えるということが第一優先事項で、Windows10のUpdateが嫌いだったってこともあり、Ubuntuを導入することにしました。

1000円のAmazonのクーポン券と内蔵ケーブルはヨドバシのポイントを利用したので、トータルで3万円半ばで済みました。メモリを8GBに抑えれば3万ぐらい作成可能です。

当初は、DellのInspironのCore i3-8100/4GB/1TBモデルかHPのRyzen3/8GB/2TBを購入するつもりだった(どちらも配達料込みで4万2千円ぐらい)のですが、先週末、Dellのサイトでクーポンコードを入力する箇所を探している内に日付変更線が変わってしまいました。

p.s.

久々の自作機の組み上げだったので手間取りましたが、キモだった部分を列挙しておきたいと思います。

○ATX12Vケーブルがソケットまでとどかない→ヨドバシカメラで延長ケーブルを購入。ただし、最安値の260円のケーブルは売切れのため、366円の物を購入。

Ubuntuインストール時に1920x1080のディスプレイで左右に分かれて、表示される。→Tabキーを利用して、フォーカスを移動させて、強引にインストール。

 (USBディスク内のコンフィグファイルで解像度を変更するパラメータを追加してみたが、だめだった)

○1回目のインストールで成功していたが、画面が真っ黒→席を離れていたり、ディスプレイを繋ぎ変えたりしていたので、原因が分からなかったのですが、2回目のインストール後で原因が分かった(^^;ブランクスクリーンの設定がデフォルトが5分の為、ディスプレイオフとなっていました。

○ブランクスクリーンからの復帰→ディスプレイの電源のオフ/オンで復旧。(意外な盲点でした)

 

法人インフォ エンドポイントが変更されていた

昨日、法人インフォのAPIがリニュアルされていました。

検索が高速化されているとのことですが、まずは、エンドポイントが変わっていることを伝えて欲しいです。

変更前

https://api.hojin-info.go.jp/sparql?default-graph-uri=&query=

変更後

https://api.hojin-info.go.jp/sparql?query=

 

あと、レスポンスフォーマット(format)がjsonのみとなっています。

 

修正変更の詳細は、サイトにあるAPI.pdfを参照してください。

上記の変更を行ったうえで、実行したところ、以前は、さくさく動作していたのにレスポンスが成功していたり、タイムアウトしていたりと、改悪されてます。orz

SPARQL LIKE演算子や列名の全出力のやり方

 会社情報を調査するバイトをしているのだが、当然、会社が倒産や破産をしていたらバイト代はでない。そこで、法人インフォのサイトで会社が閉鎖されていないか、あらかじめチェックを行っている。毎回、手動でチェックをするのも面倒くさいので3ヶ月ほど前にバッチ処理で洗い出している。

 最近、気が付いたのだが、ごくたまに資本金や設立日が出力されるのに気が付いた。で、ちょっと検索方法がカスタマイズできないか、調査してみた。

 まずは、簡単にSPARQL(スパークル)言語を説明すると、RDFクエリ言語の1つで、SQLのSELECT演算子みたいなものだと認識している。

SPARQLは、SELECT~FROM~WHEREと構文的にはSQLと一緒だが、変数の頭に?をつけるのとWHERE句の行の連結には末尾にピリオドをつけるような感じ。

 試したいのは、SQLでよくあるSELECT *、つまり列名の全項目ができるかとLIKE演算子相当なものがあるかということ。

LIKE演算子はそのまま使用できず、

FILTER regex(変数名,"抽出したい文字列")

と記述する。

f:id:gaggit:20190314163231p:plain

SPARQL1

一般的な正規表現と同様に検索したい文字列の文頭に'^'を付加すれば前方一致検索、末尾に'$'を付加すれば後方検索。

上記の画像は、法人インフォのサイトで、一度検索した後、最下段の「SPARQLクエリ」ボタンを押した画像で、クエリを編集できるようになっており、実行ボタンを押すと、クエリに従って再抽出できる。

また、検索したい文字列の囲みは、シングルクォートでもダブルクォートでも使用可能。

 列名の全出力は、SELECT *~のままだが、WHERE句で定義されている全変数という意味合いなので、定義されていない項目は残念ながら出力されない。

下記は、件名を神奈川県で絞ったうえで、SELECT *~。

f:id:gaggit:20190314172329p:plain

SPQRQL2

 

定義するのが、面倒くさいのでアスタリスクを使用したかったのですが、少し残念な結果でした。

調査にあたり、以下の「RDF用クエリ言語SPQRQL」の和訳サイトを参照しました。

 

参考リンク

RDF用クエリ言語SPARQL