2013-01-01から1年間の記事一覧

Occurrence Indicatorの使い方(2)

このまえOccurrence Indicatorについて少し書きましたが、どうも私の認識は甘かったようです.何が甘かったかというと、世の中には「必ずしも意図しない誤った使い方」が存在しているからです.特に?と*のxsl:paramでの使い方です. 例えば以下のようなコー…

Scalaのmatch式(4)

要素+属性のマッチングに挑戦してみました.マッチングには要素の場合と同様に、case Elem(~)のコンストラクタパターンを使用します. object Elem extends Serializable http://www.scala-lang.org/api/current/index.html#scala.xml.Elem$ This singleto…

Scalaのmatch式(3)

Scalaのコンストラクタパターンでネームスペースを含む要素のマッチングがちゃんとできないものか試してみました.まず作ったのは次のようなプログラムです. import scala.xml.Elem import scala.xml.NamespaceBinding object matchTest { def main(args: A…

Occurrence Indicatorの使い方

先日レビューのために何年も前のコードを読み返す機会がありました.恥ずかしながら自分のコードを見ても理解できない箇所があります.それは、変数のSequenceType Syntaxにおける、OccurrenceIndicatorの使い方です. SequenceType Syntax http://www.w3.or…

Scalaのmatch式(2)

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式(1)

最初にScalaのmatch式を見たいと思います.有名なMartin Odeskey教授は邦名「Scalaスケーラブルプログラミング(インプレス刊)」で次のように記しています. 「Scalaのmatch式を使えば、他の言語のswitch文と同じように、いくつかの選択肢(alternative)か…

VBチームのブログ(2)

VBチームのブログの言わんとするところは次のようなことではないかと考えられます. 1.XMLファイルをコピーする抽象クラスをつくる.XMLの構成要素を個別にコピーする処理はすべて実装する. 2.このクラスを継承した目的の処理を実装するクラスを作る.…

Fatal Error! Too many nested apply-templates calls. The stylesheet may be looping.

もしご覧のあなたがXSLTスタイルシート開発者で、このメッセージにお目にかかった経験がおありならたぶんなんとかこの障害を乗り越えたのではないかと思います.でも今回私は非常にドジを踏んで、解決にはやたらに時間をかけてしまいました. それはDITA-OT…

VBチームのブログ(1)

以前紹介しましたが、MicrosoftのVisual Basicの開発チームのブログに、VBでXMLを処理する一連のトピックが載っています.ファイルをコピーする、XSLTと同じような変換処理を記述するというサンプルもあり、なかなかおもしろく読めます. VB XML Cookbook ht…

プログラミング言語とネームスペース(6)

標準のScalaのネームスペースサポートは散々でした.Elemクラスにnamespaceというメソッドはあるのですが、QName(修飾名)を記述して絞り込む手段がなかったからです. それではScales XMLはどうでしょうか?私はScales XMLにはあまり詳しくありません.と…

アラビア語の実装

たまたまDITAでアラビア語の仕事をさせていただいています.XSL-FOは左から右へ書く通常の英語だけでなく(writing-mode="lr-tb")、右から左にも書く(writing-mode="rl-tb")にも対応しています.でも実戦でこれを使うかどうかとなるとひとえにお客様がそ…

テーブルのタイトルに&quot;(Continued)&quot;と出す. (3)

お客様からテーブルの表題に「(Continued)」と出すのも良いけれど、テーブルのフッター部分に「Continues to the next page」と出せないかという要望が寄せられました.せっかくなのでサンプルを紹介します.仕様は以下のようになります. 1.テーブルの開…

プログラミング言語とネームスペース(5)

Scalaでネームスペースを使う例を紹介します. まずいままでVBやF#でネームスペースを扱うのにそれなりの「儀式」をしてきました.ところがScalaでは、 http://blogs.yahoo.co.jp/tnakita/14853232.html でネームスペースをつけたMusicLibraryNS.xmlを処理し…

プログラミング言語とネームスペース(4)

F#の例を紹介します.XPathを使用する場合はほとんどVBと同じです.XmlNamespaceManagerクラスを生成して、接頭辞とネームスペースを必要なだけ登録します.XmlNamespaceManagerクラスは、XPathSelectElementsメソッドを実行するときに指定します. open Sys…

XSLT2.0で便利になった機能(54) xsl:perform-sort

文書系のスタイルシートを作っていると、なかなかxsl:sortにお目にかかる機会がありません.せいぜいあるとすれば<indexterm>をABC順(日本語ならあいうえお順)にソートするときくらいでしょうか?今回たまたまxsl:sortを使う機会がありました.どのような場合かという</indexterm>…

プログラミング言語とネームスペース(3)

.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をめぐる議論(2)

知らないということは単に自分だけの問題にとどまらず、大いに他人にも迷惑をかけることであると感じました.今回のXSL-FO 2.0をめぐる議論で、XSL-FO 2.0が流産してCSSへの道まっしぐらというのはW3CにとってもXSL-FOのユーザーにとってもまったく良いこと…

XSL-FO 2.0をめぐる議論

XSL-ListのLiam Quinの発言は見逃すことができなかったので、 http://thread.gmane.org/gmane.text.xml.xsl.general.mulberrytech/89430 つたない英語で必死に発言しました.(もっと英語は勉強しておけばよかった!) http://thread.gmane.org/gmane.text.x…

JAXPでのデバッグ

もう何年もメンテナンスしているJavaのライブラリがあります.でもさわるのは2年に一度程度.元々海外からいただいたライブラリのなので、すべてを理解しているわけではなく、メンテナンスの都度ロジックを必死に思い出さねばなりません.なお話を複雑にして…

DITA Festa 2013 Autumn

DITA Festa 2013 Autumnが10/23~10/25の3日間六本木の富士ゼロックス本社を会場に開催されました.私は今回も仕事が忙しいのでパスしようかと思っていたのですが、一念発起して「勉強してこよう」とリーダーの承認をもらって3日間参加してきました.しかし…

プログラミング言語とネームスペース(2)

Javaのネームスペースの使い方の例です.JavaではネームスペースのハンドリングはNamespaceContextインタフェースをインプリメントしたクラスをXPathクラスに登録することで実現されます. Interface NamespaceContext http://docs.oracle.com/javase/7/docs…

プログラミング言語とネームスペース(1)

XMLを扱う言語にとってネームスペースはある場合には鬼門にもあたるような存在ではないかと思えます.例えばパーサーを作るのだったら <a xmlns="uri:xslt:testa"> <b xmlns="uri:xslt:testb"> <c xmlns="uri:xslt:testc"> text </c> </b> </a> とデフォルトネームスペースが要素a~cとナビゲートするのに従って変わってゆくのを管理しなければなりませ…

DITAのdir属性のテンプレート

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/…

プログラミング言語とXPath(9) Scales XMLをつかってみる.

以前Scalaの標準のXMLサポートでは"\\"でXpathの"//"を表し"\"で"/"を表すというXPathライクな表記が出来ることを紹介しました.でもScalaですからこれらは、実はみんなメソッドです.Scales XMLの場合はどうなのでしょうか?以前の http://blogs.yahoo.co.j…

プログラミング言語とXPath(8) Scales XMLをつかってみる.

Scales XMLでXPathを試してみました.プログラムは以下のように超簡単なものです. package xmltest import scales.utils._ import ScalesUtils._ import scales.xml._ import ScalesXml._ import scales.xml.Functions._ import java.io._ import scalaz._ …

XSLT2.0で便利になった機能(53) use-when属性

今まで10年以上XSLT1.0で動かしてきたシステムが、Word2003のサポート終了でWord2013へ移行することになりました.Word2003の出力するWordMLを使用してきたのですが、同じWordMLでもWord2013の吐き出すWordMLは相当毛色が違います. 実際にWord2013の出したW…

プログラミング言語とXPath(7) Scales XMLをビルドしてみる

前回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で便利になった機能(52) xsl:param/@as属性

もう前に一回書いている気もしますが、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>…

XSLT2.0で便利になった機能(52) xsl:template(続き)

テンプレートから複数の種類のitem()から成るシーケンスを返す例を紹介します.例えば次のような要望があったと考えます. ① section/divという要素構造がある.sectionはdivから構成され、divがテキストを持つ. ② divの文字数が一定数以上のものを抽出した…

XSLT2.0で便利になった機能(51) xsl:template

いまさらですが、xsl:templateについて考え直してみました.XSLT2.0でテンプレートはどのように変わったのでしょうか?これは仕様でどのようにテンプレートが定義されているかを見ればわかります. [XSLT1.0] <xsl:template match = pattern name = qname priority = number mode = qname> </xsl:template> 5.3 Defining Templa…