navigating XML Schema

This is a memo to navigate around the case classes for XML Schema. Besides the derivation by extension that programming languages have as inheritance, XML Schema also allows derivation by restriction. Since Scala I don’t think expresses this easily, some types are wider than how they are specified in the schema.

XElement


XSimpleType

def parseXFacetsGroup: Parser[scalaxb.DataRecord[xmlschema.XFacetsOption]] =
      (((scalaxb.ElemName(targetNamespace, "minExclusive")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "minInclusive")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "maxExclusive")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "maxInclusive")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "totalDigits")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XTotalDigits](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "fractionDigits")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XNumFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "length")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XNumFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "minLength")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XNumFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "maxLength")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XNumFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "enumeration")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XNoFixedFacetable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "whiteSpace")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XWhiteSpace](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "pattern")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XPattern](x)))))

XComplexType

XSimpleContent

XComplexContent

XComplexTypeModelSequence1

This is an abbreviated form of complex content restriction of xs:anyType.

XTypeDefParticleOption

def parseXTypeDefParticleGroup(wrap: Boolean): Parser[scalaxb.DataRecord[xmlschema.XTypeDefParticleOption]] =
      (((scalaxb.ElemName(targetNamespace, "group")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XGroupRef](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "all")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XAllable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "choice")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XExplicitGroupable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "sequence")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XExplicitGroupable](x)))))

Likely at the runtime, this is parsed as XExplicitGroup.

def parseXParticleGroup(wrap: Boolean): Parser[scalaxb.DataRecord[xmlschema.XParticleOption]] =
      (((scalaxb.ElemName(targetNamespace, "element")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XLocalElementable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "group")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XGroupRef](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "all")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XAllable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "choice")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XExplicitGroupable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "sequence")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XExplicitGroupable](x)))) | 
      ((scalaxb.ElemName(targetNamespace, "any")) ^^ 
      (x => scalaxb.DataRecord(x.namespace, Some(x.name), fromXML[xmlschema.XAny](x)))))

Likely at the runtime, this is parsed as XAllType.