DTDを利用したXMLファイルを読み込むDOMパーサーを作ってます。

表題のとおり、DOMパーサーがXMLファイル、DTDファイルを読み込む際に
DTDファイルをローカルマシン(実行環境)のクラスパスにあるディレクトリ
から読み込みたいのですがうまくいきません。

XMLパーサーにxercesを利用し、DOMを使ってます。

例えば、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pagecontrol SYSTEM "sample.dtd">
<PEOPLE>
<NAME>afternoon_cafe</NEME>
</PEOPLE>

のようなXMLファイルを、DOMパーサーがparse()メソッドによりロード
すると、"sample.dtd"をカレントディレクトリからしか検索しません。
この"sample.dtd"をクラスパスにあるディレクトリに置き、それを
読み込むようにしたいのですが、、、

どなたかわかる方がいれば、教えてください。
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

質問の内容を誤解していました。


かみあってませんでしたね。すみません。

>結局、DTDファイルは、クラスパスによる検索はできないということ
>なんでしょうか?

#2の回答で削除を申し出た「DTDをライブラリに追加する」の部分にあたりますが、
「実装する」=「クラスを生成する」方法ならありますけどね。
●Oracle XML Class Generator for Java
のように、DTDに基づいて各要素一種類ごとにクラスを生成するわけです。
下記URLの図2はわかりやすいですね。
http://www.atmarkit.co.jp/fxml/rensai/xdk01/xdk0 …

>例えば、XMLに<!DOCTYPE>宣言を記述せず、XMLパーサープログラム側で
>DTDの指定とかする方法はないのですかねぇ?

上記方法から考えてみて下さい。あると思います。
ただ、念のために書いておきますが
DTDの内容はELEMENT宣言とATTLIST宣言だけではないですよね?
ENTITY宣言もDTDの一部ですが、ファイル毎に異なる記述をするケースもあるのです。

<!DOCTYPE section SYSTEM "../program/section.dtd" [
<!--要素宣言と属性宣言は外部ファイル参照 ↑(変更は不可)-->
<!--記法名-->
<!NOTATION TIF SYSTEM "C:\Program Files\Adobe\Illustrator 8.0J\Illustrator.exe">
<!--実体宣言ここから(ファイル毎に記述)-->
<!ENTITY CJG70210 SYSTEM "C:\images\CJG70210.tif" NDATA TIF>
<!ENTITY CYH50260 SYSTEM "C:\images\CYH50260.tif" NDATA TIF>
<!ENTITY CYH50310 SYSTEM "C:\images\CYH50310.tif" NDATA TIF>
<!ENTITY CYH50390 SYSTEM "C:\images\CYH50390.tif" NDATA TIF>



<!--実体宣言ここまで-->
]>
<!--DOCTYPE宣言終わり-->

みたいなXML文書の場合もあるので「<!DOCTYPE>宣言を記述せず」がいいかどうかはわかりません。
もちろん、外部エンティテイの扱いも処理系に実装すればいいのですが。
ちなみに、今この外部エンティテイを使用禁止にすべく改造中です(苦笑)。

スキーマ言語はDTDだけではありませんし、
人によって(XMLに)求めるものも違いますので、このへんで。
    • good
    • 0
この回答へのお礼

詳しい解説、ありがとうございます。

おかげで、XMLに関する勉強ができました。

DTDの読み込みは、Oracle XML Class Generator for Javaで
再度、検討してみることにしてみます。

お礼日時:2001/10/09 10:10

>下記の回答の意味がよくわかりません


>●PUBLIC宣言してDTDをライブラリに追加する(HTMLのDTDを参考にして下さい)
>具体的な例でお教え願えませんでしょうか?

説明がヘタですみません。
訂正と補足します。

×PUBLIC宣言して

○公開実体のキーワード「PUBLIC」を使用して、公開実体の内容を識別子
(例:-//Afternoon-cafe//DTD sample//EN)によって指定する

DTDをライブラリに追加する

(DTDへのパスを文書側に記述するのではなく)処理系側でDTDへのパスを定義する/実装する
……というつもりで書いたのですが、この部分は削除させて下さい。
考えてみたら必要ないですね(笑)。

それから、理解していただいているとは思いますが、
●絶対指定「または」
●PUBLIC

ですね。。。

---
■具体例
<!DOCTYPE pagecontrol
  PUBLIC "-//Afternoon-cafe//DTD sample//JA"
  "http://www.xxx.co.jp/j2ee/dtds/sample.dtd">

■説明
文書型宣言の内容は御存じだとは思いますが、
<!DOCTYPE(文書型宣言キーワード)
pagecontrol(文書型定義名)
SYSTEM(文書型定義キーワード)
"sample.dtd"(文書型定義内容:この場合は外部ファイル)>
を指しています。

これを
<!DOCTYPE pagecontrol
PUBLIC(公開実体キーワード)
"-(登録識別(+ | -))//
Afternoon-cafe(所有者)//
DTD(クラスキーワード)
sample(説明)//
JA(言語コード:この場合は日本語)"
"http://www.hoge.co.jp/j2ee/dtds/sample.dtd"(URI)>
とする方法もあります、ということです。

#本来、キーワード「PUBLIC」は公開された(業界標準規格などの)文書型定義(例:HTMLのDTDなど)を指します。
---
#このケースで紹介するのはマズかったですね(反省)。

この回答への補足

なるほど、、、いろいろ知らない事ばっかりでした。
勉強になります。

結局、DTDファイルは、クラスパスによる検索はできないということ
なんでしょうか?

例えば、XMLに<!DOCTYPE>宣言を記述せず、XMLパーサープログラム側で
DTDの指定とかする方法はないのですかねぇ?

補足日時:2001/10/05 09:42
    • good
    • 0

「ローカル環境(単独)でxercesを利用」という解釈でお答えします。



>"sample.dtd"をカレントディレクトリからしか検索しません

<!DOCTYPE pagecontrol SYSTEM "sample.dtd">
はカレントディレクトリを指していますので……。

私の場合は作業ディレクトリから(理由があって)相対指定で
<!DOCTYPE pagecontrol SYSTEM "../program/sample.dtd">
のようにしています。

このケースでしたら
●クラスパスにあるディレクトリを絶対指定する
●PUBLIC宣言してDTDをライブラリに追加する(HTMLのDTDを参考にして下さい)
のがいいのではないかと思います。

#この辺はSGML本に書いてありますので読んでみて下さい。

この回答への補足

さっそくの回答ありがとうございます。

私の勉強不足で申し訳ないのですが、下記の回答の意味がよくわかりません。。。

●PUBLIC宣言してDTDをライブラリに追加する(HTMLのDTDを参考にして下さい)
のがいいのではないかと思います。

具体的な例でお教え願えませんでしょうか?

補足日時:2001/10/04 09:58
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDTDと名前空間

DTDと名前空間の関係について質問します。

XMLの本を読みDTDと名前空間の大まかなイメージを下記のようにつかみました。

DTD: XML文書の妥当性を規定し、DTD宣言で指定。
名前空間: ひとつのXML内で要素名の衝突を避けるために、xmlnsで指定。

XHTMLのDTD宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTMLの名前空間(http://www.w3.org/1999/xhtml)
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

XHTML文書の場合、DTDと名前空間がそれぞれひとつです。
しかし、ひとつのXMLドキュメントで複数の名前空間を利用する場合は、それぞれの名前空間に対して、DTDを宣言するのでしょうか。つまり複数のDTD宣言があるXMLドキュメントになるのでしょうか。

DTDと名前空間の関係が良く分かりません。

XML自体を勉強し始めたばかりで、まとまりのない質問で申し訳ありませんが、よろしくお願いします。

DTDと名前空間の関係について質問します。

XMLの本を読みDTDと名前空間の大まかなイメージを下記のようにつかみました。

DTD: XML文書の妥当性を規定し、DTD宣言で指定。
名前空間: ひとつのXML内で要素名の衝突を避けるために、xmlnsで指定。

XHTMLのDTD宣言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTMLの名前空間(http://www.w3.org/1999/xhtml)
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang...続きを読む

Aベストアンサー

英語がわからなくても
http://www.w3.org/TR/XHTMLplusMathMLplusSVG/
のソースコードを追ってみると
どういう仕組みになっているかわかると思います。
解説書こうとすると結構難しいので。
=============
●<![INCLUDE[]]> <![IGNORE[]]>
といった書式を取るマーク区間や

●<!ENTITY % hoge "hogefuga">
というように使われるパラメータ実体に関する知識

●外部解析対象実体に関する知識

●外部サブセットよりも内部サブセットの方が優先される

●同一サブセット内では先に書かれた宣言が優先される

ってことがわかっていれば読めるはずです。
外部解析対象実体に慣れてなければ
XHTML 1.1 DTDのFlat版が
http://www.w3.org/TR/xhtml11/DTD/xhtml11-flat.dtd

http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd
を展開したものだとわかれば良いと思う
========================
ああ,そうそう,DTDを使うときの名前空間接頭辞の制約の一つとして
途中で名前空間接頭辞を変更することはできないことを覚えておきましょう。
(XMLとしてはOKだが,DTDでの定義に一致しないから)
http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/dtd_module_rules.html#sec_D.2.4.
=========================

英語がわからなくても
http://www.w3.org/TR/XHTMLplusMathMLplusSVG/
のソースコードを追ってみると
どういう仕組みになっているかわかると思います。
解説書こうとすると結構難しいので。
=============
●<![INCLUDE[]]> <![IGNORE[]]>
といった書式を取るマーク区間や

●<!ENTITY % hoge "hogefuga">
というように使われるパラメータ実体に関する知識

●外部解析対象実体に関する知識

●外部サブセットよりも内部サブセットの方が優先される

●同一サブセット内では先に書かれた宣言が優先され...続きを読む

Q

の使い方

xhtml+cssをやり始めです。

実は、<br />と<p></p>の使い方についてわかんなくて教えてくださーい。

普通のhtmlでは改行したいときは、<br />を入れまくっていましたが、xhtmlは<br/>ではなく改行は<p></p>でといわれました。

<p>あいうえお</p>
<p>かきくけこ</p>

といれると改行にはなりますが、1行あけたい場合はどうしますか?

<p>あいうえお</p>
<p></p>
<p>かきくけこ</p>

としても1行あきませんよね?
こういう場合は

<p>あいうえお</p>
<br />
<p>かきくけこ</p>

でいいのですかね???

単純な質問ですみません。

Aベストアンサー

基本的に、<p>タグで段落を作るときに、勝手に一行開けてくれると考えていいかと思います。
そして、<br>は行をあけない普通の改行ということになります。

つまり、一行あけるときは
<p>あいうえお</p>
<p>かきくけこ</p>

行をあけないときは
<p>あいうえお<br />
かきくけこ</p>
となります。

*余談ながら、xhtmlでは<body>の直下に普通のテキストを書くことができませんので、文章を書くときはそれを<p>で囲ってやることが必要となります。

QDTDファイルをクラスパスから読み込みたい

DTDを利用したXMLファイルを読み込むDOMパーサーを作ってます。

表題のとおり、DOMパーサーがXMLファイル、DTDファイルを読み込む際に
DTDファイルをローカルマシン(実行環境)のクラスパスにあるディレクトリ
から読み込みたいのですがうまくいきません。

XMLパーサーにxercesを利用し、DOMを使ってます。

例えば、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pagecontrol SYSTEM "sample.dtd">
<PEOPLE>
<NAME>afternoon_cafe</NEME>
</PEOPLE>

のようなXMLファイルを、DOMパーサーがparse()メソッドによりロード
すると、"sample.dtd"をカレントディレクトリからしか検索しません。
この"sample.dtd"をクラスパスにあるディレクトリに置き、それを
読み込むようにしたいのですが、、、

どなたかわかる方がいれば、教えてください。
お願いします。

DTDを利用したXMLファイルを読み込むDOMパーサーを作ってます。

表題のとおり、DOMパーサーがXMLファイル、DTDファイルを読み込む際に
DTDファイルをローカルマシン(実行環境)のクラスパスにあるディレクトリ
から読み込みたいのですがうまくいきません。

XMLパーサーにxercesを利用し、DOMを使ってます。

例えば、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pagecontrol SYSTEM "sample.dtd">
<PEOPLE>
<NAME>afternoon_cafe</NEME>
</PEOPLE>

のようなXMLファイルを、DOMパー...続きを読む

Aベストアンサー

質問の内容を誤解していました。
かみあってませんでしたね。すみません。

>結局、DTDファイルは、クラスパスによる検索はできないということ
>なんでしょうか?

#2の回答で削除を申し出た「DTDをライブラリに追加する」の部分にあたりますが、
「実装する」=「クラスを生成する」方法ならありますけどね。
●Oracle XML Class Generator for Java
のように、DTDに基づいて各要素一種類ごとにクラスを生成するわけです。
下記URLの図2はわかりやすいですね。
http://www.atmarkit.co.jp/fxml/rensai/xdk01/xdk01.html

>例えば、XMLに<!DOCTYPE>宣言を記述せず、XMLパーサープログラム側で
>DTDの指定とかする方法はないのですかねぇ?

上記方法から考えてみて下さい。あると思います。
ただ、念のために書いておきますが
DTDの内容はELEMENT宣言とATTLIST宣言だけではないですよね?
ENTITY宣言もDTDの一部ですが、ファイル毎に異なる記述をするケースもあるのです。

<!DOCTYPE section SYSTEM "../program/section.dtd" [
<!--要素宣言と属性宣言は外部ファイル参照 ↑(変更は不可)-->
<!--記法名-->
<!NOTATION TIF SYSTEM "C:\Program Files\Adobe\Illustrator 8.0J\Illustrator.exe">
<!--実体宣言ここから(ファイル毎に記述)-->
<!ENTITY CJG70210 SYSTEM "C:\images\CJG70210.tif" NDATA TIF>
<!ENTITY CYH50260 SYSTEM "C:\images\CYH50260.tif" NDATA TIF>
<!ENTITY CYH50310 SYSTEM "C:\images\CYH50310.tif" NDATA TIF>
<!ENTITY CYH50390 SYSTEM "C:\images\CYH50390.tif" NDATA TIF>



<!--実体宣言ここまで-->
]>
<!--DOCTYPE宣言終わり-->

みたいなXML文書の場合もあるので「<!DOCTYPE>宣言を記述せず」がいいかどうかはわかりません。
もちろん、外部エンティテイの扱いも処理系に実装すればいいのですが。
ちなみに、今この外部エンティテイを使用禁止にすべく改造中です(苦笑)。

スキーマ言語はDTDだけではありませんし、
人によって(XMLに)求めるものも違いますので、このへんで。

質問の内容を誤解していました。
かみあってませんでしたね。すみません。

>結局、DTDファイルは、クラスパスによる検索はできないということ
>なんでしょうか?

#2の回答で削除を申し出た「DTDをライブラリに追加する」の部分にあたりますが、
「実装する」=「クラスを生成する」方法ならありますけどね。
●Oracle XML Class Generator for Java
のように、DTDに基づいて各要素一種類ごとにクラスを生成するわけです。
下記URLの図2はわかりやすいですね。
http://www.atmarkit.co.jp/fxml/rensai/...続きを読む

QXSLTを使用したXML->XML変換で...

XSLTを使用したXMLからXMLへの変換で、やり方が分からないのでどなたかお教え願います。

以下にXMLを記述します。

----[入力側]-----
<INPUT>
<IN1>
<old>100</old>
<new>100</new>
</IN1>
<IN2>
<IN21>
<old>200</old>
<new>200</new>
</IN21>
<IN22>
<old>300</old>
<new>300</new>
</IN22>
</IN2>
</INPUT>

----[出力側]-----
<OUTPUT>
<OUT1>
<OUT11>
<old>100</old>
<new>100</new>
</OUT11>
<OUT12>
<OUT121>
<old>200</old>
<new>200</new>
</OUT121>
<OUT122>
<old>300</old>
<new>300</new>
</OUT122>
</OUT12>
</OUT1>
</OUTPUT>


【質問内容】
 集団項目でないタグ(入力側のIN1およびIN2)を集団項目として出力したい

XSLTを使用したXMLからXMLへの変換で、やり方が分からないのでどなたかお教え願います。

以下にXMLを記述します。

----[入力側]-----
<INPUT>
<IN1>
<old>100</old>
<new>100</new>
</IN1>
<IN2>
<IN21>
<old>200</old>
<new>200</new>
</IN21>
<IN22>
<old>300</old>
<new>300</new>
</IN22>
</IN2>
</INPUT>

----[出力側]-----
<OUTPUT>
<OUT1>
<OUT11>
<old>100</old>
<new>100</new>
</OUT11>...続きを読む

Aベストアンサー

> 入力側のIN1,IN2が複数回繰り返された場合、
> 出力側もOUT1が複数回繰り返されるって感じです。

IN1とIN2が必ず1対1に対応するという条件でいいなら(複数の組が存在しても可)これでいけるでしょう。



IN1およびIN2以下の構造はオリジナルのまま出力されます。

<xsl:template match="INPUT">
 <OUTPUT>
  <xsl:apply-templates />
 </OUTPUT>
</xsl:template>
<xsl:template match="IN1">
 <xsl:text disable-output-escaping="yes">&lt;OUT&gt;</xsl:text>
  <xsl:copy-of select="." />
</xsl:template>
<xsl:template match="IN2">
 <xsl:copy-of select="." />
 <xsl:text disable-output-escaping="yes">&lt;/OUT&gt;</xsl:text>
</xsl:template>

> 入力側のIN1,IN2が複数回繰り返された場合、
> 出力側もOUT1が複数回繰り返されるって感じです。

IN1とIN2が必ず1対1に対応するという条件でいいなら(複数の組が存在しても可)これでいけるでしょう。



IN1およびIN2以下の構造はオリジナルのまま出力されます。

<xsl:template match="INPUT">
 <OUTPUT>
  <xsl:apply-templates />
 </OUTPUT>
</xsl:template>
<xsl:template match="IN1">
 <xsl:text disable-output-escaping="yes">&lt;OUT&gt;</xsl:text>
  <xsl:copy-of sele...続きを読む

QHTMLファイル&DTDについて

ホームページ作成のテキストに次のように書かれた文言があります。
---------------------------------------
【HTMLファイルで、どのようなタグや属性が使用されているかを宣言した記述部分を「DTD」といいます。HTMLファイルは、まず最初に「DTD」を記述し、続けてHTMLファイルを記述することが約束事になっています。】
---------------------------------------

もし、「DTD」と言うものを記述しないまま、HTMLファイルを作成した場合、何らかの不都合が生じると言うことでしょうか?

Aベストアンサー

DTDは、Document Type Definitionで文書型定義といいます。
質問文にもある通り、作成されている文書が、引用されているDTDで定義するタグや書き方の規則を書いたもので、これを書いておくことで、どういう規則で書かれているのか検証することができます。
しかしながら、大抵のブラウザは、HTMLの文法をDTDなしでも理解することができるので、もし書いていなくても、とくに不都合が生じるということは実用上はないと思います。
逆に、DTDで規定されていないタグが使われても、それをエラーとして指摘するようなブラウザはほとんどありません。
どちらかというとHTMLより、XMLでは、DTDが重要になります。

QXMLへDOMでタグの追加

次のようなXMLにDOMで、タグを追加しようとしているのですが、
追加される場所が思った所に追加されません。
正常XMLにようにしたいのですが、どうすれば良いでしょうか?

--元XML-----------------
<root>
<item>a</item>
<item>b</item>
</root>

--結果XML-----------------
<root>
<item>a</item>
<item>b</item>
<info>xxxx</info>
</root>

--正常XML-----------------
<root>
<info>xxxx</info>
<item>a</item>
<item>b</item>
</root>

-- プログラム ----------------
MSXML::IXMLDOMDocumentPtrxmlDoc = NULL;
MSXML::IXMLDOMNodeListPtrpNodes;
MSXML::IXMLDOMNodePtrpNode;
MSXML::IXMLDOMElementPtrpElem;

xmlDoc.CreateInstance ("Msxml2.DOMDocument");
xmlDoc->load( ファイル名 );
pNodes = xmlDoc->selectNodes(L"/root");
pNode = pNodes->Getitem(0);
pElem = xmlDoc->createElement(L"info");
pNode->appendChild( pElem );


環境:WinXP+IE7+VC6

次のようなXMLにDOMで、タグを追加しようとしているのですが、
追加される場所が思った所に追加されません。
正常XMLにようにしたいのですが、どうすれば良いでしょうか?

--元XML-----------------
<root>
<item>a</item>
<item>b</item>
</root>

--結果XML-----------------
<root>
<item>a</item>
<item>b</item>
<info>xxxx</info>
</root>

--正常XML-----------------
<root>
<info>xxxx</info>
<item>a</item>
<item>b</item>
...続きを読む

Aベストアンサー

VC6持ってないので厳密に検証はしてないけど,
insertBeforeメソッドって使えない?
http://msdn.microsoft.com/en-us/library/ms754519%28VS.85%29.aspx
http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-184E7107
http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-952280727

QDTDで、空要素をエラーしたい

<title></title>のような形のXMLをDTDでエラーにしたいのですが、可能でしょうか?
DTDで、
<!ELEMENT title (#PCDATA)>
だと、エラーなくスルーしてしまいます。
よろしくお願いします。

Aベストアンサー

DTDではできないように思います。

QDTDとXML Schemaでのデフォルト値の指定について

以下のようなXMLをパーズするプログラムがあります。
------------------------------------------------------------------
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(true);
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document doc = documentBuilder.parse(new InputSourc("a.xml"));
------------------------------------------------------------------
a.xmlに以下のようなXMLの構造をDTDで指定した場合のxmlをパーズさせると、

<!DOCTYPE a [
<!ELEMENT a (#PCDATA)>
<!ATTLIST a a1 CDATA "abc">
]>
<a/>

上記のプログラム3行目のvalidationの設定がtrue、falseに関わらす、
<a a1="abc"/>
というような形式のドキュメントオブジェクトが返ってきます。

ですが、以下のようにXMLの構造をXML Schemaで定義した場合、
a.xml
<a xsi:noNamespaceSchemaLocation="b.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

b.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="a">
<xsd:complexType>
<xsd:attribute name="a1" type="xsd:string" default="abc"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

返ってくるドキュメントオブジェクトのa要素には、validationがtrueの場合はa1属性が含まれる、falseの場合は含まれません。

これは正しい動作なのでしょうか?
また、XML Schemaの場合もvalidationがtrue、falseに関わらず、
デフォルト値が指定された属性を含めることはできないのでしょうか?

以下のようなXMLをパーズするプログラムがあります。
------------------------------------------------------------------
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(true);
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document doc = documentBuilder.parse(new InputSourc("a.xml"));
------------------------------------------------------------------
a.xmlに以下のようなXMLの構造をDTDで...続きを読む

Aベストアンサー

XML 1.0では、validationしないプロセッサのDTDに対する動作に関して、以下のような記述があります。(5.1 Validating and Non-Validating Processorsより)

Non-validating processors are required to check only the document entity, including the entire internal DTD subset, for well-formedness.

つまり、internal DTD subsetの中ならば、validationしなくてもデフォルト値などは使わなければならず、externalの中ならば必須ではない(もしかしたらやってくれる場合もあるかもしれないのですが)、ということになります。


一方、XML Schemaの具体的な記述は見つかりませんでしたが(なにしろ量が多いので)、デフォルト値のような情報追加について、以下のような記述があります。
(2.3 Constraints and Validation Rulesの、Schema Information Set Contributionの定義より)

Augmentations to post-schema-validation infosets expressed by schema components, which follow as a consequence of validation and/or assessment.

これを読む限り、validationを行なわないとデフォルト値は追加されないように読めます。

XML Schemaを使いつつ、validationしない時にデフォルト値だけは埋めたい場合には、デフォルト値を与える宣言だけを記述したinternal DTD subsetと組み合わせるしかないかもしれません。冗長になりますが。


※載せた英文は、以下の2つのURLから引用しました。

http://www.w3.org/TR/2000/REC-xml-20001006
   XML 1.0(Second Edition)
http://www.w3.org/TR/2001/REC-xmlschema-1-20010502
   XML Schema Part 1: Structures

XML 1.0では、validationしないプロセッサのDTDに対する動作に関して、以下のような記述があります。(5.1 Validating and Non-Validating Processorsより)

Non-validating processors are required to check only the document entity, including the entire internal DTD subset, for well-formedness.

つまり、internal DTD subsetの中ならば、validationしなくてもデフォルト値などは使わなければならず、externalの中ならば必須ではない(もしかしたらやってくれる場合もあるかもしれないのですが)、とい...続きを読む

Q[Dreamweaver]新規HTMLドキュメント作成時、DTDの選択肢にFlamesetがない

Dreamweaver8(win)を使用しています。
HTML文書を作成する際、DTDにXHTML1.0 Framesetの選択肢が無いのですが、これはDreamweaver8のデフォルトの仕様でしょうか。

新規ドキュメントダイアログを開き、[基本ページ]→[HTML]→[ドキュメントタイプ(DTD)]という流れでHTMLドキュメントを作成する際、DTDの選択は新規ドキュメントダイアログの右下にあるドロップダウンリスト[ドキュメントタイプ(DTD)]から選択します。

私が使用してるDreamweaverでは、DTDの選択肢が
・なし
・HTML4.01及びXHTML1.0のtransitionalとstrict
・XHTML1.1
・XHTML Mobile1.0

だけなのですが、HTML4.01及びXHTML1.0のFramesetを選択肢(ドロップダウンリスト)に加えることは可能でしょうか。
初心者ですが、宜しくお願いします。

Aベストアンサー

Dreamweaverは文書中にフレームを入れると自動的にDOCTYPE[Frameset]が使われるようになっています。

Qxmlから別ディレクトリのxslファイルの参照

xml初心者です。

xmlファイルのひとつ上の階層にxslファイルを置いてあります。

xslファイル
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../format.xsl"?>
...


xslファイル format.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...


href="../format.xsl" のように指定したのですがxslが適用されません。
そもそも別ディレクトリへの参照は可能なのでしょうか。
もし可能ならばどのような方法があるのでしょうか。

Aベストアンサー

 あるページから、他のファイルの位置を参照する(ブラウザとサーバーの)機能をしっかり理解しておきましょう。なにしろ、ウェブの基本中の基本ですからね。
 ブラウザがあるファイルをサーバーにHTTPプロトコルで要求するときは、ネットワークに対して
[HTTP要求ヘッダの例]
GET /ディレクトリ(/ファイル名) HTTP/1.1
Host: サーバー名
User-Agent: Mozilla/5.0 (Windows; ***Firefox/3.0.10
Accept: text/html****application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

という要求が行われます。
 ウェブ上のルーターが、サーバー名からIPアドレスを調べて、そのサーバーにファイルを要求します。
 GET(あるいはPOST)の要求を受け取ったサーバーは、指定されたファイルを提供しますが、【そのファイルは実在するとは限りません。】【重要】・・パスやファイル名を含めて動的に作成され提供される場合も多い。
[HTTP応答ヘッダの例]
HTTP/1.x 301 Moved Permanently
Date: Thu, 18 Jun 2009 09:51:40 GMT
Server: Apache
Location: http://サーバー名/ファイル名とパス
Content-Length: 242
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

 そのため、ブラウザは、そのページで指定されているファイル(画像・スタイルシート・スクリプトなど)の位置は知る由もありません。
 そこでブラウザは、そのファイルの【サーバー上のルートからの見かけのパスとファイル名】から、それらのファイルの場所を算出して、再びサーバーに要求します。そのとき、ページでの必要な指定方法は、
[ウェブ上の要求プロトコルと絶対パスとファイル名]
 http://[サーバー名][パス][ファイル名]
[同じサーバーでの絶対パス]
 /[パス]と[ファイル名]
  ブラウザからは、現在のファイルのプロトコル・サーバー名が付与される。
 http://サーバー名/[パス]と[ファイル名]とみなされる。
[同じサーバーでの相対パス]
 ../[パス]と[ファイル名]
 ./[パス]と[ファイル名]
 [パス]と[ファイル名]
 http://サーバー名/[算出されたパス]と[ファイル名]とみなされる。

以下同様・・・
 よって、指定方法は
 ../format.xsl
ないし、
 http://[サーバー名][パス][ファイル名]
のいずれか・・
 

 あるページから、他のファイルの位置を参照する(ブラウザとサーバーの)機能をしっかり理解しておきましょう。なにしろ、ウェブの基本中の基本ですからね。
 ブラウザがあるファイルをサーバーにHTTPプロトコルで要求するときは、ネットワークに対して
[HTTP要求ヘッダの例]
GET /ディレクトリ(/ファイル名) HTTP/1.1
Host: サーバー名
User-Agent: Mozilla/5.0 (Windows; ***Firefox/3.0.10
Accept: text/html****application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-En...続きを読む


人気Q&Aランキング

おすすめ情報