dポイントプレゼントキャンペーン実施中!

XML,DTD,XSLの勉強をしています。
最終的に写真が表示され、その下に「PM 7:30」もしくは「19:30」と表示するようなページを作ろうと思っているのですが、属性の意味がよく理解できておらず下の3つのうちどれを採用したらいいか悩んでいます。どれが正解というか、どれを選ぶのがいい方法なんでしょうか?
また、その理由(属性について)教えて頂けないでしょうか?具体的には次の2つが疑問点です。

1. 写真を表示するのに、写真のアドレスを属性にする理由はなんとなく分かるような気がするにですが、いまいちはっきりした理由が理解できていません。
DTDを<!ELEMENT アルバム (#PCDATA) >にして、XMLを<アルバム>0101.jpg</アルバム>でも写真の表示は可能なのでしょうか?

2. 一番の疑問点なのですが、時間を(#PCDATA)にするのか、EMPTYにして属性で CDATA にするべきなのかがよく分かりません。
(「分」も属性値にしてしまった方がいいのでしょうか?)

(xslは、まだ作成していません。)
よろしくお願い致します。

具体例↓ 3つ

「arubamu.dtd」
<?xml version="1.0" encoding="Shift_JIS"?>
<!ELEMENT アルバム (時,分) >
<!ATTLIST アルバム file CDATA #REQUIRED >
<!ELEMENT 時 EMPTY >
<!ATTLIST 時 ampm (am|pm) "am" >
<!ATTLIST 時 time CDATA #REQUIRED >
<!ELEMENT 分 (#PCDATA) >

「アルバム.xml」
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE アルバム SYSTEM "arubamu.dtd">
<アルバム file = "0101.jpg" >
<時 ampm = "pm" time = "7" />
<分>30</分>
</アルバム>

------------------------------------------------------------------
「arubamu2.dtd」
<?xml version="1.0" encoding="Shift_JIS"?>
<!ELEMENT アルバム (時) >
<!ATTLIST アルバム file CDATA #REQUIRED >
<!ELEMENT 時 EMPTY >
<!ATTLIST 時 ampm (am|pm) "am" >
<!ATTLIST 時 time CDATA #REQUIRED >
<!ATTLIST 時 minute CDATA #REQUIRED >

「アルバム2」
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE アルバム SYSTEM "arubamu2.dtd">
<アルバム file = "¥0101.jpg" >
<時 ampm = "pm" time = "7" minute = "30" />
</アルバム>

-------------------------------------------------------------------
「arubamu3.dtd」
<?xml version="1.0" encoding="Shift_JIS"?>
<!ELEMENT アルバム (時,分) >
<!ATTLIST アルバム file CDATA #REQUIRED >
<!ELEMENT 時 (#PCDATA) >
<!ATTLIST 時 ampm (am|pm) "am" >
<!ELEMENT 分 (#PCDATA) >

「アルバム3.xml」
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE アルバム SYSTEM "arubamu3.dtd">
<アルバム file = "0101.jpg" >
<時 ampm = "pm">7</時>
<分>30</分>
</アルバム>

A 回答 (1件)

XMLでは,ルート要素が必要です。


たとえば,次のように,<アルバム>というルート要素を定義し,すべての要素を,このルート要素の中に入れるようにします。
下の例では,個々の画像について,ファイル名を要素とし,時間や画像幅を属性としています。要素にするか属性にするかは自由に設定できますが,画像などは,実体としてのファイルがあって,そのファイルの属性として撮影日時などがあるので,これに合わせて要素や属性を決めると理解しやすいかもしれません。

--------sample.xml---------------
<?xml version="1.0" encoding="UTF-8"?>
<アルバム>
<画像 ampm = "pm" time = "7" min="30" width="300">
0101.jpg
</画像>
<画像 ampm = "am" time = "9" min="40" width="300">
0102.jpg
</画像>
</アルバム>

このXMLから,画像と時間を表示するXSLは次のような感じです。
--------sample.xsl------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="アルバム/画像">
<img src="{.}" width="{@width}"/>
<br/>
<xsl:value-of select="@ampm"/>
<xsl:value-of select="@time"/>:
<xsl:value-of select="@min"/>
<br/>
<hr/>
</xsl:template>
</xsl:stylesheet>

これを表示するhtmlは次のとおり(IEのみに対応)
---------------------------------------------
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello xml</title>
<xml id="myxml" src="sample.xml"></xml>
<xml id="myxsl" src="sample.xsl"></xml>
<script language="JavaScript">
<!--
function start() {
here.innerHTML = myxml.documentElement.transformNode(myxsl);
}
-->
</script>
</head>
<body onload="start()">
<div id="here">ここに表示</div>
</body>
</html>
    • good
    • 0
この回答へのお礼

遅くなってしまい申し訳ありませんでした。
大変詳しく教えて頂きありがとうございました。おかげさまで理解することができ、XSLTもつくる事ができました。本当にありがとうございました。

お礼日時:2008/12/12 22:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!