Edit: при перечитывании вопроса OP ожидает использовать XSD, а не DTD (что кстати хорошо!). Я изначально, хотя, что DTD был запрошен; вот версия XML Schema (XSD)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="mysubnodetype" mixed="false">
<xs:sequence>
<xs:element name="mysubsubnode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="mynodeType" mixed="false">
<xs:sequence>
<xs:element name="mysubnode" type="mysubnodetype"/>
</xs:sequence>
</xs:complexType>
<xs:element name="mynodeType" type="mynodeType"/>
</xs:schema>
Примечания: атрибут mixed="false"
, добавленный к complexTypes, является избыточным, поскольку по умолчанию смешанный режим complexType имеет значение false (следовательно, по умолчанию предотвращает смешивание элементов и текста между элементами.)
(оригинальный ответ, вместо DTD)
Следующее DTD предотвратит это. Обратите внимание на тот факт, что mysubnode может содержать только sububnode, здесь нет ссылки на PCDATA w / r mysubnode, и поэтому «еще какой-то текст» фрагмента XML в вопросе будет недействительным.
<!ELEMENT mynode (mysubnode)>
<!ELEMENT mysubnode (mysubsubnode)>
<!ELEMENT mysubsubnode (#PCDATA)>
Чтобы сделать XML-код вопроса верным, понадобится что-то вроде этого
<!ELEMENT mynode (mysubnode)>
<!ELEMENT mysubnode (#PCDATAT | mysubsubnode)>
<!ELEMENT mysubsubnode (#PCDATA)>