default namespace = "http://www.thaiopensource.com/validate/picl"

start =
  element constraints {
    element constraint {
      attribute key { text },
      attribute ref { text }?
    }*
  }

# Planned eventually to be this.

finalStart = element constraints { inherited, constraints }

constraints = (key|ref|context)+

context = element context { select?, inherited, constraints }

key =
  element key {
    attribute name { xsd:NCName }?, # names are scoped to the context
    attribute allowDuplicates { xsd:boolean }?,
    select,
    inherited,
    element field {
      select,
      inherited,
      convert?,
      dflt?
    }*,
    constraints?
  }

ref =
  element ref {
    select,
    element not { select }*,
    refBody
  }

refBody =
    attribute name { xsd:NCName }?, # names are scoped to same context
    inherited,
    element field { select, inherited, convert?, dflt? }+,
    element ref { refBody }?

select = attribute select { path }
convert = attribute convert { "detag" | "split" | "localFragmentId" }

dflt =
  attribute default { "null" | "skip" }
  | attribute defaultValue { text }

path = xsd:string

inherited =
  attribute ns { xsd:anyURI }?,
  attribute datatypeLibrary { xsd:anyURI }?
