2016-04-19 10 views
1

Я хотел бы описать в DTD такой элемент MyElement, который должен составлен Elementa, elementB и любой другой элемент. Для этой цели я попытался синтаксис:Объявление DTD Элемент с любым и необходимых элементов

<!ELEMENT MYELEMENT (elementA | elementB | ANY)*> 

Но это не работает, когда происходит элемент, кроме Elementa или elementB. Может ли кто-нибудь помочь с правильным синтаксисом с DTD?

Можно ли это сделать с помощью схемы XSD?

С уважением

ответ

0

Когда вы говорите "MyElement ... должно [быть] составлена ​​Elementa, elementB и любой другой элемент", вы имеете в виду

  • (A) Вхождение MyElement может иметь ноль или больше детей; каждый ребенок может называться elementA, elementB или что-то еще.

или

  • (B) Каждое вхождение MyElement должны иметь по крайней мере, один ребенок по имени elementA, по крайней мере, один названный elementB, в любом порядке, и может иметь других детей, а также.

или

  • (C) Каждое вхождение MyElement должно быть ровно один ребенок по имени elementA, ровно по имени elementB, в любом порядке, и может иметь других детей, а также.

Если в ОТДЕ ключевого слова ANY было своего родом группового символа, который согласованные любой элемент, независимо от имени, то модель содержимого вы показываете будет соответствовать возможности (A). Это не то, что означает ключевое слово, поэтому объявление, которое вы показываете, не делает то, что вы хотите: заявление, которое вы даете, просто означает, что любое возникновение MYELEMENT может содержать ноль или более элементов, если каждый дочерний элемент MYELEMENT называется либо elementA или elementB или ANY.

Если (A) - это то, что вы хотите, то нет необходимости указывать elementA или elementB; все, что вам нужно, это подстановочный знак, который соответствует любому элементу. ОТД не имеют такого группового символа, хотя, если вы не возражаете, позволяя символьные данные, а также дочерние элементы декларации

<!ELEMENT MYELEMENT ANY > 

бы близко подойти к вашей спецификации. В XSD вы должны использовать шаблон xsd:any.

Если вы хотите (B) или (C), то XSD 1.0 может приблизиться; вы можете разрешить имена элементов, а также любые элементы в другом пространстве имен, используя подстановочный знак с namespace="##other".

Если заказ не имеет значения, вы обнаружите, что модель содержимого легче указать, если указать произвольную последовательность.(Переменная последовательность необходима, когда она передает информацию, когда она не передает информацию, это только усложняет жизнь и открывает скрытый канал.)