default namespace = "xri://$xrd*($v*2.0)" namespace xrd = "xri://$xrd*($v*2.0)" namespace saml = "urn:oasis:names:tc:SAML:2.0:assertion" namespace ds = "http://www.w3.org/2000/09/xmldsig#" namespace local = "" datatypes xs = "http://www.w3.org/2001/XMLSchema-datatypes" start = XRD anyelementbody = (attribute * {text} | text | element * {anyelementbody} )* non.xrd.element = element * - xrd:* { anyelementbody } other.attribute = attribute * - (local:* | xrd:* ) {text} XRD = element XRD { other.attribute *, attribute idref {xs:IDREF} ?, attribute version { "2.0" } ?, Query ?, Status ?, ServerStatus ?, Expires ?, ProviderID ?, (Redirect | Ref) ?, LocalID *, EquivID *, CanonicalID ?, CanonicalEquivID ?, Service *, element saml:Assertion {anyelementbody} ?, non.xrd.element * } Query = element Query { other.attribute *, text } statuspattern = other.attribute *, attribute code {xs:integer}, attribute cid { "absent" | "off" | "verified" | "failed" } ?, attribute ceid { "absent" | "off" | "verified" | "failed" } ?, text Status = element Status { statuspattern } ServerStatus = element ServerStatus { statuspattern } Expires = element Expires { other.attribute *, xs:dateTime } ProviderID = element ProviderID { other.attribute *, xs:anyURI } Redirect = element Redirect { other.attribute *, attribute priority {xs:integer}?, xs:anyURI } Ref = element Ref{ other.attribute *, attribute priority {xs:integer}?, xs:anyURI } LocalID = element LocalID { other.attribute *, attribute priority {xs:integer} ?, xs:anyURI } EquivID = element EquivID { other.attribute *, attribute priority {xs:integer} ?, xs:anyURI } CanonicalID = element CanonicalID { other.attribute *, xs:anyURI } CanonicalEquivID = element CanonicalEquivID { other.attribute *, xs:anyURI } Service = element Service { other.attribute *, attribute priority {xs:integer}?, ProviderID?, Type *, Path *, MediaType *, (URI+|Redirect+|Ref+)?, LocalID *, element ds:KeyInfo {anyelementbody}?, non.xrd.element * } URI = element URI { other.attribute *, attribute priority {xs:integer}?, attribute append {"none" | "local" | "authority" | "path" | "query" | "qxri"} ?, xs:anyURI } selection.attributes = attribute match {"any" | "default" | "non-null" | "null" } ?, attribute select { xs:boolean} ? Type = element Type { other.attribute *, selection.attributes, xs:anyURI } Path = element Path { other.attribute *, selection.attributes, xs:string } MediaType = element MediaType { other.attribute *, selection.attributes, xs:string }