DTG作成について

このQ&Aのポイント
  • XMLをDTDに使用する際にB以降の設定の方法が分からない場合の解説です。
  • XMLのAブロック内にある複数のB要素の設定方法について詳しく説明します。
  • DTDの定義に基づいてAブロックとB要素を設定する方法を学びましょう。
回答を見る
  • ベストアンサー

DTD作成について

以下のXMLをDTDに使用としています。 B以降の設定の方法が分かりません。 よろしくお願い致します。 XML - <Aブロック> - <A a番号="01" b="xxxx" c="x"> <B 番号="1" d="xxxx" /> <B 番号="2" d="xxxx" /> <B 番号="3" d="xxxx" /> </A> DTD <!ELEMENT Aブロック (A*)> <!ELEMENT A EMPTY> <!ATTLIST A a CDATA #REQUIRED> <!ATTLIST A b CDATA #REQUIRED> <!ATTLIST A c CDATA #REQUIRED>

  • XML
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>「名前トークンを使用」とはなんですか? 名前に使用できる文字のことです。 「名前」には先頭に使えない文字があります。 例えば、数字がそうです。 「名前」の先頭には使えないが名前に使える文字を含めて 「名前」の構成文字という意味で「名前トークン」といいます。 つまり NMTOKEN は"NAME TOKEN"というということですね。 "番号" は、数字を意味するようにしたいのですが、 SGMLでは NUMBER というのがあるのですが、XMLではこれがありません(スキーマはまた別の話として)。 それで他のモノを使う必要があるのですが CDATA だと何でもいいということになり ID (「名前」)だと数字で始めることができないので NMTOKEN ということにしました。 こうしておけば、先頭が数字から始められてある程度限定することができます。

kurikuri44
質問者

お礼

いろいろ勉強してきます。 また、回答ありがとうございます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

以下のような感じでいいかと思います。細部は修正下さい。 全角英字は、名前に使えなかったと思うので修正してあります。 また、ATTLIST は、まとめることができます。 ---------------------------------------------------------------- <!ELEMENT ABlock (A*)> <!ELEMENT A (B*)> <!ATTLIST A a CDATA #REQUIRED> <!ATTLIST A b CDATA #REQUIRED> <!ATTLIST A c CDATA #REQUIRED> <!ELEMENT B EMPTY> <!ATTLIST B 番号 NMTOKEN #REQUIRED d CDATA #REQUIRED>

kurikuri44
質問者

お礼

ありがとうございます。 NMTOKENは「名前トークンを使用」と書いてありますが、実際はどのように使用するのかわかりません。「名前トークンを使用」とはなんですか?

関連するQ&A

  • XMLのDTDによる文書型宣言の記述の仕方

    初心者ですが簡単なXMLのDTDによる文書型宣言の記述の仕方がよく分かりませんので教えてください。 XMLでは同じ要素名の要素でも親が異なる場合は別の要素として扱うことができます。例えば、要素Bの子の要素Dと、要素Cの子の要素Dがある場合、要素Bの子の要素Dには属性bdを、要素Cの子の要素Dには属性cdを定義できます。この場合にDTDによる文書型宣言を記述する場合、要素Bの子の要素Dと、要素Cの子の要素Dをどのように記述するのでしょうか。 例えば <A>  <B>   <D bd="123"></D>  </B>  <C>   <D cd="abc"></D>  </C> </A> というようなXMLインスタンスがあった場合 この場合のDTDによる文書型宣言の記述は <!DOCTYPE A [  <!ELEMENT A (B,C)>  <!ELEMENT B (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D bd CDATA #REQUIRED>  <!ELEMENT C (D)>  <!ELEMENT D EMPTY>  <!ATTLIST D cd CDATA #REQUIRED> ]> と記述しましたがこれでは駄目でした。2つ目の要素DのELEMENTの宣言で、要素Dはすでに宣言されているというエラーになるのです。上記の例の場合にDTDによる文書型宣言はどのように記述するのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • 属性リスト宣言

    以下がxmlファイルです。 --------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE 製品管理 SYSTEM "s1.dtd"> <製品管理> <製品 製品番号="001"> <名前>シューズ</名前> <SKU 倉庫="ABC" 単価="10000" /> </製品> </製品管理> --------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <!ELEMENT 製品管理 (製品)*> <!ATTLIST 製品 製品番号 ID #REQUIRED> <!ELEMENT 製品 (名前|SKU)*> <!ELEMENT 名前 (#CDATA)*> <!ELEMENT SKU entity> <!ATTLIST SKU 倉庫 NMTOKENS #REQUIRED SKU 単価 CDATA #REQUIRED> --------------------------------------------- 補足 製品番号 属性:ID型 名前   要素:文字データ SKU    空 倉庫   属性:NMTOKENS型 単価   CDATA型 この外部サブセットではダメでした。 ヒントでも何でもお待ちしております。m(._.)m

    • ベストアンサー
    • XML
  • XMLの属性について。

    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</分> </アルバム>

    • ベストアンサー
    • XML
  • DTDを記述する意味

    DTDを使ってXMLの形式を厳密に定義する方法があると聞いて試してみたのですが、記述した形式を破っても何も起きません。たとえば以下のように <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE root [ <!ELEMENT root (a, b, c+)> ]> <root> <b>BBB</b> <a>AAA</a> </root> と書いた場合、「A,B,Cという要素をこの順番で配置せよ」という命令と「Cという要素を1つ以上配置せよ」という2つの命令を無視していますが、何かしらのエラーを返すといった動作は全くありません。HTML(XHTML)みたいな感じです(テキトーにコーディングしてもエラーを返さない点)。XMLのDTDはそれを守らないとエラーを返すような動作はしないのでしょうか?それではDTDの存在意義が分からなくなってしまいますが・・・

    • 締切済み
    • XML
  • DTDと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
  • タグを使う際にDTDは意識したほうが良いのですか

    http://www.tagindex.com/html_tag/elements/ でタグの意味を調べているのですが DTDとは何でしょうか? https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=DTD を見ると DTD( 文書型定義 )は、SGMLアプリケーションにおける文法書、 あるいはテンプレートのようなものです。 SGMLのいろいろな応用ごとにDTDが定義されます。 HTMLもSGMLの応用なので、バージョンごとにDTDが定義されます。 との事でよく意味が分かりません。 とりあえず今サイトを作るにおいて タグを使う際にDTDは意識したほうが良いのですか? あとこのサイトで検索したら http://bekkoame.okwave.jp/search.php3?word=DTD&c=&x=0&y=0 カテゴリがXMLが多かったです。 でもとりあえずHTMLをやってるので、こちらのカテゴリで質問しました。

    • ベストアンサー
    • HTML
  • SAXでparseを行う際の、DTDとの妥当性チェックついて

    Java&XMLの初心者です。 用語の使い方など間違っているかもしれませんが、 よろしくお願いします。 XMLパーサーにxercesを利用しています。 以下のようなXMLをがあったときに、 <?xml version="1.0"?> <!DOCTYPE a SYSTEM "a.dtd"> <a> <b>1</b> <b>1</b> </a> 以下のコードを実行すると、  SAXParserFactory f = SAXParserFactory.newInstance();  f.setValidating(true);  SAXParser p = f.newSAXParser();  p.parse((InputSource)xml, handler); カレントディレクトリにあるa.dtdとの妥当性をチェックしますが、 これをファイルは無視し、指定した文字列とチェックをさせるなどと いうことは可能でしょうか?

    • ベストアンサー
    • XML
  • ExcelでSheet1/2を作成・・・

    S1に請求書、S2に顧客情報を 初めて質問を投稿いたします。 ExcelでSheet1・Sheet2があります。 Sheet2には顧客情報があります。  A列   B列   C列    D列 会社名 郵便番号  住所  電話番号  a xxx-xxxx a1xxxxx xxx-xxxx b xxx-xxxx b1xxxxx xxx-xxxx c xxx-xxxx c1xxxxx xxx-xxxx c xxx-xxxx c2xxxxx xxx-xxxx c xxx-xxxx c3xxxxx xxx-xxxx とあるとします。 そこで請求書をSheet1を作成してあり、会社名をリストで選択するようにしてあります。会社名を選択するとSheet1上にある、住所が自動的に入力されるようにしてあります。 質問は、会社Cには複数住所があります。そこで、会社Cを選んだときだけ、住所欄にプルダウンで住所を選べるようにしたいのですが、可能でしょうか?

  • 【PHP】ファイルを読み込んで配列に格納後、ファイルに出力させる方法を教えて下さい。

    すみません、教えて下さい。 内容としましては、 下記のテキストファイルをPHPで読み込んで、 別ファイルに出力させる方法です。 1 001 A B C 2 002 1年生 2年生 3年生 3 003 1,000 2,000 3,000 4 004 1組 2組 3組 5 005 A君 B君 C君 D君 6 20080720 xxxx xxxx xxxx 1 7 20080721 xxxx xxxx xxxx 2 8 20080722 xxxx xxxx xxxx 3 9 20080723 xxxx xxxx xxxx 4 行番号7以下は、動的に変化します。 上記ファイルで取りたい値が、 行番号2の2年生 行番号5のA君,B君,C君 行番号6の20080720,1 行番号7の20080721,2 行番号8の20080722,3 行番号9の20080723,4 です。 また、6以降は動的に変化をし、行番号は増えますが、 取得したい値は同じとなっております。 上記を配列へ以下のように格納し、 ファイルに出力させたいのですが、 どうしたらよいでしょうか。 最終的には、$array["nen"] でその値をひっぱりたいのです。 $array = array( ["nen"]=>2年生, ["name_1"]=>A君, ["name_2"]=>B君, ["name_3"]=>C君, ["day_1"]=>20080720, ["ID_1"]=>1, ["day_2"]=>20080721, ["ID_2"]=>2, ["day_3"]=>20080722, ["ID_3"]=>3, ["day_4"]=>20080723, ["ID_4"]=>4, ); すみません、ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エクセルでセルの行番号を検出し、比較したいんですが…。

       A  B  C  D 1   7   9  10  ● 2   8  12  11  ○ 3   6   8  10  ○ 4  14   9   9  ● 5   7  12  10  ○ 6   12   8  12 このようなA列~D列があるとします。 A列~C列は値が、D列には○や●の記号が入るとします。 ここで、D1には、 「A2以降のA列で、C1より大きい値が最初に出る行番号」 と 「B2以降のB列で、C1より大きい値が最初に出る行番号」 を比較したときに、 A列の方が早ければ○、B列の方が早ければ●と表示させたいのですが、 どのようにすればよいでしょうか? (たとえば、D1は、A列では4行目、B列では2行目にC1より大きい 値がでるので、●といった感じです。) 引き続いて、D2は 「A3以降のA列で、C2より大きい値が最初に出る行番号」 と 「B3以降のB列で、C2より大きい値が最初に出る行番号」 を比較… といった感じで進めて行きたいのです。 非常に困っています。 どなたかご教授ください。 よろしくお願いします。

専門家に質問してみよう