2013-11-20 5 views
2

У меня есть xml-файл с dtd-схемой. Я пытаюсь добавить некоторые правила в отношении атрибутов и элементов. до сих пор, мне удалось иметь два ATTLIST для различных элементов в следующем формате:Объявление нескольких правил в схеме DTD

<!DOCTYPE root [ 
<!ATTLIST a ..... > 
<!ATTLIST b ..... > 
]> 

Теперь я хочу сделать следующее: предположим, у меня есть:

<a ...><value>some_value_with_&&&</value></a> 

конечно, это значение должен быть окружен <![CDATA[some_value_with_&&&]]>

Поскольку у меня уже есть схема dtd, мне показалось, что я могу удалить CDATA (оставив ее как было изначально), а затем объявить ее тип cdata в DTD, возможно ли это? Я попытался добавить следующее: <!ELEMENT value (#CDATA)> , но у меня есть две проблемы с ним:

  1. Это заставляет себя (я предполагаю) на любом элементе значения, может я ограничить его только a элементов?

  2. Я работаю с java. с этим я получаю следующее сообщение об ошибке: A '(' character or an element type is required in the declaration of element type "value".

Почему это?

ответ

2

#CDATA - это несуществующее ключевое слово. Нельзя объявить элемент типа #CDATA.

CDATA ключевое слово (без #) имеет два различных применений:

  1. В attribute declarations in DTDs.
  2. В CDATA sections, которые встречаются только в экземплярах XML-документа (не могут быть объявлены в DTD).

Чтобы быть ясным: невозможно объявить элемент как тип "cdata/CDATA/# CDATA". Раздел CDATA (<![CDATA[...]]>) является удобством для авторов XML. Он просто используется в XML-документе, если это необходимо. Это не то, что объявлено в DTD.

См. Также этот ответ: https://stackoverflow.com/a/12128273/407651.

+0

Я не уверен, что понял. Можно ли объявить элемент как cdata, чтобы я мог просто заполнить содержимое элемента уникальными символами (&> !?) без фактического написания ''? – buddy123

+0

Нет, невозможно объявить элемент как «cdata» (или «CDATA»). Раздел CDATA просто используется в XML-документе, если это необходимо. Он не может быть объявлен в DTD. – mzjn