Kontextové modelování

  • výskyt jednotlivých elementů nebo atributů na sobě může záviset

  • jedinečná vlastnost RELAX NG, která v jiných jazycích nejde modelovat

Příklad 24. Dokument s kontextově závislým modelem obsahu

<seznamka>
  <osoba pohlaví="muž">
    <jméno>Pepa</jméno>
    <věk>29</věk>
    <okres>Bruntál</okres>
    <auto>false</auto>
    <chata>true</chata>
    <konto>14500</konto>
  </osoba>  
  <osoba pohlaví="žena">
    <jméno>Martina</jméno>
    <věk>27</věk>
    <okres>Kladno</okres>
    <míry>90 60 90</míry>
    <vlasy>blondýna</vlasy>
    <oči>modré</oči>
  </osoba>
</seznamka>
element seznamka {
  element osoba {
    element jméno { text },
    element věk { xsd:positiveInteger },
    element okres { text },
    ( (attribute pohlaví { "muž" },
       element auto { xsd:boolean },
       element chata { xsd:boolean },
       element konto { xsd:decimal })
      | 
      (attribute pohlaví { "žena" },
       element míry { list { xsd:decimal, xsd:decimal, xsd:decimal } },
       element vlasy { ("blondýna" | "bruneta" | "zrzka") },
       element oči { xsd:string })
    )
  }+
}