2016-11-14 5 views
2

実際には、要素にPCDATAと他の要素の両方を含めることができます。そのようなコンテンツモデルは混合と呼ばれます。#PCDATAをDTDに配置混合コンテンツ

<?xml version = "1.0" standalone="yes"?> 
<!DOCTYPE DOCUMENT [ 
<!ELEMENT DOCUMENT (CUSTOMER)*> 
<!ELEMENT CUSTOMER (NAME,DATE,ORDERS)> 
<!ELEMENT NAME (LAST_NAME,FIRST_NAME)> 
<!ELEMENT LAST_NAME (#PCDATA)> 
<!ELEMENT FIRST_NAME (#PCDATA)> 
<!ELEMENT DATE (#PCDATA)> 
<!ELEMENT ORDERS (ITEM)*> 
<!ELEMENT ITEM (PRODUCT, NUMBER, PRICE)> 
<!ELEMENT PRODUCT (#PCDATA | PRODUCT_ID)*> 
<!ELEMENT NUMBER (#PCDATA)> 
<!ELEMENT PRICE (#PCDATA)> 
<!ELEMENT PRODUCT_ID (#PCDATA)> 
]> 
<DOCUMENT> 
    <CUSTOMER> 
     <NAME> 
      <LAST_NAME>Weber</LAST_NAME> 
      <FIRST_NAME>Bill</FIRST_NAME> 
     </NAME> 
     <DATE>October 25, 2003</DATE> 
     <ORDERS> 
      <ITEM> 
       <PRODUCT>Asparagus</PRODUCT> 
       <NUMBER>12</NUMBER> 
       <PRICE>$2.95</PRICE> 
      </ITEM> 
      <ITEM> 
       <PRODUCT>Lettuce</PRODUCT> 
       <NUMBER>6</NUMBER> 
       <PRICE>$11.50</PRICE> 
      </ITEM> 
     </ORDERS> 
    </CUSTOMER> 
</DOCUMENT> 

バリ(.NET XMLパーサー、MSXML SAXを使用して、ファイルの正しさを確認するとき、私は気づいた:混合コンテンツモデルを指定するには、ちょうどあなたができるようにしたい子要素と一緒に#PCDATAを一覧表示します、MSXML DOM、Javaビルドイン)、#PCDATAがリストの先頭にある場合 - チェックが合格になります。 #PCDATAがメンバーの前にある場合は、検証エラーがあります。

なぜ#PCDATAの要素が最初に必ず必要なのでしょうか?

答えて

1

はい、ここで指定しているものはの内容がで、w3C specification, §3.2.2に定義されています。用 混合コンテンツ宣言

[51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*'

そして実際の制約は以下のとおりです。

  1. #PCDATAが最初に表示される必要があります。
  2. 後でタグのリストを提供することができます。各タグは1回だけ出現できます。
  3. となり、最後に発生可能な仕様は*のみです。

仕様はそれを必要とするので、したがって、基本的#PCDATAが最初に行わなければならない理由はです。

+0

ありがとうございました! なぜ '' 'S? '#PCDATA''''は最初に( '' '' PCDATA''''の前に)滞在しますか?タグが最初にあるように見えます。 –

+1

いいえ - 'S?'は* white-space *の略です。 – potame

+0

@patame。 OK。私は参照してください。ありがとう! –

関連する問題