with Unicode.CES; use Unicode.CES; with Schema.Validators; use Schema.Validators; package body Schema.Schema_Grammar is function Create_Schema_For_Schema return XML_Grammar is Grammar : XML_Grammar; G, XML_G : XML_Grammar_NS; Typ, Typ2 : XML_Validator; Seq1, Seq2 : Sequence; Choice1 : Choice; All_Validator : XML_Type; Elem : XML_Element; Gr : XML_Group; Union, Union2 : XML_Validator; Attr : XML_Attribute_Group; begin Initialize (Grammar); Get_NS (Grammar, XML_Schema_URI, G); Get_NS (Grammar, XML_URI, XML_G); -- The "formChoice" type of schema.xsd Typ := Restriction_Of (Lookup (G, "NMTOKEN")); Add_Facet (Typ, "enumeration", "qualified"); Add_Facet (Typ, "enumeration", "unqualified"); Create_Global_Type (G, "formChoice", Typ); -- The "derivationControl" type Typ := Restriction_Of (Lookup (G, "NMTOKEN")); Add_Facet (Typ, "enumeration", "substitution"); Add_Facet (Typ, "enumeration", "extension"); Add_Facet (Typ, "enumeration", "restriction"); Create_Global_Type (G, "derivationControl", Typ); -- The "blockSet" type Typ := Restriction_Of (Lookup (G, "token")); Add_Facet (Typ, "enumeration", "#all"); All_Validator := Create_Local_Type (Typ); Union := Create_Union; Add_Union (Union, All_Validator); Add_Union (Union, List_Of (Lookup (G, "derivationControl"))); Create_Global_Type (G, "blockSet", Union); -- The "reducedDerivationControl" type Typ := Restriction_Of (Lookup (G, "derivationControl")); Add_Facet (Typ, "enumeration", "extension"); Add_Facet (Typ, "enumeration", "restriction"); Create_Global_Type (G, "reducedDerivationControl", Typ); -- The "derivationSet" type Union := Create_Union; Add_Union (Union, All_Validator); Add_Union (Union, List_Of (Lookup (G, "reducedDerivationControl"))); Create_Global_Type (G, "derivationSet", Union); -- The "uriReference" type Typ := Restriction_Of (Lookup (G, "anySimpleType")); Add_Facet (Typ, "whiteSpace", "collapse"); Create_Global_Type (G, "uriReference", Typ); -- The "openAttrs" type Typ := Restriction_Of (Lookup (G, "anyType")); Add_Attribute (Typ, Create_Any_Attribute (Process_Lax, NS => G, Kind => Namespace_Other)); Create_Global_Type (G, "openAttrs", Typ); -- The "annotated" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "annotated_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Typ := Extension_Of (Lookup (G, "openAttrs"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("id", G, Lookup (G, "ID"), Is_ID => True)); Create_Global_Type (G, "annotated", Typ); -- The "schemaTop" element ??? Missing abstract Set_Type (Create_Global_Element (G, "schemaTop", Qualified), Lookup (G, "annotated")); -- The "include" element Typ := Restriction_Of (Lookup (G, "annotated")); Add_Attribute (Typ, Create_Local_Attribute ("schemaLocation", G, Lookup (G, "uriReference"), Attribute_Use => Required)); Set_Type (Create_Global_Element (G, "include", Qualified), Create_Local_Type (Typ)); -- The "import" element Typ := Restriction_Of (Lookup (G, "annotated")); Add_Attribute (Typ, Create_Local_Attribute ("namespace", G, Lookup (G, "uriReference"))); Add_Attribute (Typ, Create_Local_Attribute ("schemaLocation", G, Lookup (G, "uriReference"))); Set_Type (Create_Global_Element (G, "import", Qualified), Create_Local_Type (Typ)); -- The "schema" element Choice1 := Create_Choice; Set_Debug_Name (Choice1, "schema_choice1"); Add_Particle (Choice1, Lookup_Element (G, "include")); Add_Particle (Choice1, Lookup_Element (G, "import")); Add_Particle (Choice1, Lookup_Element (G, "redefine")); Add_Particle (Choice1, Lookup_Element (G, "annotation")); Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "schema_seq1"); Add_Particle (Seq1, Lookup_Element (G, "schemaTop")); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0, Max_Occurs => Unbounded); Seq2 := Create_Sequence; Set_Debug_Name (Seq2, "schema_seq2"); Add_Particle (Seq2, Choice1, Min_Occurs => 0, Max_Occurs => Unbounded); Add_Particle (Seq2, Seq1, Min_Occurs => 0, Max_Occurs => Unbounded); Add_Attribute (Seq2, Create_Local_Attribute ("targetNamespace", G, Lookup (G, "uriReference"))); Add_Attribute (Seq2, Create_Local_Attribute ("version", G, Lookup (G, "token"))); Add_Attribute (Seq2, Create_Local_Attribute ("finalDefault", G, Lookup (G, "derivationSet"), Attribute_Use => Default, Value => "")); Add_Attribute (Seq2, Create_Local_Attribute ("blockDefault", G, Lookup (G, "blockSet"), Attribute_Use => Default, Value => "")); Add_Attribute (Seq2, Create_Local_Attribute ("attributeFormDefault", G, Lookup (G, "formChoice"), Attribute_Use => Default, Value => "unqualified")); Add_Attribute (Seq2, Create_Local_Attribute ("elementFormDefault", G, Lookup (G, "formChoice"), Attribute_Use => Default, Value => "unqualified")); Add_Attribute (Seq2, Create_Local_Attribute ("id", G, Lookup (G, "ID"), Is_ID => True)); Set_Type (Create_Global_Element (G, "schema", Qualified), Create_Local_Type (Seq2)); -- The "localComplexType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "localComplexType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "complexTypeModel")); Typ := Restriction_Of (Lookup (G, "complexType"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Attribute_Use => Prohibited)); Create_Global_Type (G, "localComplexType", Typ); -- The "keybase" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "keybase_seq"); Add_Particle (Seq1, Lookup_Element (G, "selector")); Add_Particle (Seq1, Lookup_Element (G, "field"), Min_Occurs => 1, Max_Occurs => Unbounded); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); Create_Global_Type (G, "keybase", Typ); -- The "identityConstraint" element ??? abstract=true Set_Type (Create_Global_Element (G, "identityConstraint", Qualified), Lookup (G, "keybase")); -- The "unique" element Elem := Create_Global_Element (G, "unique", Qualified); Set_Type (Elem, Get_Type (Lookup_Element (G, "identityConstraint"))); Set_Substitution_Group (Elem, Lookup_Element (G, "identityConstraint")); -- The "keyref" element Typ := Extension_Of (Lookup (G, "keybase")); Add_Attribute (Typ, Create_Local_Attribute ("refer", G, Lookup (G, "QName"), Attribute_Use => Required)); Elem := Create_Global_Element (G, "keyref", Qualified); Set_Type (Elem, Create_Local_Type (Typ)); Set_Substitution_Group (Elem, Lookup_Element (G, "identityConstraint")); -- The "key" element Elem := Create_Global_Element (G, "key", Qualified); Set_Type (Elem, Get_Type (Lookup_Element (G, "identityConstraint"))); Set_Substitution_Group (Elem, Lookup_Element (G, "identityConstraint")); -- The "XPathExprApprox" type Incorrect pattern Typ := Restriction_Of (Lookup (G, "string")); -- Add_Facet (Typ, "pattern", "(/|//|\.|\.\.|:|::|\||(\w-[.:/|])+)+"); Create_Global_Type (G, "XPathExprApprox", Typ); -- The "XPathSpec" type" Typ := Restriction_Of (Lookup (G, "annotated")); Add_Attribute (Typ, Create_Local_Attribute ("xpath", G, Lookup (G, "XPathExprApprox"))); Create_Global_Type (G, "XPathSpec", Typ); -- The "selector" element Set_Type (Create_Global_Element (G, "selector", Qualified), Lookup (G, "XPathSpec")); -- The "field" element Set_Type (Create_Global_Element (G, "field", Qualified), Lookup (G, "XPathSpec")); -- The "allNNI" type" Union := Create_Union; Add_Union (Union, Lookup (G, "nonNegativeInteger")); Typ := Restriction_Of (Lookup (G, "NMTOKEN")); Add_Facet (Typ, "enumeration", "unbounded"); Add_Union (Union, Create_Local_Type (Typ)); Create_Global_Type (G, "allNNI", Union); -- The "occurs" AttributeGroup Attr := Create_Global_Attribute_Group (G, "occurs"); Add_Attribute (Attr, Create_Local_Attribute ("minOccurs", G, Lookup (G, "nonNegativeInteger"), Attribute_Use => Default, Value => "1")); Add_Attribute (Attr, Create_Local_Attribute ("maxOccurs", G, Lookup (G, "allNNI"), Attribute_Use => Default, Value => "1")); -- From AttributeGroup "defRef" Attr := Create_Global_Attribute_Group (G, "defRef"); Add_Attribute (Attr, Create_Local_Attribute ("name", G, Lookup (G, "NCName"))); Add_Attribute (Attr, Create_Local_Attribute ("ref", G, Lookup (G, "QName"))); -- The "element" type ??? abstract=true Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "element_seq"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "element_choice"); Add_Particle (Choice1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("complexType", G, Lookup (G, "localComplexType"), Qualified)); Add_Particle (Seq1, Choice1, Min_Occurs => 0); Add_Particle (Seq1, Lookup_Element (G, "identityConstraint"), Min_Occurs => 0, Max_Occurs => Unbounded); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Set_Debug_Name (Typ, "element_ext"); Create_Global_Type (G, "element", Typ); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "occurs")); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "defRef")); Add_Attribute (Typ, Create_Local_Attribute ("type", G, Lookup (G, "QName"))); Add_Attribute (Typ, Create_Local_Attribute ("substitutionGroup", G, Lookup (G, "QName"))); Add_Attribute (Typ, Create_Local_Attribute ("default", G, Lookup (G, "string"))); Add_Attribute (Typ, Create_Local_Attribute ("fixed", G, Lookup (G, "string"))); Add_Attribute (Typ, Create_Local_Attribute ("nillable", G, Lookup (G, "boolean"), Attribute_Use => Default, Value => "false")); Add_Attribute (Typ, Create_Local_Attribute ("abstract", G, Lookup (G, "boolean"), Attribute_Use => Default, Value => "false")); Add_Attribute (Typ, Create_Local_Attribute ("final", G, Lookup (G, "derivationSet"), Attribute_Use => Default, Value => "")); Add_Attribute (Typ, Create_Local_Attribute ("block", G, Lookup (G, "blockSet"), Attribute_Use => Default, Value => "")); Add_Attribute (Typ, Create_Local_Attribute ("form", G, Lookup (G, "formChoice"))); -- The "appinfo" element" Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "appinfo_seq"); Seq2 := Create_Sequence; Add_Particle (Seq1, Seq2, Min_Occurs => 0, Max_Occurs => Unbounded); Set_Debug_Name (Seq2, "appinfo_seq2"); -- Add_Attribute (Seq1, Create_Local_Attribute ("source", G, Lookup (G, "uriReference"))); Set_Mixed_Content (Seq1, True); Set_Type (Create_Global_Element (G, "appinfo", Qualified), Create_Local_Type (Seq1)); -- The "documentation" element Seq1 := Create_Sequence; Seq2 := Create_Sequence; Add_Particle (Seq1, Seq2, Min_Occurs => 0, Max_Occurs => Unbounded); Set_Debug_Name (Seq1, "documentation_seq"); Set_Debug_Name (Seq2, "documentation_seq2"); -- Add_Attribute (Seq1, Create_Local_Attribute ("source", G, Lookup (G, "uriReference"))); Add_Attribute (Seq1, Lookup_Attribute (XML_G, "lang")); Set_Mixed_Content (Seq1, True); Set_Type (Create_Global_Element (G, "documentation", Qualified), Create_Local_Type (Seq1)); -- The "annotation" element ??? invalid Seq1 := Create_Sequence; Choice1 := Create_Choice; Add_Particle (Seq1, Choice1, Min_Occurs => 0, Max_Occurs => Unbounded); Set_Debug_Name (Seq1, "annotation_seq"); Set_Debug_Name (Choice1, "annotation_choice"); Add_Particle (Choice1, Lookup_Element (G, "appinfo")); Add_Particle (Choice1, Lookup_Element (G, "documentation")); Set_Type (Create_Global_Element (G, "annotation", Qualified), Create_Local_Type (Seq1)); -- The "topLevelElement" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "topLevelElement_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "topLevelElement_choice"); Add_Particle (Seq1, Choice1, Min_Occurs => 0); Add_Particle (Choice1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("complexType", G, Lookup (G, "localComplexType"), Qualified)); Add_Particle (Seq1, Lookup_Element (G, "identityConstraint"), Min_Occurs => 0, Max_Occurs => Unbounded); Typ := Restriction_Of (Lookup (G, "element"), XML_Validator (Seq1)); Set_Debug_Name (Typ, "topLevelElement restriction"); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("form", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("minOccurs", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("maxOccurs", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); Create_Global_Type (G, "topLevelElement", Typ); -- The "element" element Elem := Create_Global_Element (G, "element", Qualified); Set_Type (Elem, Lookup (G, "topLevelElement")); Set_Substitution_Group (Elem, Lookup_Element (G, "schemaTop")); -- The "attribute" element Elem := Create_Global_Element (G, "attribute", Qualified); Set_Type (Elem, Lookup (G, "topLevelAttribute")); Set_Substitution_Group (Elem, Lookup_Element (G, "schemaTop")); -- The "redefinable" element -- abstract=true Elem := Create_Global_Element (G, "redefinable", Qualified); Set_Type (Elem, Get_Type (Lookup_Element (G, "schemaTop"))); Set_Substitution_Group (Elem, Lookup_Element (G, "schemaTop")); -- The "all" element Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "all_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Seq2 := Create_Sequence; Set_Debug_Name (Seq2, "all_seq2"); Add_Particle (Seq2, Lookup_Element (G, "annotation"), Min_Occurs => 0); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "all_choice"); Add_Particle (Seq2, Choice1, Min_Occurs => 0); Add_Particle (Choice1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("complexType", G, Lookup (G, "localComplexType"), Qualified)); Add_Particle (Seq2, Lookup_Element (G, "identityConstraint"), Min_Occurs => 0, Max_Occurs => Unbounded); Typ2 := Restriction_Of (Lookup (G, "localElement"), XML_Validator (Seq2)); Typ := Restriction_Of (Lookup (G, "nonNegativeInteger")); Add_Facet (Typ, "enumeration", "0"); Add_Facet (Typ, "enumeration", "1"); Add_Attribute (Typ2, Create_Local_Attribute ("minOccurs", G, Create_Local_Type (Typ), Attribute_Use => Default, Value => "1")); Typ := Restriction_Of (Lookup (G, "allNNI")); Add_Facet (Typ, "enumeration", "0"); Add_Facet (Typ, "enumeration", "1"); Add_Attribute (Typ2, Create_Local_Attribute ("maxOccurs", G, Create_Local_Type (Typ), Attribute_Use => Default, Value => "1")); Add_Particle (Seq1, Create_Local_Element ("element", G, Create_Local_Type (Typ2), Qualified), Min_Occurs => 0, Max_Occurs => Unbounded); Typ := Restriction_Of (Lookup (G, "explicitGroup"), XML_Validator (Seq1)); Typ2 := Restriction_Of (Lookup (G, "nonNegativeInteger")); Add_Facet (Typ2, "enumeration", "1"); Add_Attribute (Typ, Create_Local_Attribute ("minOccurs", G, Create_Local_Type (Typ2), Attribute_Use => Default, Value => "1")); Typ2 := Restriction_Of (Lookup (G, "allNNI")); Add_Facet (Typ2, "enumeration", "1"); Add_Attribute (Typ, Create_Local_Attribute ("maxOccurs", G, Create_Local_Type (Typ2), Attribute_Use => Default, Value => "1")); Set_Type (Create_Global_Element (G, "all", Qualified), Create_Local_Type (Typ)); -- The "localElement" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "localElement_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "localElement_choice"); Add_Particle (Seq1, Choice1, Min_Occurs => 0); Add_Particle (Choice1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("complexType", G, Lookup (G, "localComplexType"), Qualified)); Add_Particle (Seq1, Lookup_Element (G, "identityConstraint"), Min_Occurs => 0, Max_Occurs => Unbounded); Add_Attribute (Seq1, Create_Local_Attribute ("substitutionGroup", G, Attribute_Use => Prohibited)); Add_Attribute (Seq1, Create_Local_Attribute ("final", G, Attribute_Use => Prohibited)); Typ := Restriction_Of (Lookup (G, "element"), XML_Validator (Seq1)); Create_Global_Type (G, "localElement", Typ); -- The "particle" group Gr := Create_Global_Group (G, "particle"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "particle_choice"); Add_Particle (Gr, Choice1); Add_Particle (Choice1, Create_Local_Element ("element", G, Lookup (G, "localElement"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("group", G, Lookup (G, "groupRef"), Qualified)); Add_Particle (Choice1, Lookup_Element (G, "all")); Add_Particle (Choice1, Lookup_Element (G, "choice")); Add_Particle (Choice1, Lookup_Element (G, "sequence")); Add_Particle (Choice1, Lookup_Element (G, "any")); -- "group" type Typ := Extension_Of (Lookup (G, "annotated"), Lookup_Group (G, "particle"), Min_Occurs => 0, Max_Occurs => Unbounded); Set_Debug_Name (Typ, "group_ext"); Create_Global_Type (G, "group", Typ); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "defRef")); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "occurs")); -- The "nestedParticle" element Gr := Create_Global_Group (G, "nestedParticle"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "nestedParticle_choice"); Add_Particle (Gr, Choice1); Add_Particle (Choice1, Create_Local_Element ("element", G, Lookup (G, "localElement"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("group", G, Lookup (G, "groupRef"), Qualified)); Add_Particle (Choice1, Lookup_Element (G, "choice")); Add_Particle (Choice1, Lookup_Element (G, "sequence")); Add_Particle (Choice1, Lookup_Element (G, "any")); -- "explicitGroup" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "explicitGroup_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "nestedParticle"), Min_Occurs => 0, Max_Occurs => Unbounded); Typ := Restriction_Of (Lookup (G, "group"), XML_Validator (Seq1)); Create_Global_Type (G, "explicitGroup", Typ); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Lookup (G, "QName"), Attribute_Use => Prohibited)); -- The "choice" element Set_Type (Create_Global_Element (G, "choice", Qualified), Lookup (G, "explicitGroup")); -- The "sequence" element Set_Type (Create_Global_Element (G, "sequence", Qualified), Lookup (G, "explicitGroup")); -- "groupDefParticle" group Gr := Create_Global_Group (G, "groupDefParticle"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "groupDefParticle_choice"); Add_Particle (Gr, Choice1); Add_Particle (Choice1, Lookup_Element (G, "all")); Add_Particle (Choice1, Lookup_Element (G, "choice")); Add_Particle (Choice1, Lookup_Element (G, "sequence")); -- The "realGroup" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "realGroup_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "groupDefParticle"), Min_Occurs => 0, Max_Occurs => 1); Typ := Restriction_Of (Lookup (G, "group"), XML_Validator (Seq1)); Create_Global_Type (G, "realGroup", Typ); -- The "groupRef" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "groupRef_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Typ := Restriction_Of (Lookup (G, "realGroup"), XML_Validator (Seq1)); Create_Global_Type (G, "groupRef", Typ); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Lookup (G, "QName"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Attribute_Use => Prohibited)); -- The "group" element Elem := Create_Global_Element (G, "group", Qualified); Set_Type (Elem, Lookup (G, "namedGroup")); Set_Substitution_Group (Elem, Lookup_Element (G, "redefinable")); -- The "namedGroup" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "namedGroup_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "groupDefParticle"), Min_Occurs => 1, Max_Occurs => 1); Typ := Restriction_Of (Lookup (G, "realGroup"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("minOccurs", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("maxOccurs", G, Attribute_Use => Prohibited)); Create_Global_Type (G, "namedGroup", Typ); -- The "attributeGroup" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "attributeGroup_seq"); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "defRef")); Create_Global_Type (G, "attributeGroup", Typ); -- The "namedAttributeGroup" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "namedAttributeGroup_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Typ := Restriction_Of (Lookup (G, "attributeGroup"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Attribute_Use => Prohibited)); Create_Global_Type (G, "namedAttributeGroup", Typ); -- The "attributeGroup" element Elem := Create_Global_Element (G, "attributeGroup", Qualified); Set_Type (Elem, Lookup (G, "namedAttributeGroup")); Set_Substitution_Group (Elem, Lookup_Element (G, "redefinable")); -- The "typeDefParticle" group Gr := Create_Global_Group (G, "typeDefParticle"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "typeDefParticle_choice"); Add_Particle (Gr, Choice1); Add_Particle (Choice1, Create_Local_Element ("group", G, Lookup (G, "groupRef"), Qualified)); Add_Particle (Choice1, Lookup_Element (G, "all")); Add_Particle (Choice1, Lookup_Element (G, "choice")); Add_Particle (Choice1, Lookup_Element (G, "sequence")); -- The "attribute" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "attribute_seq"); Add_Particle (Seq1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified), Min_Occurs => 0); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Set_Debug_Name (Typ, "attribute_ext"); Create_Global_Type (G, "attribute", Typ); Add_Attribute (Typ, Create_Local_Attribute ("type", G, Lookup (G, "QName"))); Typ2 := Restriction_Of (Lookup (G, "NMTOKEN")); Add_Facet (Typ2, "enumeration", "prohibited"); Add_Facet (Typ2, "enumeration", "optional"); Add_Facet (Typ2, "enumeration", "required"); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "defRef")); Add_Attribute (Typ, Create_Local_Attribute ("use", G, Create_Local_Type (Typ2), Attribute_Use => Default, Value => "optional")); Add_Attribute (Typ, Create_Local_Attribute ("default", G, Lookup (G, "string"), Attribute_Use => Optional)); Add_Attribute (Typ, Create_Local_Attribute ("fixed", G, Lookup (G, "string"), Attribute_Use => Optional)); Add_Attribute (Typ, Create_Local_Attribute ("form", G, Lookup (G, "formChoice"))); -- The "topLevelAttribute" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "topLevelAttribute_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified), Min_Occurs => 0); Typ := Restriction_Of (Lookup (G, "attribute"), XML_Validator (Seq1)); Set_Debug_Name (Typ, "topLevelAttribute restriction"); Create_Global_Type (G, "topLevelAttribute", Typ); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("form", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("use", G, Attribute_Use => Prohibited)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); -- The "anyAttributes" element Set_Type (Create_Global_Element (G, "anyAttribute", Qualified), Lookup (G, "wildcard")); -- The "namespaceList" type ??? Incomplete Union := Create_Union; Typ := Restriction_Of (Lookup (G, "token")); Add_Facet (Typ, "enumeration", "##any"); Add_Facet (Typ, "enumeration", "##other"); Add_Union (Union, Create_Local_Type (Typ)); Union2 := Create_Union; Add_Union (Union, Create_Local_Type (Union2)); Add_Union (Union2, Lookup (G, "uriReference")); Typ := Restriction_Of (Lookup (G, "token")); Add_Facet (Typ, "enumeration", "##targetNamespace"); Add_Facet (Typ, "enumeration", "##local"); Add_Union (Union2, Create_Local_Type (Typ)); Create_Global_Type (G, "namespaceList", Union); -- The "wildcard" type Typ := Restriction_Of (Lookup (G, "annotated")); Add_Attribute (Typ, Create_Local_Attribute ("namespace", G, Lookup (G, "namespaceList"), Attribute_Use => Default, Value => "##any")); Typ2 := Restriction_Of (Lookup (G, "NMTOKEN")); Add_Facet (Typ2, "enumeration", "skip"); Add_Facet (Typ2, "enumeration", "lax"); Add_Facet (Typ2, "enumeration", "strict"); Add_Attribute (Typ, Create_Local_Attribute ("processContents", G, Create_Local_Type (Typ2), Attribute_Use => Default, Value => "strict")); Create_Global_Type (G, "wildcard", Typ); -- The "any" element ??? Error if you put before "wildcard" Typ := Restriction_Of (Lookup (G, "wildcard")); Add_Attribute_Group (Typ, Lookup_Attribute_Group (G, "occurs")); Set_Type (Create_Global_Element (G, "any", Qualified), Create_Local_Type (Typ)); -- The "attributeGroupRef" ??? invalid Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "attributeGroupRef_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Typ := Restriction_Of (Lookup (G, "attributeGroup"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("ref", G, Lookup (G, "QName"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Attribute_Use => Prohibited)); Create_Global_Type (G, "attributeGroupRef", Typ); -- The "attrDecls" group Gr := Create_Global_Group (G, "attrDecls"); Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "attrDecls_seq"); Add_Particle (Gr, Seq1); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "attrDecls_choice"); Add_Particle (Seq1, Choice1, Min_Occurs => 0, Max_Occurs => Unbounded); Add_Particle (Choice1, Create_Local_Element ("attribute", G, Lookup (G, "attribute"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("attributeGroup", G, Lookup (G, "attributeGroupRef"), Qualified)); Add_Particle (Seq1, Lookup_Element (G, "anyAttribute"), Min_Occurs => 0); -- The "extensionType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "extensionType_seq"); Add_Particle (Seq1, Lookup_Group (G, "typeDefParticle"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Set_Debug_Name (Typ, "extensionType_ext"); Add_Attribute (Typ, Create_Local_Attribute ("base", G, Lookup (G, "QName"))); Create_Global_Type (G, "extensionType", Typ); -- The "restrictionType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "restrictionType_seq"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "restrictionType_choice"); Add_Particle (Choice1, Lookup_Group (G, "typeDefParticle"), Min_Occurs => 0); Add_Particle (Choice1, Lookup_Group (G, "simpleRestrictionModel"), Min_Occurs => 0); Add_Particle (Seq1, Choice1); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("base", G, Lookup (G, "QName"), Attribute_Use => Required)); Create_Global_Type (G, "restrictionType", Typ); -- The "simpleRestrictionModel" group Gr := Create_Global_Group (G, "simpleRestrictionModel"); Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "simpleRestrictionModel_seq"); Add_Particle (Seq1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Element (G, "facet"), Min_Occurs => 0, Max_Occurs => Unbounded); Add_Particle (Gr, Seq1); -- The "simpleExtensionType" Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "simpleExtensionType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Create_Global_Type (G, "simpleExtensionType", Restriction_Of (Lookup (G, "extensionType"), XML_Validator (Seq1))); -- The "simpleRestrictionType" Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "simpleRestrictionType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "simpleRestrictionModel"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Create_Global_Type (G, "simpleRestrictionType", Restriction_Of (Lookup (G, "restrictionType"), XML_Validator (Seq1))); -- The "simpleContent" element Choice1 := Create_Choice; Set_Debug_Name (Choice1, "simpleContent_choice"); Add_Particle (Choice1, Create_Local_Element ("restriction", G, Lookup (G, "simpleRestrictionType"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("extension", G, Lookup (G, "simpleExtensionType"), Qualified)); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Choice1)); Set_Debug_Name (Typ, "simpleContent_ext"); Set_Type (Create_Global_Element (G, "simpleContent", Qualified), Create_Local_Type (Typ)); -- The "complexRestrictionType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "complexRestrictionType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "typeDefParticle"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); Typ := Restriction_Of (Lookup (G, "restrictionType"), XML_Validator (Seq1)); Create_Global_Type (G, "complexRestrictionType", Typ); -- The "complexContent" element Choice1 := Create_Choice; Set_Debug_Name (Choice1, "complexContent_choice"); Add_Particle (Choice1, Create_Local_Element ("restriction", G, Lookup (G, "complexRestrictionType"), Qualified)); Add_Particle (Choice1, Create_Local_Element ("extension", G, Lookup (G, "extensionType"), Qualified)); Add_Attribute (Choice1, Create_Local_Attribute ("mixed", G, Lookup (G, "boolean"))); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Choice1)); Set_Type (Create_Global_Element (G, "complexContent", Qualified), Create_Local_Type (Typ)); -- The "complexTypeModel" group Gr := Create_Global_Group (G, "complexTypeModel"); Choice1 := Create_Choice; Set_Debug_Name (Choice1, "complexTypeModel_choice"); Add_Particle (Gr, Choice1); Add_Particle (Choice1, Lookup_Element (G, "simpleContent")); Add_Particle (Choice1, Lookup_Element (G, "complexContent")); Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "complexTypeModel_seq"); Add_Particle (Choice1, Seq1); Add_Particle (Seq1, Lookup_Group (G, "typeDefParticle"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "attrDecls")); -- The "complexType" type ??? abstract=true Typ := Extension_Of (Lookup (G, "annotated"), Lookup_Group (G, "complexTypeModel")); Set_Debug_Name (Typ, "complexType_ext"); Create_Global_Type (G, "complexType", Typ); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"))); Add_Attribute (Typ, Create_Local_Attribute ("mixed", G, Lookup (G, "boolean"), Attribute_Use => Default, Value => "false")); Add_Attribute (Typ, Create_Local_Attribute ("abstract", G, Lookup (G, "boolean"), Attribute_Use => Default, Value => "false")); Add_Attribute (Typ, Create_Local_Attribute ("final", G, Lookup (G, "derivationSet"))); Add_Attribute (Typ, Create_Local_Attribute ("block", G, Lookup (G, "derivationSet"), Attribute_Use => Default, Value => "")); -- The "topLevelComplexType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "topLevelComplexType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Group (G, "complexTypeModel")); Typ := Restriction_Of (Lookup (G, "complexType"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); Create_Global_Type (G, "topLevelComplexType", Typ); -- The "complexType" element Elem := Create_Global_Element (G, "complexType", Qualified); Set_Type (Elem, Lookup (G, "topLevelComplexType")); Set_Substitution_Group (Elem, Lookup_Element (G, "redefinable")); -- The "notation" element Typ := Restriction_Of (Lookup (G, "annotated")); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("public", G, Lookup (G, "public"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("system", G, Lookup (G, "uriReference"))); Elem := Create_Global_Element (G, "notation", Qualified); Set_Type (Elem, Create_Local_Type (Typ)); Set_Substitution_Group (Elem, Lookup_Element (G, "schemaTop")); -- The "public" type Create_Global_Type (G, "public", Get_Validator (Lookup (G, "token"))); -- The "redefine" element Seq1 := Create_Sequence; Choice1 := Create_Choice; Add_Particle (Seq1, Choice1, Min_Occurs => 0, Max_Occurs => Unbounded); Set_Debug_Name (Choice1, "redefine_choice"); Set_Debug_Name (Seq1, "redefine_seq"); Add_Particle (Choice1, Lookup_Element (G, "annotation")); Add_Particle (Choice1, Lookup_Element (G, "redefinable")); Add_Attribute (Seq1, Create_Local_Attribute ("schemaLocation", G, Lookup (G, "uriReference"), Attribute_Use => Required)); Typ := Extension_Of (Lookup (G, "openAttrs"), XML_Validator (Seq1)); Set_Type (Create_Global_Element (G, "redefine", Qualified), Create_Local_Type (Typ)); -- From datatypes.xsd -- The "localSimpleType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "localSimpleType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Element (G, "simpleDerivation")); Typ := Restriction_Of (Lookup (G, "simpleType"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Attribute_Use => Prohibited)); Create_Global_Type (G, "localSimpleType", Typ); -- The "simpleDerivation" element ??? abstract=true Set_Type (Create_Global_Element (G, "simpleDerivation", Qualified), Lookup (G, "annotated")); -- The "simpleType" type ??? abstract=true Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "simpleType_seq"); Add_Particle (Seq1, Lookup_Element (G, "simpleDerivation")); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"))); Create_Global_Type (G, "simpleType", Typ); -- The "topLevelSimpleType" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "topLevelSimpleType_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Add_Particle (Seq1, Lookup_Element (G, "simpleDerivation")); Typ := Restriction_Of (Lookup (G, "simpleType"), XML_Validator (Seq1)); Create_Global_Type (G, "topLevelSimpleType", Typ); Add_Attribute (Typ, Create_Local_Attribute ("name", G, Lookup (G, "NCName"), Attribute_Use => Required)); -- The "simpleType" element Elem := Create_Global_Element (G, "simpleType", Qualified); Set_Type (Elem, Lookup (G, "topLevelSimpleType")); Set_Substitution_Group (Elem, Lookup_Element (G, "redefinable")); -- The "restriction" element Typ := Extension_Of (Lookup (G, "annotated"), Lookup_Group (G, "simpleRestrictionModel")); Add_Attribute (Typ, Create_Local_Attribute ("base", G, Lookup (G, "QName"), Attribute_Use => Optional)); Set_Debug_Name (Typ, "restriction_ext"); Elem := Create_Global_Element (G, "restriction", Qualified); Set_Type (Elem, Create_Local_Type (Typ)); Set_Substitution_Group (Elem, Lookup_Element (G, "simpleDerivation")); -- The "union" element Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "union_seq"); Add_Particle (Seq1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified), Min_Occurs => 0, Max_Occurs => Unbounded); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("memberTypes", G, List_Of (Lookup (G, "QName")), Attribute_Use => Optional)); Elem := Create_Global_Element (G, "union", Qualified); Set_Type (Elem, Create_Local_Type (Typ)); Set_Substitution_Group (Elem, Lookup_Element (G, "simpleDerivation")); -- The "list" element Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "list_seq"); Add_Particle (Seq1, Create_Local_Element ("simpleType", G, Lookup (G, "localSimpleType"), Qualified), Min_Occurs => 0); Typ := Extension_Of (Lookup (G, "annotated"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("itemType", G, Lookup (G, "QName"), Attribute_Use => Optional)); Elem := Create_Global_Element (G, "list", Qualified); Set_Type (Elem, Create_Local_Type (Typ)); Set_Substitution_Group (Elem, Lookup_Element (G, "simpleDerivation")); -- The "facet" type Typ := Restriction_Of (Lookup (G, "annotated")); Add_Attribute (Typ, Create_Local_Attribute ("value", G, Lookup (G, "anySimpleType"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Local_Attribute ("fixed", G, Lookup (G, "boolean"), Attribute_Use => Optional)); Create_Global_Type (G, "facet", Typ); -- The "numFacet" type Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "numFacet_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Typ := Restriction_Of (Lookup (G, "facet"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("value", G, Lookup (G, "nonNegativeInteger"))); Create_Global_Type (G, "numFacet", Typ); -- The "facet" element ??? abstract=true Set_Type (Create_Global_Element (G, "facet", Qualified), Lookup (G, "facet")); -- The "enumeration" element Elem := Create_Global_Element (G, "enumeration", Qualified); Set_Type (Elem, Get_Type (Lookup_Element (G, "facet"))); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "pattern" element Elem := Create_Global_Element (G, "pattern", Qualified); Set_Type (Elem, Get_Type (Lookup_Element (G, "facet"))); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "maxLength" element Elem := Create_Global_Element (G, "maxLength", Qualified); Set_Type (Elem, Lookup (G, "numFacet")); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "minLength" element Elem := Create_Global_Element (G, "minLength", Qualified); Set_Type (Elem, Lookup (G, "numFacet")); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "length" element Elem := Create_Global_Element (G, "length", Qualified); Set_Type (Elem, Lookup (G, "numFacet")); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "minBound" element Elem := Create_Global_Element (G, "minBound", Qualified); Set_Type (Elem, Lookup (G, "facet")); Set_Abstract (Elem, True); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "minExclusive" element Elem := Create_Global_Element (G, "minExclusive", Qualified); Set_Type (Elem, Lookup (G, "facet")); Set_Substitution_Group (Elem, Lookup_Element (G, "minBound")); -- The "minInclusive" element Elem := Create_Global_Element (G, "minInclusive", Qualified); Set_Type (Elem, Lookup (G, "facet")); Set_Substitution_Group (Elem, Lookup_Element (G, "minBound")); -- The "maxBound" element Elem := Create_Global_Element (G, "maxBound", Qualified); Set_Type (Elem, Lookup (G, "facet")); Set_Abstract (Elem, True); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); -- The "maxExclusive" element Elem := Create_Global_Element (G, "maxExclusive", Qualified); Set_Type (Elem, Lookup (G, "facet")); Set_Substitution_Group (Elem, Lookup_Element (G, "maxBound")); -- The "maxInclusive" element Elem := Create_Global_Element (G, "maxInclusive", Qualified); Set_Type (Elem, Lookup (G, "facet")); Set_Substitution_Group (Elem, Lookup_Element (G, "maxBound")); -- The "whiteSpace" element Elem := Create_Global_Element (G, "whiteSpace", Qualified); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); Seq1 := Create_Sequence; Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Typ := Restriction_Of (Lookup (G, "facet"), XML_Validator (Seq1)); Typ2 := Restriction_Of (Lookup (G, "NMTOKEN")); Add_Facet (Typ2, "enumeration", "preserve"); Add_Facet (Typ2, "enumeration", "replace"); Add_Facet (Typ2, "enumeration", "collapse"); Add_Attribute (Typ, Create_Local_Attribute ("value", G, Create_Local_Type (Typ2))); Set_Type (Elem, Create_Local_Type (Typ)); -- The "totalDigits" element Elem := Create_Global_Element (G, "totalDigits", Qualified); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); Seq1 := Create_Sequence; Set_Debug_Name (Seq1, "totalDigits_seq"); Add_Particle (Seq1, Lookup_Element (G, "annotation"), Min_Occurs => 0); Typ := Restriction_Of (Lookup (G, "numFacet"), XML_Validator (Seq1)); Add_Attribute (Typ, Create_Local_Attribute ("value", G, Lookup (G, "positiveInteger"), Attribute_Use => Required)); Add_Attribute (Typ, Create_Any_Attribute (Process_Lax, NS => G, Kind => Namespace_Other)); Set_Type (Elem, Create_Local_Type (Typ)); -- The "fractionDigits" element Elem := Create_Global_Element (G, "fractionDigits", Qualified); Set_Type (Elem, Lookup (G, "numFacet")); Set_Substitution_Group (Elem, Lookup_Element (G, "facet")); return Grammar; end Create_Schema_For_Schema; end Schema.Schema_Grammar;