2009-09-26 1 views
1

Я пытаюсь написать DTD, и я хочу определить элемент BOOKTYPE, который может быть ОДИН, ДВА или ТРИ. Есть ли способ гарантировать, что только одно из этих значений может быть введено внутри элемента?Можно ли ограничить содержимое элемента XML?

Примечание: 1. Я знаю, как это сделать в атрибуте, но не знаю, как это сделать с элементами. 2. Я хочу, чтобы сделать это ВНУТРИ DTD, не используя язык программирования.

ответ

0

Есть ли способ, я могу гарантировать, что только один из этих значений могут быть введены внутри элемента?

Да, с определением схемы XML (XSD), содержащим XML Enumeration. Вот пример один для валют:

<xsd:simpleType name = "iso3currency"> 
<xsd:restriction base = "xsd:string"> 
    <xsd:enumeration value = "AUD"/><!-- Australian Dollar --> 
    <xsd:enumeration value = "BRL"/><!-- Brazilian Real --> 
    <xsd:enumeration value = "CAD"/><!-- Canadian Dollar --> 
    <xsd:enumeration value = "CNY"/><!-- Chinese Yen --> 
    <xsd:enumeration value = "EUR"/><!-- Euro --> 
    <xsd:enumeration value = "GBP"/><!-- British Pound --> 
    <xsd:enumeration value = "INR"/><!-- Indian Rupee --> 
    <xsd:enumeration value = "JPY"/><!-- Japanese Yen --> 
    <xsd:enumeration value = "RUR"/><!-- Russian Rouble --> 
    <xsd:enumeration value = "USD"/><!-- US Dollar --> 
    <xsd:length value = "3"/> 
</xsd:restriction> 

Это ограничивает значение элемента к одному из перечисленных значений перечисления и длину 3.

Чтобы использовать его, вы должны передайте свой XML и XSD через validator. Пример того, как сделать это в .NET здесь:

КАК: Проверка XML Fragments Против XML-схемы в Visual C# .NET http://support.microsoft.com/kb/318504

+0

Действительно. Но возможно ли это и в DTD? Я считаю, что они в меньшей степени ограничены, чем XSD. – Joren

+0

Как это работает. Может кто-нибудь проиллюстрировать, пожалуйста? –

1

Не в ОТД, извините. Вы можете указать только what elements may appear as children, and whether text content (#PCDATA) can appear or not. Вы не можете сказать, в каком текстовом контенте.

Вам нужно будет перенести данные в атрибут или использовать язык схемы, более мощный, чем старый и неуклюжий DTD.