Фактически можно указать, что элемент может содержать как PCDATA, так и другие элементы. Такая модель контента называется смешанной. Чтобы указать модель смешанного содержимого, просто список #PCDATA вместе с дочерними элементами вы хотите, чтобы:Место #PCDATA в DTD mixed Содержимое
<?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 Parser, MSXML SAX , MSXML DOM, встроенный Java), если #PCDATA
находится в верхней части списка - проверьте пропуски. Если перед #PCDATA есть член - есть ошибки проверки.
Почему смешанный элемент #PCDATA
должен быть обязательно первым местом?
Благодарим за подробное объяснение! Почему '' 'S? '# PCDATA'''' остается на первом месте (до '' '' # PCDATA'''')? Похоже, что тег может быть первым. –
Нет - 'S?' Обозначить * пробел *. – potame
@patame. ОК. Я вижу. Спасибо! –