How to define DTD without strict element order?

后端 未结 2 1969
星月不相逢
星月不相逢 2020-12-17 21:59

As an XML \"noob\" I have discovered the importance of element order when creating an XML stream/file that is validated against a DTD. Is it possible to define a DTD that is

相关标签:
2条回答
  • 2020-12-17 22:31

    You use or (a vertical pipe) and repeat (an asterisk:)

    <!ELEMENT eltype1 ( eltype2 | eltype3)*>
    

    This means eltype1 can contain any number of repetitions of eltype2 or eltype3.

    0 讨论(0)
  • 2020-12-17 22:40

    The only issue with the currently accepted answer is that it doesn't force only one of each element in any order. For example, you could have 2 eltype2 elements and no eltype3 elements.

    If you need to be sure that both elements are present and that each occurs only one time, this is a more precise element declaration:

    <!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
    

    Example in an internal subset:

    <!DOCTYPE eltype1 [
    <!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
    <!ELEMENT eltype2 (#PCDATA)>
    <!ELEMENT eltype3 (#PCDATA)>
    ]>
    <eltype1>
      <eltype3>element three</eltype3>
      <eltype2>element two</eltype2>
    </eltype1>
    
    0 讨论(0)
提交回复
热议问题