トップページtech
990コメント371KB

【XML】xmlns, XSLT, RelaxNG, JAXP, etc.【総合】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/11/30(水) 01:08:08
XMLなんでもスレ。


関連情報は、>>2-10位に適当に。

※RSSなどのWeb限定の話題は、Web板でどうぞ(XHTMLはローカルでも使うから可)。


前スレ? 【必須?】XML技術【使ってる?】
http://pc8.2ch.net/test/read.cgi/tech/1090253584/
0666デフォルトの名無しさん2007/11/13(火) 20:29:25
>>665
ちょっと余計なものが付くがこれで良ければ。

<xsd:element name="url" type="urlType" />
<xsd:complexType name="urlType" abstract="true" />
<xsd:complexType name="httpType">
 <xsd:complexContent>
  <xsd:extension base="urlType">
   <xsd:sequence>
   <xsd:element ref="host" />
   <xsd:element ref="port" />
   <xsd:element ref="path" />
  </xsd:sequence>
  <xsd:attribute name="scheme" type="schemeType" use="required" fixed="http" />
 </xsd:extension>
 </xsd:complexContent>
</xsd:complexType>
<xsd:complexTpe name="mailtoType">(略)</xsd:complexType>

<url scheme="http" xsi:type="httpType">
 <host>www.foo.com</host>
 <port>80</port>
 <path>/hoge/unko.txt</path>
</url>
<url scheme="mailto" xsi:type="mailtoType">(略)</url>

xsi:typeが省略されるとurlTypeはabstractなのでエラーになる。
0667デフォルトの名無しさん2007/11/13(火) 20:42:36
>>666
なるほど、ベースを abstract で宣言しておいて、拡張のほうで "http", "mailto" を
fixed 指定にしておけば属性値ごとに中の定義が変更できるような使い方になりますね。
帰って試してみます。schemaType は string じゃダメなんでしょうか?
0668デフォルトの名無しさん2007/11/13(火) 21:12:20
>>667
schemeTypeはenumerationにしてたんだが行数の都合で省略したのを忘れてた。
もちろんstringでいいと思う。
0669デフォルトの名無しさん2007/11/14(水) 04:02:31
高橋麻奈の「やさしいXML 第2版」という本で、ちょうどXSLの操作を勉強しています。

練習問題での自分の回答と巻末の模範解答が違うことがあるのですが、同じことができる
スタイルシートを作れていれば「正解」としていいのでしょうか?

たとえば、
<xsl:template match="car">
  <car>
    <xsl:attribute name="file">
       <xsl:value-of select="img/@file"/>
    </xsl:attribute>
    <xsl:apply-templates select="name"/>
    <xsl:apply-templates select="price"/>
 </car>
</xsl:template>

とするべき(?)ところで、<car>のかわりに、<xsl:copy>と書いてしまったのですが、
XMLの理解の上では問題ありませんよね?

他にも
<xsl: copy-of select="."/>と書く方法と、

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

と丁寧に書く方法がありますが、XMLの勉強では好きな方選べばよいのかな・・・
0670デフォルトの名無しさん2007/11/14(水) 07:14:27
>>669
与えられた入力と求める出力(いずれもXMLか)を貼らないと
XSLT知ってる人でも答えにくいと思うぞ。
0671デフォルトの名無しさん2007/11/14(水) 16:45:43
まずはやさしいシリーズを捨てる所からだな。
悲しいけどこれってマジレスなのよね。
06726692007/11/15(木) 00:03:12
>>671
やさしいXML、Java活用編ともに終盤にさしかかっているので・・・
結局3冊買っちゃいました
0673デフォルトの名無しさん2007/12/01(土) 18:03:12
<foo:bar>ほげほげほげ
ふーばー
おっぱっぴー</foo:bar>

みたいなのを、

<xhtml:div>ほげほげほげ<br/>
ふーばー<br/>
おっぱっぴー<xhtml:div>

みたいにしたいんだけど、どう書けばいいんでしょうか。
0674デフォルトの名無しさん2007/12/01(土) 18:04:55
あ、XSLTの話です。
0675デフォルトの名無しさん2007/12/01(土) 18:59:26
substring-before, substring-afterでも駆使して再帰的に変換すればいいんじゃなかろうか。

とはいえ、データ構造から見直したほうがいいとおもうよ
0676デフォルトの名無しさん2007/12/01(土) 19:11:18
>>673
やってやれないことはないがあまりオススメしない。
HTMLにするならpreじゃいけないのか?

<xsl:param name="line.delimiter" xml:space="preserve">&#xD;&#xA;</xsl:param>

<xsl:template match="foo:bar">
 <xhtml:div>
  <xsl:call-template name="substitute">
   <xsl:with-param name="str" select="text()" />
  </xsl:call-template>
 </xhtml:div>
</xsl:template>

<xsl:template name="substitute">
<xsl:param name="str" />
 <xsl:choose>
  <xsl:when test="contains($str, $line.delimiter)">
   <xsl:value-of select="substring-before($str, $line.delimiter)" />
   <xsl:text disable-output-escaping="yes">&lt;br /&gt;</xsl:text>
   <xsl:value-of select="$line.delimiter" />
   <xsl:call-template name="substitute">
    <xsl:with-param name="str" select="substring-after($str, $line.delimiter)" />
   </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>
   <xsl:value-of select="$str" />
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>
0677デフォルトの名無しさん2007/12/04(火) 00:05:29
XSLTで
<a>
<elem-a/><elam-b/>
</a>
<b>
<elem-1/><elem-2/>
</b>

<c>
<elem-a/><elam-b/>
<elem-1/><elem-2/>
</c>
に書き換えたいのですが、
<template match="a|b">
<c>
<apply-template select="*"/>
</c>
</template>
とやったら(記憶で書いてるので細かい点、ちょっと嘘かも)
<c>
<elem-a/><elam-b/>
</c>
<c>
<elem-1/><elam-2/>
</c>
となってしまいました。どのように書けばよいのでしょう?
0678デフォルトの名無しさん2007/12/04(火) 23:34:32
んー、OPMLをXHTMLに変換するXSLT書いてるんだけど、
outlineがexpansionStateに含まれているかどうかってどうすれば知ることができるんだろうか
0679デフォルトの名無しさん2007/12/04(火) 23:42:40
>>677
<a>と<b>の親にテンプレート適用して、
<a>と<b>の子とってくればいいんじゃなかろうか
0680デフォルトの名無しさん2007/12/05(水) 00:35:14
>>679
なるほどそう書くのですか。それで出来そうですね。
0681デフォルトの名無しさん2007/12/05(水) 00:36:26
>>678
outlineの親要素のローカル名がexpansionStateかどうかを調べればよいのでは。
もしexpansionState要素の子要素であるoutlineに何かしたいなら
マッチングパターンを変えてテンプレートを作成すればいい。
0682デフォルトの名無しさん2007/12/07(金) 19:54:39
libxml使ってるんだけど、xmlXPathContextPtrってxmlDocPtrがないと生成できないの?
xmlNodePtrからいちいちxmlDocPtr生成するの面倒い…
0683デフォルトの名無しさん2007/12/10(月) 02:52:30
XMLスキーマでユーザー定義の型をつくるとき、同じ型のリストはxsd:list を使えばできますが、例えば int のあと float 2つみたいな型を定義するにはどうすればいいでしょう?
<hoge>1 2.0 3.0</hoge>
のような。
xsd:pattern で正規表現を指定する他に方法ありますか?
0684デフォルトの名無しさん2007/12/21(金) 12:52:44
>>683
んーそもそも、XMLというかデータ構造的に、そうした型の設計は
好ましくない気がするんだけど、どうしてもそれじゃなきゃだめなのけ?
0685デフォルトの名無しさん2007/12/21(金) 20:31:19
XML をいわば Unicode データのコンテナ的に使っていますが、
XML 1.0 で定義されている文字を外れるコードが含まれると(例えば 0x1f 以下の
制御文字とか)エラーになってしまうようで、困っています。
この手の問題ってどうしたらいいと思いますか? とりあえず自前の文字参照みたいのを
定義して、かませようかと思っていますが...
0686デフォルトの名無しさん2007/12/21(金) 20:41:32
 じゃダメなのか。
0687orz2007/12/21(金) 20:41:59
&#x1F; じゃダメなのか。
0688デフォルトの名無しさん2007/12/21(金) 20:56:29
>>686
年の瀬も近くてまったりしようと思ってたのに、いまさら自前のコードを起こして
テストするのが面倒でw XML の範疇でなんとかならないかと思って。


>>687
それは「文字」参照なんで、XML の範疇で文字として扱われていないコードに対しては
駄目みたいです、というのが自分の理解。ちなみに CDATA も同様。
0689orz2007/12/21(金) 21:00:17
じゃ Base64 でも何でも使えば良いじゃん。
0690デフォルトの名無しさん2007/12/21(金) 21:01:12
ちなみに XML 1.1 だと文字コードの範囲が広がってるんですけど、
巷の XML ライブラリってまだ 1.1 をほとんどサポートしてないですよね?
0691デフォルトの名無しさん2007/12/21(金) 21:04:56
>>689
はい、それもアリなんですが、可読性がなくなるのがちょっと不便というか...
その XML を生でみたいときもあるので。
0692デフォルトの名無しさん2007/12/21(金) 21:08:12
<char codepoint="0x1f"/>
とか適当にでっちあげればいいじゃん。
0693デフォルトの名無しさん2007/12/21(金) 21:19:41
quoted-printable か URL フォームエンコーディングとかでも。
ちなみに 「ダメです」 ってのは何かアプリ的な不具合なのか、それとも潔癖原理主義的なものなのか。
0694デフォルトの名無しさん2007/12/21(金) 21:21:13
>>692
すみません、それってどうやって使うんですか?

例えば
<text>制御文字が入ったテキスト 0x1f</text> (0x1f は実際にはバイトデータ(で、不正))

<text>制御文字が入ったテキスト <char codepoint="0x1f"/></text>
みたいな?
で、このテキストを取り出すときに何らかの処理で元のバイトデータに戻す?
ちなみに今は XPath でこの要素を取り出したりしているんですが... 変更は簡単かな?
0695デフォルトの名無しさん2007/12/21(金) 21:40:18
>>693
>quoted-printable か URL フォームエンコーディングとかでも。

日本語が結構入るんで、ちょっと厳しいですかね。 

>ちなみに 「ダメです」 ってのは

えっとその「ダメです」がどれを指しているかわかりませんが、要は XML のエラーを
XML を処理しているレイヤーの回りで、なるべく楽に、インパクトを少なく回避するか、
ということです。
0696デフォルトの名無しさん2007/12/21(金) 23:53:07
PI使えばいんじゃね?
でアプリ側で自由に処理すればいい。
0697デフォルトの名無しさん2007/12/21(金) 23:54:56
まあ、文章をデータコンテナなんかに使おうと思うからそんな矛盾が起きるわけで。
そもそも発想が間違ってる。
0698デフォルトの名無しさん2007/12/21(金) 23:57:40
なんでもかんでも XML は良い事だ (2001年日経)
0699デフォルトの名無しさん2007/12/22(土) 00:09:45
XML Schema的にはhexBinaryかbase64Binary
0700デフォルトの名無しさん2007/12/22(土) 00:18:12
xmlなアプリ実装すると考えればPIのdataにBase64が鉄板か?
0701デフォルトの名無しさん2007/12/22(土) 00:37:46
もう MD5 で良いじゃん。
0702デフォルトの名無しさん2007/12/22(土) 15:24:41
>>701
え?w
0703デフォルトの名無しさん2007/12/22(土) 15:51:07
きっと、逆変換するアルゴリズムを開発した超絶ウルトラスーパーハッカーなんだよ。
0704デフォルトの名無しさん2007/12/22(土) 21:55:00
俺はエロ画像のSHA1で抜ける!
0705デフォルトの名無しさん2007/12/22(土) 22:56:37
なんだこの流れ?
0706デフォルトの名無しさん2007/12/24(月) 13:18:59
俺もそういう文字扱いたかったから、xml1.1にしたよ。
0707デフォルトの名無しさん2007/12/24(月) 13:32:03
xml1.1まともに扱えるパーサ教えてください
07087062007/12/24(月) 14:07:21
まともの定義がわからないけど、俺はjavaでStAX使いたいからWoodstoxだよ。
ttp://woodstox.codehaus.org/
JDK6とか新しめのJAXPでもxml1.1は使えるでしょ?
0709デフォルトの名無しさん2007/12/30(日) 18:02:23
<xsl:for-each> でノード集合を逆順に列挙するのってどう書いたら良いですか?
0710デフォルトの名無しさん2007/12/30(日) 18:14:50
xpath2.0ならreverseが使える。1.0はよう知らん
0711デフォルトの名無しさん2007/12/30(日) 18:39:07
>>709
<xsl:sort>でソートするんじゃダメ?
0712デフォルトの名無しさん2007/12/30(日) 19:48:56
<xsl:for-each> の直下に <xsl:sort order="descending" /> 置いたらできますた。
0713デフォルトの名無しさん2007/12/30(日) 23:36:32
XMLでbase64を使う意味が分からない。
Unicode使えるんだから、もっと膨張を抑えたエンコードも出来るはず。
0714デフォルトの名無しさん2007/12/31(月) 05:28:28
別に必ずしもbase64でエンコードする必要はない。
0715デフォルトの名無しさん2007/12/31(月) 09:58:36
ish?
0716デフォルトの名無しさん2007/12/31(月) 11:34:27
イクラちゃんishで
0717デフォルトの名無しさん2008/01/01(火) 20:37:49
XMLDBでxindiche以外でフリーでつかえるものってある?
0718デフォルトの名無しさん2008/01/03(木) 16:53:52
libexpatw の最後の w って何ですかw
0719デフォルトの名無しさん2008/01/03(木) 18:42:22
wchar_tのw
0720デフォルトの名無しさん2008/01/09(水) 10:06:44
>>717
eXistかDB2のExpress-Cでも使っとけ
0721デフォルトの名無しさん2008/01/12(土) 00:12:51
XPath, XQuery の仕様読んでるが何か SQL の再発明めいてきたなこれ。
0722デフォルトの名無しさん2008/01/12(土) 01:01:46
似せたんじゃなかったけクエリー言語として。
0723デフォルトの名無しさん2008/01/12(土) 01:48:41
XMLの検証で質問です。

<a>
<b>ABC</b>
<b>123</b>
</a>

このようなXMLで、1番目の<b>要素はstring型、2番目の<b>要素は
integer型であることを検証したいと思っているのですが、wxsでは
同名の要素を異なる型で定義することができません。
何かうまい方法はないでしょうか?
0724デフォルトの名無しさん2008/01/12(土) 02:15:31
要素名を変える
0725デフォルトの名無しさん2008/01/12(土) 03:04:09
string型はinteger型を包含するから無駄な検証だな。
0726デフォルトの名無しさん2008/01/12(土) 08:37:20
というか1番目の要素はルート要素であるaじゃないの?
色々と間違ってる。
0727デフォルトの名無しさん2008/01/12(土) 08:46:32
さすがにそうは読めんが。
0728デフォルトの名無しさん2008/01/12(土) 10:19:15
名前空間を変える。
0729デフォルトの名無しさん2008/01/12(土) 10:34:36
PIでやってもいいな。
0730デフォルトの名無しさん2008/01/12(土) 13:49:14
PIって何?
0731デフォルトの名無しさん2008/01/12(土) 13:53:49
Processing Instruction
0732デフォルトの名無しさん2008/01/12(土) 15:16:25
>>725
well-formed XML は valid XML を包含するからvalidatorは必要ない?
0733デフォルトの名無しさん2008/01/12(土) 16:36:44
>>723
そんなスキーマの設計になる納得の行く理由を聞きたいが。
0734デフォルトの名無しさん2008/01/12(土) 17:12:28
>>732
うん。
non-valid XMLだったら、wel-formed XMLであることを調べる。← これは馬鹿げている。

もっとも、元質問は
> 同名の要素を異なる型で定義することができません。
ではなくて
< 要素の出現順で異なる型を定義したい
という事のようなので、オレの読み違いのようだけど。
0735デフォルトの名無しさん2008/01/12(土) 18:43:46
>non-valid XMLだったら、wel-formed XMLであることを調べる。
今回は違うが、食わせるxmlが不定の場合、エラーハンドラくらい実装するから、
これはwel-formedかどうか調べる事になるから別に馬鹿げてる訳でもないと思うが。

馬鹿げてるのはnon-wel-formedなxmlでもパース出来るパーサかと。実際にあるが。
0736デフォルトの名無しさん2008/01/12(土) 19:11:10
if ( i > 0 || i >= 0)
↑これを馬鹿げているといってるんだけど、コンパイラが最適化するから問題ないというならそれでもいい。
0737デフォルトの名無しさん2008/01/12(土) 19:29:09
>>725が言っているのは、i の定義が「数値」であるならば「0より大きい数値」を
包含してるから、その比較自体無駄だということだろ?
0738デフォルトの名無しさん2008/01/12(土) 21:24:23
そういう事か他言語にバインドした後の話ね。そういう使い方はした事ないな。
07397232008/01/13(日) 01:12:15
いろいろな意見ありがとうございました。
結局手はないようですね。

背景説明を端折っていましたが、このXML文書は外部で仕様が定められて
いるもので、それを定義したスキーマ文書は別に存在します。
ただし汎用的なフォーマットなのでかなり制約は緩いものとなっています。
逆にこれを利用するシステム/装置側はそのすべてのバリエーションを
許容することができないため、その特定用途向けの検証をwxsで行おうと
考えていました。
実際に要求されている制約は「name属性が"aaa"の場合はxxx属性が必須で
テキストはxx文字以内」などというものだったりするのですが、さすがに
それは無理だろうと考えていたので、要素の出現順を固定して「1番目の
要素はname属性が"aaa"に等しく、〜」という形で検証しようとしていました。

実はその検証用のxsdを作成する際はSunのmsvを確認に使っていて、
そこでは意図したとおりの検証ができていました。ところがこれを利用する
プログラムが出来て、そちらに掛けてみたところスキーマ文書が受け付け
られず、問題が発覚しました。
ですのでxsdの記述だけで解決できればよかったのですが、別途チェック
プログラムを起こしたりする必要がありそうですね。
0740デフォルトの名無しさん2008/01/13(日) 02:09:10
スキーマの設計が悪い。
0741デフォルトの名無しさん2008/01/13(日) 02:12:42
すげぇ無駄な事してるな・・・何とかしようと思う723は凄い
0742デフォルトの名無しさん2008/01/13(日) 02:14:41
>>739
ああ、よくある、上から降りてきた設計のしわ寄せが現場に来るの図ね。
まあそんなことだと思ったよ。
きっとスクリプトで楽することもできないんだろう。
頑張って追加のコードを組んでください。
0743デフォルトの名無しさん2008/01/13(日) 03:00:20
あら
0744デフォルトの名無しさん2008/01/13(日) 03:05:57
まぁ文章の完全な正当性なんて DB やホストに問い合わせてみないと保障できない
なんてのもよくある話だから、スキーマベースの検証の限界だと思ってプログラムで
確認しなはれ。
0745デフォルトの名無しさん2008/01/13(日) 03:50:54
それとこれとは別だろ。どうみてもスキーマの設計ミス。
というかバカだろそのスキーマ作った奴。
0746デフォルトの名無しさん2008/01/13(日) 09:19:36
Processing Instruction の位置づけがよく分からんのですが、例えばどういうときに
自分定義の PI を導入するもんですか?
0747デフォルトの名無しさん2008/01/13(日) 10:58:16
適当な例が思いつかんが、たとえば、>>685の質問をPIで何とかしようと思うと、

<text><?[[Here is an U+00 ->]]><?character U+00?><?[[<-.]]></text>

こんな感じになるかもしれない。
0748デフォルトの名無しさん2008/01/13(日) 11:06:09
ボケてたよー

<text><?[CDATA[Here is an U+00 ->]]><?character U+00?><?[CDATA[<-.]]></text>
0749デフォルトの名無しさん2008/01/13(日) 11:06:53
ごめん。寝てないんだよー

<text><![CDATA[Here is an U+00 ->]]><?character U+00?><![CDATA[<-.]]></text>
0750デフォルトの名無しさん2008/01/13(日) 11:40:19
まずその XML を特定のプログラムで加工処理するという前提があって、そのプログラム用に
データでも文章でもない制御系の情報を埋め込むためのもの、という感じで良いのかな?
C で言う #pragma 命令みたいな。<?compiler warning="suppress"?> とか
<?scanning very-very-secure?> とか <?verify hash="02F84298FEDFA" algorithm="md5"?> とか。
0751デフォルトの名無しさん2008/01/13(日) 11:47:04
まあ、そんなもの。
XMLプロセッサは、対応していないPIは無視することになってるから、#pragmaと一緒やね。
0752デフォルトの名無しさん2008/01/13(日) 13:52:12
XML デービー って何なの? 既存の XML ファイルに SQL で照会掛けたりできるの?
0753デフォルトの名無しさん2008/01/13(日) 22:39:47
できるものもある。
0754デフォルトの名無しさん2008/01/14(月) 16:25:07
XSL-FOの話題ってここでいいのか?
組版の話だから違うような気もするんだが。
もし妥当なスレがあったら教えてくれるとありがたい。
0755デフォルトの名無しさん2008/01/14(月) 16:29:39
関連技術なら何でもいいと思うよ。

答えられる人がいるかどうかは、また別の話だけど。
0756デフォルトの名無しさん2008/01/14(月) 21:23:35
XML関連の質問って、どこにもって行けばいいのか分からないよなぁ。
このスレではわりと勉強させてもらっているが。

あと、XML DBの話はこういうのがある。俺もまだ第一回しか読んでないんだが。
http://www.atmarkit.co.jp/fdb/rensai/xmldbdev01/xmldbdev01_1.html
0757デフォルトの名無しさん2008/01/14(月) 23:01:25
>>756
ソレ、役に立たない。
0758デフォルトの名無しさん2008/01/14(月) 23:31:13
XSL-FOはここだろうけど実装が限られるし仕様自体も紙媒体への印刷を考慮されて巨大化してるから分かる人は少ないよ。

XSLとXSL-FOの関係もろくに理解してない奴らばかりだし。

とりあえず仕様書は嫁。でかいけど。
0759デフォルトの名無しさん2008/01/15(火) 01:03:36
おまいさんが理解してるんだろう。
0760デフォルトの名無しさん2008/01/15(火) 20:44:02
XSL で 0 パディングってどうやればいいの?
0761デフォルトの名無しさん2008/01/16(水) 20:56:24
format-number
0762デフォルトの名無しさん2008/01/18(金) 17:25:02
XML-FOなんて扱えるソフトすらもってねえ
0763デフォルトの名無しさん2008/01/18(金) 19:38:02
PDF変換とかに使われてるくらいかな?
SVGは使われ始めてるのに、こっちは使われてないんだよな。
WYSIWYG特性はこっちのが強いはずなのに。
07647542008/01/18(金) 19:48:36
アクセス規制に引っかかって年末からずっと書けやしない。
今も自宅とは別のマシンから書き込んでる。

で、聞きたかったのはあるブロックがページをまたがないよう
に指定ってできるのかねってこと。
ちなみに俺が使ってるのはXSLFormatter体験版。
0765デフォルトの名無しさん2008/01/18(金) 20:49:43
SVGはIEが対応してないからなぁ.
しかも Adobe が配布していた
SVG ビューアもなんかどっかいっちゃった.
■ このスレッドは過去ログ倉庫に格納されています