2013-01-01から1年間の記事一覧
このまえOccurrence Indicatorについて少し書きましたが、どうも私の認識は甘かったようです.何が甘かったかというと、世の中には「必ずしも意図しない誤った使い方」が存在しているからです.特に?と*のxsl:paramでの使い方です. 例えば以下のようなコー…
要素+属性のマッチングに挑戦してみました.マッチングには要素の場合と同様に、case Elem(~)のコンストラクタパターンを使用します. object Elem extends Serializable http://www.scala-lang.org/api/current/index.html#scala.xml.Elem$ This singleto…
Scalaのコンストラクタパターンでネームスペースを含む要素のマッチングがちゃんとできないものか試してみました.まず作ったのは次のようなプログラムです. import scala.xml.Elem import scala.xml.NamespaceBinding object matchTest { def main(args: A…
先日レビューのために何年も前のコードを読み返す機会がありました.恥ずかしながら自分のコードを見ても理解できない箇所があります.それは、変数のSequenceType Syntaxにおける、OccurrenceIndicatorの使い方です. SequenceType Syntax http://www.w3.or…
ScalaでXMLリテラルを使ったmatch式を試してみました.作ったのは次のようなちょっと恣意的なテストプログラムです. def main(args: Array[String]): Unit = { val doc = <nsb:block xmlns:nsb="urn:block"> <nsi:inline xmlns:nsi="urn:inline1" seq="1">phrase1 <nsi:inline xmlns:nsi="urn:inline2" seq="2">phrase2 </nsi:inline> </nsi:inline> </nsb:block> val nodeS…
最初にScalaのmatch式を見たいと思います.有名なMartin Odeskey教授は邦名「Scalaスケーラブルプログラミング(インプレス刊)」で次のように記しています. 「Scalaのmatch式を使えば、他の言語のswitch文と同じように、いくつかの選択肢(alternative)か…
VBチームのブログの言わんとするところは次のようなことではないかと考えられます. 1.XMLファイルをコピーする抽象クラスをつくる.XMLの構成要素を個別にコピーする処理はすべて実装する. 2.このクラスを継承した目的の処理を実装するクラスを作る.…
もしご覧のあなたがXSLTスタイルシート開発者で、このメッセージにお目にかかった経験がおありならたぶんなんとかこの障害を乗り越えたのではないかと思います.でも今回私は非常にドジを踏んで、解決にはやたらに時間をかけてしまいました. それはDITA-OT…
以前紹介しましたが、MicrosoftのVisual Basicの開発チームのブログに、VBでXMLを処理する一連のトピックが載っています.ファイルをコピーする、XSLTと同じような変換処理を記述するというサンプルもあり、なかなかおもしろく読めます. VB XML Cookbook ht…
標準のScalaのネームスペースサポートは散々でした.Elemクラスにnamespaceというメソッドはあるのですが、QName(修飾名)を記述して絞り込む手段がなかったからです. それではScales XMLはどうでしょうか?私はScales XMLにはあまり詳しくありません.と…
たまたまDITAでアラビア語の仕事をさせていただいています.XSL-FOは左から右へ書く通常の英語だけでなく(writing-mode="lr-tb")、右から左にも書く(writing-mode="rl-tb")にも対応しています.でも実戦でこれを使うかどうかとなるとひとえにお客様がそ…
お客様からテーブルの表題に「(Continued)」と出すのも良いけれど、テーブルのフッター部分に「Continues to the next page」と出せないかという要望が寄せられました.せっかくなのでサンプルを紹介します.仕様は以下のようになります. 1.テーブルの開…
Scalaでネームスペースを使う例を紹介します. まずいままでVBやF#でネームスペースを扱うのにそれなりの「儀式」をしてきました.ところがScalaでは、 http://blogs.yahoo.co.jp/tnakita/14853232.html でネームスペースをつけたMusicLibraryNS.xmlを処理し…
F#の例を紹介します.XPathを使用する場合はほとんどVBと同じです.XmlNamespaceManagerクラスを生成して、接頭辞とネームスペースを必要なだけ登録します.XmlNamespaceManagerクラスは、XPathSelectElementsメソッドを実行するときに指定します. open Sys…
文書系のスタイルシートを作っていると、なかなかxsl:sortにお目にかかる機会がありません.せいぜいあるとすれば<indexterm>をABC順(日本語ならあいうえお順)にソートするときくらいでしょうか?今回たまたまxsl:sortを使う機会がありました.どのような場合かという</indexterm>…
.netでVBを使う例です.最初はXPathを使用する例です. Imports System.Xml Imports System.Xml.XPath Module XPath2 Sub Main() Dim xpDoc As XPathDocument = New XPathDocument("MusicLibraryNS.xml") Dim xpNav As XPathNavigator = xpDoc.CreateNavigat…
知らないということは単に自分だけの問題にとどまらず、大いに他人にも迷惑をかけることであると感じました.今回のXSL-FO 2.0をめぐる議論で、XSL-FO 2.0が流産してCSSへの道まっしぐらというのはW3CにとってもXSL-FOのユーザーにとってもまったく良いこと…
XSL-ListのLiam Quinの発言は見逃すことができなかったので、 http://thread.gmane.org/gmane.text.xml.xsl.general.mulberrytech/89430 つたない英語で必死に発言しました.(もっと英語は勉強しておけばよかった!) http://thread.gmane.org/gmane.text.x…
もう何年もメンテナンスしているJavaのライブラリがあります.でもさわるのは2年に一度程度.元々海外からいただいたライブラリのなので、すべてを理解しているわけではなく、メンテナンスの都度ロジックを必死に思い出さねばなりません.なお話を複雑にして…
DITA Festa 2013 Autumnが10/23~10/25の3日間六本木の富士ゼロックス本社を会場に開催されました.私は今回も仕事が忙しいのでパスしようかと思っていたのですが、一念発起して「勉強してこよう」とリーダーの承認をもらって3日間参加してきました.しかし…
Javaのネームスペースの使い方の例です.JavaではネームスペースのハンドリングはNamespaceContextインタフェースをインプリメントしたクラスをXPathクラスに登録することで実現されます. Interface NamespaceContext http://docs.oracle.com/javase/7/docs…
XMLを扱う言語にとってネームスペースはある場合には鬼門にもあたるような存在ではないかと思えます.例えばパーサーを作るのだったら <a xmlns="uri:xslt:testa"> <b xmlns="uri:xslt:testb"> <c xmlns="uri:xslt:testc"> text </c> </b> </a> とデフォルトネームスペースが要素a~cとナビゲートするのに従って変わってゆくのを管理しなければなりませ…
DITAにはdir属性というのがあります. 3.4.1.6 localization-atts attribute group http://docs.oasis-open.org/dita/v1.2/os/spec/common/localization-atts.html#localization-atts 2.1.3.9.2 The dir attribute http://docs.oasis-open.org/dita/v1.2/os/…
以前Scalaの標準のXMLサポートでは"\\"でXpathの"//"を表し"\"で"/"を表すというXPathライクな表記が出来ることを紹介しました.でもScalaですからこれらは、実はみんなメソッドです.Scales XMLの場合はどうなのでしょうか?以前の http://blogs.yahoo.co.j…
Scales XMLでXPathを試してみました.プログラムは以下のように超簡単なものです. package xmltest import scales.utils._ import ScalesUtils._ import scales.xml._ import ScalesXml._ import scales.xml.Functions._ import java.io._ import scalaz._ …
今まで10年以上XSLT1.0で動かしてきたシステムが、Word2003のサポート終了でWord2013へ移行することになりました.Word2003の出力するWordMLを使用してきたのですが、同じWordMLでもWord2013の吐き出すWordMLは相当毛色が違います. 実際にWord2013の出したW…
前回Scalaの標準の実装ではXMLの処理が不便であるということを書きました.ScalaにはXMLの処理を意図した別の実装が存在します.その一つがScales XMLです. Scales Xml is an alternative library for XML usage in Scala https://code.google.com/p/scala-…
もう前に一回書いている気もしますが、XSLT2.0ではxsl:paramで関数やテンプレートにパラメータを記述するときに、as属性でパラメータの型を記述することができます. <xsl:param name="prmMax" as="xsl:integer" required="yes"/> <xsl:param name="prmInputStr" as="xsl:string" required="yes"/> ※ required="yes"が書けるのはxsl:templateの場合のみです.xsl:functionでは元々必須で</xsl:param></xsl:param>…
テンプレートから複数の種類のitem()から成るシーケンスを返す例を紹介します.例えば次のような要望があったと考えます. ① section/divという要素構造がある.sectionはdivから構成され、divがテキストを持つ. ② divの文字数が一定数以上のものを抽出した…
いまさらですが、xsl:templateについて考え直してみました.XSLT2.0でテンプレートはどのように変わったのでしょうか?これは仕様でどのようにテンプレートが定義されているかを見ればわかります. [XSLT1.0] <xsl:template match = pattern name = qname priority = number mode = qname> </xsl:template> 5.3 Defining Templa…