common_core_parser 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +31 -0
- data/MIT-LICENSE +20 -0
- data/README.md +14 -0
- data/Rakefile +53 -0
- data/common_core_parser.gemspec +26 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_1.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_2.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_3.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_4.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_5.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_6.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_7.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_K-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_L_K.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RF_1.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RF_2.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RF_3.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RF_4.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RF_5.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RF_K.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RH_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RH_6-8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RH_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_1.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_2.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_3.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_4.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_5.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_6.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_7.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RI_K.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_1.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_2.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_3.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_4.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_5.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_6.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_7.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RL_K.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RST_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RST_6-8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_RST_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_R_K-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_1.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_2.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_3.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_4.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_5.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_6.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_7.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_K-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_SL_K.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_WHST_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_WHST_6-8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_WHST_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_1.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_11-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_2.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_3.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_4.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_5.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_6.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_7.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_8.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_9-10.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_K-12.xml +23 -0
- data/data/ELA/Domain/ELACCXMLDomain_W_K.xml +23 -0
- data/data/ELA/Standard Type/ELACCXMLStandardType.xml +20 -0
- data/data/ELA/Subject/ELACCXMLStandardDocument.xml +21 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade1.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade11-12.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade2.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade3.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade4.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade5.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade6-8.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade6.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade7.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade8.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGrade9-10.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGradeK-12.xml +23 -0
- data/data/ELA/Subject Grade/ELACCXMLGradeK.xml +23 -0
- data/data/ELA-Literacy.xml +21374 -0
- data/data/Math.xml +11027 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_G_1.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_MD_1.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_MD_2.xml +22 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_MD_3.xml +22 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_NBT_1.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_NBT_2.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_NBT_3.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_OA_1.xml +22 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_OA_2.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_OA_3.xml +22 -0
- data/data/Mathematics/Grade1/Domain/Clusters/Math_Grade1_OA_4.xml +20 -0
- data/data/Mathematics/Grade1/Domain/Math_Grade1_G.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Math_Grade1_MD.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Math_Grade1_NBT.xml +21 -0
- data/data/Mathematics/Grade1/Domain/Math_Grade1_OA.xml +24 -0
- data/data/Mathematics/Grade1/Mathematics_Grade_1.xml +18 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_G_1.xml +20 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_MD_1.xml +22 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_MD_2.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_MD_3.xml +20 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_MD_4.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_NBT_1.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_NBT_2.xml +20 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_OA_1.xml +22 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_OA_2.xml +22 -0
- data/data/Mathematics/Grade2/Domain/Clusters/Math_Grade2_OA_3.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Math_Grade2_G.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Math_Grade2_MD.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Math_Grade2_NBT.xml +21 -0
- data/data/Mathematics/Grade2/Domain/Math_Grade2_OA.xml +24 -0
- data/data/Mathematics/Grade2/Mathematics_Grade_2.xml +18 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_G_1.xml +20 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_MD_1.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_MD_2.xml +20 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_MD_3.xml +20 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_MD_4.xml +20 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_NBT_1.xml +22 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_NF_1.xml +22 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_OA_1.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_OA_2.xml +20 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_OA_3.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Clusters/Math_Grade3_OA_4.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Math_Grade3_G.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Math_Grade3_MD.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Math_Grade3_NBT.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Math_Grade3_NF.xml +21 -0
- data/data/Mathematics/Grade3/Domain/Math_Grade3_OA.xml +21 -0
- data/data/Mathematics/Grade3/Mathematics_Grade_3.xml +18 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_G_1.xml +20 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_MD_1.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_MD_2.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_MD_3.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_NBT_1.xml +20 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_NBT_2.xml +20 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_NF_1.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_NF_2.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_NF_3.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_OA_1.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_OA_2.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Clusters/Math_Grade4_OA_3.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Math_Grade4_G.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Math_Grade4_MD.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Math_Grade4_NBT.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Math_Grade4_NF.xml +21 -0
- data/data/Mathematics/Grade4/Domain/Math_Grade4_OA.xml +21 -0
- data/data/Mathematics/Grade4/Mathematics_Grade_4.xml +18 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_G_1.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_G_2.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_MD_1.xml +21 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_MD_2.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_MD_3.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_NBT_1.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_NBT_2.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_NF_1.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_NF_2.xml +21 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_OA_1.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Clusters/Math_Grade5_OA_2.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Math_Grade5_G.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Math_Grade5_MD.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Math_Grade5_NBT.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Math_Grade5_NF.xml +20 -0
- data/data/Mathematics/Grade5/Domain/Math_Grade5_OA.xml +20 -0
- data/data/Mathematics/Grade5/Mathematics_Grade_5.xml +18 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_EE_1.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_EE_2.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_EE_3.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_G_1.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_NS_1.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_NS_2.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_NS_3.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_RP_1.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_SP_1.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Clusters/Math_Grade6_SP_2.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Math_Grade6_EE.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Math_Grade6_G.xml +21 -0
- data/data/Mathematics/Grade6/Domain/Math_Grade6_NS.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Math_Grade6_RP.xml +20 -0
- data/data/Mathematics/Grade6/Domain/Math_Grade6_SP.xml +20 -0
- data/data/Mathematics/Grade6/Mathematics_Grade_6.xml +18 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_EE_1.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_EE_2.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_G_1.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_G_2.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_NS_1.xml +21 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_RP_1.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_SP_1.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_SP_2.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Clusters/Math_Grade7_SP_3.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Math_Grade7_EE.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Math_Grade7_G.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Math_Grade7_NS.xml +20 -0
- data/data/Mathematics/Grade7/Domain/Math_Grade7_RP.xml +21 -0
- data/data/Mathematics/Grade7/Domain/Math_Grade7_SP.xml +20 -0
- data/data/Mathematics/Grade7/Mathematics_Grade_7.xml +18 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_EE_1.xml +21 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_EE_2.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_EE_3.xml +22 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_F_1.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_F_2.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_G_1.xml +21 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_G_2.xml +21 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_G_3.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_NS_1.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Clusters/Math_Grade8_SP_1.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Math_Grade8_EE.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Math_Grade8_F.xml +21 -0
- data/data/Mathematics/Grade8/Domain/Math_Grade8_G.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Math_Grade8_NS.xml +20 -0
- data/data/Mathematics/Grade8/Domain/Math_Grade8_SP.xml +20 -0
- data/data/Mathematics/Grade8/Mathematics_Grade_8.xml +18 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_APR_1.xml +20 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_APR_2.xml +20 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_APR_3.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_APR_4.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_CED_1.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_REI_1.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_REI_2.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_REI_3.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_REI_4.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_SSE_1.xml +20 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Clusters/Math_Algebra_SSE_2.xml +20 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Math_Algebra_APR.xml +20 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Math_Algebra_CED.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Math_Algebra_REI.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Domain/Math_Algebra_SSE.xml +21 -0
- data/data/Mathematics/HighSchool/Algebra/Mathematics_Algebra.xml +17 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_BF_1.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_BF_2.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_IF_1.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_IF_2.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_IF_3.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_LQE_1.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_LQE_2.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_TF_1.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_TF_2.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Clusters/Math_F_TF_3.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Math_F_BF.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Math_F_IF.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Math_F_LQE.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Domain/Math_F_TF.xml +20 -0
- data/data/Mathematics/HighSchool/Functions/Mathematics_Functions.xml +17 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_CO_1.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_CO_2.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_CO_3.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_CO_4.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_C_1.xml +20 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_C_2.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_GMD_1.xml +22 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_GMD_2.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_GPE_1.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_GPE_2.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_MG_1.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_SRT_1.xml +20 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_SRT_2.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_SRT_3.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Clusters/Math_Geometry_SRT_4.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Math_Geometry_C.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Math_Geometry_CO.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Math_Geometry_GMD.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Math_Geometry_GPE.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Math_Geometry_MG.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Domain/Math_Geometry_SRT.xml +21 -0
- data/data/Mathematics/HighSchool/Geometry/Mathematics_Geometry.xml +17 -0
- data/data/Mathematics/HighSchool/Modeling/Domain/Clusters/Math_M_1.xml +20 -0
- data/data/Mathematics/HighSchool/Modeling/Mathematics_Modeling.xml +17 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_CN_1.xml +21 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_CN_2.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_CN_3.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_Q_1.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_RN_1.xml +22 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_RN_2.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_VM_1.xml +21 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_VM_2.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Clusters/Math_N_VM_3.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Math_N_CN.xml +21 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Math_N_Q.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Math_N_RN.xml +21 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Domain/Math_N_VM.xml +20 -0
- data/data/Mathematics/HighSchool/Number and Quantity/Mathematics_Number_and_Quantity.xml +17 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_CP_1.xml +20 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_CP_2.xml +20 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_IC_1.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_IC_2.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_ID_1.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_ID_2.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_ID_3.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_MD_1.xml +20 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Clusters/Math_S_MD_2.xml +20 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Math_S_CP.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Math_S_IC.xml +20 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Math_S_ID.xml +21 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Domain/Math_S_MD.xml +20 -0
- data/data/Mathematics/HighSchool/Statistics and Probability/Mathematics_Statistics_and_Probability.xml +17 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_CC_1.xml +24 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_CC_2.xml +24 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_CC_3.xml +23 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_G_1.xml +21 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_G_2.xml +23 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_MD_1.xml +22 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_MD_2.xml +22 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_NBT_1.xml +21 -0
- data/data/Mathematics/Kindergarten/Domain/Clusters/Math_K_OA_1.xml +23 -0
- data/data/Mathematics/Kindergarten/Domain/Math_K_CC.xml +25 -0
- data/data/Mathematics/Kindergarten/Domain/Math_K_G.xml +21 -0
- data/data/Mathematics/Kindergarten/Domain/Math_K_MD.xml +21 -0
- data/data/Mathematics/Kindergarten/Domain/Math_K_NBT.xml +21 -0
- data/data/Mathematics/Kindergarten/Domain/Math_K_OA.xml +22 -0
- data/data/Mathematics/Kindergarten/Mathematics_Kindergarten.xml +17 -0
- data/doc/CCSSI_ELA Standards.pdf +9781 -23
- data/doc/CCSSI_Math Standards.pdf +6652 -17
- data/lib/common_core_parser/broken_data_corrector.rb +172 -0
- data/lib/common_core_parser/element.rb +100 -0
- data/lib/common_core_parser/elements/cluster.rb +10 -0
- data/lib/common_core_parser/elements/component.rb +10 -0
- data/lib/common_core_parser/elements/domain.rb +13 -0
- data/lib/common_core_parser/elements/standard.rb +31 -0
- data/lib/common_core_parser/elements/standard_type.rb +10 -0
- data/lib/common_core_parser/elements/subject_grade.rb +10 -0
- data/lib/common_core_parser/master.rb +85 -0
- data/lib/common_core_parser/version.rb +3 -0
- data/lib/common_core_parser.rb +30 -0
- data/test/jenkins.bash +3 -0
- data/test/test_helper.rb +32 -0
- data/test/unit/domain_test.rb +40 -0
- data/test/unit/loader_test.rb +203 -0
- data/test/unit/standard_test.rb +91 -0
- metadata +477 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
module CommonCoreParser
|
|
2
|
+
class BrokenDataCorrector
|
|
3
|
+
|
|
4
|
+
class << self
|
|
5
|
+
def run
|
|
6
|
+
Master.instance.elements.each do |element|
|
|
7
|
+
self.private_methods.select { |method_name| method_name.to_s.match(/^correct_/) }.each do |corrector_method|
|
|
8
|
+
self.send(corrector_method,element)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# There are a some cases where multiple items are sharing the same ref_id.
|
|
14
|
+
# * Two cases of an ELA Standard and Domain having the same ref_id.
|
|
15
|
+
# * Three cases of pairs of clusters sharing the same ref_id.
|
|
16
|
+
# * Two standards that both have the same ref_id
|
|
17
|
+
# This patch corrects the ref_ids to remove conflucts.
|
|
18
|
+
# See also patch_duplicated_parent_ref_ids()
|
|
19
|
+
def patch_duplicated_ref_ids(element,candidate_ref_id)
|
|
20
|
+
flagged_standard_domain_ref_ids = ['7CB154907B5743c7B97BFCFF452D7977','F053D3437D1E4338A2C18B25DACBED85']
|
|
21
|
+
flagged_cluster_ref_ids = ['B1AC98EADE4145689E70EEEBD9B8CC18','834B17E279C64263AA83F7625F5D2993','91FABAB899814C55851003A0EE98F8FB']
|
|
22
|
+
flagged_duplicated_stadard_ref_ids = ['FBCBB7C696FE475695920CA622B1C857']
|
|
23
|
+
if candidate_ref_id == 'F053D3437D1E4338A2C18B25DACBED85' and element.is_a?(Standard)
|
|
24
|
+
return "Standard:DUPLICATEDREF_ID:#{candidate_ref_id}"
|
|
25
|
+
elsif candidate_ref_id == 'F053D3437D1E4338A2C18B25DACBED85' and element.is_a?(Domain)
|
|
26
|
+
return "Domain:DUPLICATEDREF_ID:#{candidate_ref_id}"
|
|
27
|
+
elsif flagged_standard_domain_ref_ids.include?(candidate_ref_id) and element.is_a?(Standard)
|
|
28
|
+
return "Standard:DUPLICATEDREF_ID:#{candidate_ref_id}"
|
|
29
|
+
elsif flagged_cluster_ref_ids.include?(candidate_ref_id) and element.is_a?(Cluster)
|
|
30
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_ref_id}:#{element.code}"
|
|
31
|
+
elsif flagged_duplicated_stadard_ref_ids.include?(candidate_ref_id) and element.is_a?(Standard)
|
|
32
|
+
return "Standard:DUPLICATEDREF_ID:#{candidate_ref_id}:#{element.code}"
|
|
33
|
+
else
|
|
34
|
+
return candidate_ref_id
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# See comments on patch_duplicated_ref_ids() above.
|
|
39
|
+
def patch_duplicated_parent_ref_ids(element,candidate_parent_ref_id)
|
|
40
|
+
flagged_cluster_ref_ids = ['B1AC98EADE4145689E70EEEBD9B8CC18','834B17E279C64263AA83F7625F5D2993','91FABAB899814C55851003A0EE98F8FB']
|
|
41
|
+
if candidate_parent_ref_id == 'F053D3437D1E4338A2C18B25DACBED85' and element.is_a?(Component)
|
|
42
|
+
return "Standard:DUPLICATEDREF_ID:#{candidate_parent_ref_id}"
|
|
43
|
+
elsif candidate_parent_ref_id == 'F053D3437D1E4338A2C18B25DACBED85' and element.is_a?(Standard)
|
|
44
|
+
return "Domain:DUPLICATEDREF_ID:#{candidate_parent_ref_id}"
|
|
45
|
+
elsif flagged_cluster_ref_ids.include?(candidate_parent_ref_id) and element.is_a?(Standard) and element.code.match(/\.K\.G\./)
|
|
46
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_parent_ref_id}:Mathematics.K.G.1"
|
|
47
|
+
elsif flagged_cluster_ref_ids.include?(candidate_parent_ref_id) and element.is_a?(Standard) and element.code == 'CCSS.Math.Content.K.MD.B.3'
|
|
48
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_parent_ref_id}:Mathematics.K.MD.2"
|
|
49
|
+
elsif flagged_cluster_ref_ids.include?(candidate_parent_ref_id) and element.is_a?(Standard) and element.code.match(/\.3\.G\.A\./)
|
|
50
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_parent_ref_id}:Mathematics.3.G.1"
|
|
51
|
+
elsif flagged_cluster_ref_ids.include?(candidate_parent_ref_id) and element.is_a?(Standard) and element.code == 'CCSS.Math.Content.6.NS.A.1'
|
|
52
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_parent_ref_id}:Mathematics.6.NS.1"
|
|
53
|
+
elsif flagged_cluster_ref_ids.include?(candidate_parent_ref_id) and element.is_a?(Standard) and element.code.match(/\.3\.MD\.C\./)
|
|
54
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_parent_ref_id}:Mathematics.3.MD.3"
|
|
55
|
+
elsif flagged_cluster_ref_ids.include?(candidate_parent_ref_id) and element.is_a?(Standard) and element.code.match(/\.6\.RP\.A\./)
|
|
56
|
+
return "Cluster:DUPLICATEDREF_ID:#{candidate_parent_ref_id}:Mathematics.6.RP.1"
|
|
57
|
+
else
|
|
58
|
+
return candidate_parent_ref_id
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
#######
|
|
63
|
+
private
|
|
64
|
+
#######
|
|
65
|
+
|
|
66
|
+
# A few standards in the new xml files are are pointed to cluster ids that
|
|
67
|
+
# don't exist in the old xml files. Point them to their old clusters for now
|
|
68
|
+
# This shouldn't be necessary when corestandards.org makes a complete set of
|
|
69
|
+
# updated xml files available.
|
|
70
|
+
def correct_standards_pointed_to_missing_ref_ids(element)
|
|
71
|
+
ref_id_map = {
|
|
72
|
+
'B1AC98EADE4145689E70EEEBD9B8CC19' => patch_duplicated_parent_ref_ids(element,'B1AC98EADE4145689E70EEEBD9B8CC18'),
|
|
73
|
+
'834B17E279C64263AA83F7625F5D2994' => patch_duplicated_parent_ref_ids(element,'834B17E279C64263AA83F7625F5D2993'),
|
|
74
|
+
'91FABAB899814C55851003A0EE98F8FC' => patch_duplicated_parent_ref_ids(element,'91FABAB899814C55851003A0EE98F8FB')
|
|
75
|
+
}
|
|
76
|
+
return unless (element.is_a?(Standard) and ref_id_map.keys.include?(element.parent_ref_id))
|
|
77
|
+
element.instance_variable_set(:@parent_ref_id,ref_id_map[element.parent_ref_id])
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# The "Standards for Mathematical Practice" point to each other instead of
|
|
81
|
+
# a cluster or domain. WTF? Let's just orphanize them for now.
|
|
82
|
+
def correct_parent_ref_id_for_practice_standards(element)
|
|
83
|
+
return unless (element.is_a?(Standard) and element.code.match(/CCSS\.Math\.Practice\.MP[0-9]+/))
|
|
84
|
+
element.instance_variable_set(:@parent_ref_id,'INTENTIONALLYORPHANED')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# The ELA "Anchor Standards" don't have a parent in the xml.
|
|
88
|
+
# Flagging as intentionally orphaned until it gets corrected.
|
|
89
|
+
def correct_ela_anchor_standards(element)
|
|
90
|
+
return unless (element.is_a?(Standard) and element.parent_ref_id.blank? and element.code.match(/CCSS\.ELA\-Literacy\.CCRA.[RWSL]+\.[0-9]+/))
|
|
91
|
+
element.instance_variable_set(:@parent_ref_id,'INTENTIONALLYORPHANED')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# The ELA Grade 3 "Language" Standards don't have a parent in the xml.
|
|
95
|
+
# Point them to the correct Domain
|
|
96
|
+
def correct_ela_grade_3_language_standards(element)
|
|
97
|
+
return unless (element.is_a?(Standard) and element.parent_ref_id.blank? and element.code.match(/CCSS\.ELA\-Literacy\.L\.3/))
|
|
98
|
+
element.instance_variable_set(:@parent_ref_id,patch_duplicated_parent_ref_ids(element,'F053D3437D1E4338A2C18B25DACBED85'))
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def correct_unnecessarily_unicoded_characters(element)
|
|
102
|
+
# http://www.htmlescape.net/unicode_chart_general_punctuation.html
|
|
103
|
+
# http://www.htmlescape.net/unicode_chart_miscellaneous_symbols.html
|
|
104
|
+
element.instance_variable_set(:@statement,element.statement.gsub(/\u2013/,%q{-})) # –
|
|
105
|
+
element.instance_variable_set(:@statement,element.statement.gsub(/\u2019/,%q{'})) # ’
|
|
106
|
+
element.instance_variable_set(:@statement,element.statement.gsub(/\u2020/,%q{"})) # “
|
|
107
|
+
element.instance_variable_set(:@statement,element.statement.gsub(/\u2021/,%q{"})) # ”
|
|
108
|
+
element.instance_variable_set(:@statement,element.statement.gsub(/\u2605/,%q{*})) # ★
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Math.xml contains a lot of unnecessarily escaped tags.
|
|
112
|
+
def correct_unncessarily_escaped_html_tags(element)
|
|
113
|
+
statement = element.statement
|
|
114
|
+
[:sup, :i].each do |tag|
|
|
115
|
+
statement.gsub!(/<#{tag}>/,%Q{<#{tag}>})
|
|
116
|
+
statement.gsub!(/<\/#{tag}>/,%Q{</#{tag}>})
|
|
117
|
+
end
|
|
118
|
+
element.instance_variable_set(:@statement,statement)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# One ELA standard has it's own RefID (currently 32D9C8830A6C4fd5B715A1DFFC4D4BA4) set as it's code.
|
|
122
|
+
def correct_literacy_rh_11_12_1_code(element)
|
|
123
|
+
if (element.ref_id == '32D9C8830A6C4fd5B715A1DFFC4D4BA4' or element.parent_ref_id == 'F9877ECD38D8432185F96C5EC5A050AF') and element.statement.match('^Cite specific textual evidence')
|
|
124
|
+
element.instance_variable_set(:@code,'CCSS.ELA-Literacy.RH.11-12.1')
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Many standards contain html tags that are closed at the beginning of the following standard.
|
|
129
|
+
def correct_unclosed_html_tags(element)
|
|
130
|
+
[:i, :sup].each do |tag|
|
|
131
|
+
strip_stray_close_tags(element,tag)
|
|
132
|
+
append_missing_close_tags(element,tag)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
######################################################################################
|
|
143
|
+
|
|
144
|
+
def strip_stray_close_tags(element,tag)
|
|
145
|
+
if starts_with_close?(element,tag)
|
|
146
|
+
element.instance_variable_set(:@statement,element.statement.sub(/^<\/#{tag}>/,''))
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def append_missing_close_tags(element,tag)
|
|
151
|
+
if more_opens_than_closes?(element,tag)
|
|
152
|
+
element.instance_variable_set(:@statement,"#{element.statement}</#{tag}>")
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def starts_with_close?(element,tag)
|
|
157
|
+
element.statement.match(/^<\/#{tag}>/)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def more_opens_than_closes?(element,tag)
|
|
162
|
+
opens = element.statement.match(/<#{tag}>/)
|
|
163
|
+
closes = element.statement.match(/<\/#{tag}>/)
|
|
164
|
+
return false if opens.nil?
|
|
165
|
+
return true if closes.nil? or (opens.size == closes.size + 1)
|
|
166
|
+
raise "too many unclosed open <#{tag}> tags to deal with" if opens.size > closes.size + 1 # just in case this becomes an issue in the future so it can be identified immediately
|
|
167
|
+
return false
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module CommonCoreParser
|
|
2
|
+
class Element
|
|
3
|
+
|
|
4
|
+
attr_accessor :data
|
|
5
|
+
attr_reader :children_hash
|
|
6
|
+
|
|
7
|
+
def initialize(xmldoc)
|
|
8
|
+
raise(ArgumentError, "Not a LearningStandardItem\n #{xmldoc}") unless xmldoc.name == 'LearningStandardItem'
|
|
9
|
+
@data = xmldoc
|
|
10
|
+
@children_hash = {}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_s
|
|
14
|
+
"<#{self.class} ref_id: #{ref_id}, parent_ref_id: #{parent_ref_id}, code: #{code}, statement: #{statement}, grades: #{grades.join(',')}>"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def ref_id
|
|
18
|
+
@ref_id ||= BrokenDataCorrector.patch_duplicated_ref_ids(self,(data.attributes['RefID'] || data.attributes['RefId']).value.strip)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def parent
|
|
22
|
+
@parent ||= Master.instance.elements_hash[parent_ref_id]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def children
|
|
26
|
+
children_hash.values
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def parent_ref_id
|
|
30
|
+
return @parent_ref_id if @parent_ref_id
|
|
31
|
+
|
|
32
|
+
#new file format
|
|
33
|
+
data.xpath('./RelatedLearningStandardItems/LearningStandardItemRefId').each do |lsiri|
|
|
34
|
+
return @parent_ref_id = BrokenDataCorrector.patch_duplicated_parent_ref_ids(self,lsiri.text.strip) if lsiri.attributes['RelationshipType'].value == 'childOf'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#old file format
|
|
38
|
+
data.xpath('./PredecessorItems/LearningStandardItemRefId').each do |lsiri|
|
|
39
|
+
return @parent_ref_id = BrokenDataCorrector.patch_duplicated_parent_ref_ids(self,lsiri.text.strip)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
return nil
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def add_child(element)
|
|
46
|
+
@children_hash[element.ref_id] = element
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def code
|
|
50
|
+
@code ||= data.xpath('./StatementCodes/StatementCode').first.text.strip
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def statement
|
|
54
|
+
@statement ||= data.xpath('./Statements/Statement').first.text.strip
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def grades
|
|
58
|
+
@grades ||= data.xpath('./GradeLevels/GradeLevel').map(&:text).map {|string| convert_grade_string_to_grades(string) }.flatten
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def valid_grades?
|
|
62
|
+
(grades & %w(K HS K-12 01 02 03 04 05 06 07 08 09 10 11 12)) == grades
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def valid?
|
|
66
|
+
errors.blank?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def errors
|
|
70
|
+
raise RuntimeError
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def error_message
|
|
74
|
+
errors.join(',')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def illigit?
|
|
78
|
+
return false unless ref_id.blank?
|
|
79
|
+
case
|
|
80
|
+
when (ref_id.blank? and statement.match(/not applicable/)) then true
|
|
81
|
+
when (ref_id.blank? and statement.match(/begins in grade [0-9]+/)) then true
|
|
82
|
+
else false
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#######
|
|
87
|
+
private
|
|
88
|
+
#######
|
|
89
|
+
|
|
90
|
+
def convert_grade_string_to_grades(string)
|
|
91
|
+
grades = case
|
|
92
|
+
when string == 'K-12' then ['K',*(1..12)]
|
|
93
|
+
when string == 'HS' then [*(9..12)]
|
|
94
|
+
when string.match(/([0-9]+)-([0-9]+)/) then [*($1..$2)]
|
|
95
|
+
else [string]
|
|
96
|
+
end
|
|
97
|
+
grades.map{|string| string == 'K' ? string : sprintf('%02d',string.to_i) }
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module CommonCoreParser
|
|
2
|
+
class Domain < CommonCoreParser::Element
|
|
3
|
+
|
|
4
|
+
def errors
|
|
5
|
+
errors = []
|
|
6
|
+
errors << 'Refid is blank' if ref_id.blank?
|
|
7
|
+
errors << 'Code is blank' if code.blank?
|
|
8
|
+
errors << 'Statement is blank' if statement.blank?
|
|
9
|
+
errors << "invalid grades: #{grades}" unless valid_grades?
|
|
10
|
+
return errors
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module CommonCoreParser
|
|
2
|
+
class Standard < CommonCoreParser::Element
|
|
3
|
+
|
|
4
|
+
def errors
|
|
5
|
+
errors = []
|
|
6
|
+
errors << 'Refid is blank' if ref_id.blank?
|
|
7
|
+
errors << 'PRI is blank' if parent_ref_id.blank?
|
|
8
|
+
errors << 'Code is blank' if code.blank?
|
|
9
|
+
errors << 'Statement is blank' if statement.blank?
|
|
10
|
+
errors << 'invalid grades' unless valid_grades?
|
|
11
|
+
return errors
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def error_message
|
|
15
|
+
errors.join(',')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def cluster
|
|
19
|
+
@cluster ||= self.parent.is_a?(Cluster) ? self.parent : nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def domain
|
|
23
|
+
@domain ||= cluster ? cluster.parent : self.parent
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def subject
|
|
27
|
+
@subject ||= domain.try(:parent)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module CommonCoreParser
|
|
2
|
+
class Master
|
|
3
|
+
include Singleton
|
|
4
|
+
|
|
5
|
+
ELEMENT_NAMES = [:elements, :domains, :clusters, :standards, :components, :subject_grades, :standard_types]
|
|
6
|
+
attr_reader *( ELEMENT_NAMES.map { |element_name| "#{element_name}_hash" } )
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
ELEMENT_NAMES.each do |element_name|
|
|
10
|
+
instance_variable_set("@#{element_name}_hash",{})
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def load_math
|
|
15
|
+
load_elements_from_paths(DATA_PATH+'/Math.xml',DATA_PATH+'/Mathematics/**/*.xml')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def load_ela
|
|
19
|
+
load_elements_from_paths(DATA_PATH+'/ELA-Literacy.xml',DATA_PATH+'/ELA/**/*.xml')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def load_elements_from_paths(*paths)
|
|
23
|
+
self.send(:initialize)
|
|
24
|
+
paths.flatten.each do |path|
|
|
25
|
+
Dir.glob(path).map do |filename|
|
|
26
|
+
xml = Nokogiri::XML(File.open(filename))
|
|
27
|
+
xml.xpath('//LearningStandardItem').each do |learning_standard_item|
|
|
28
|
+
klass = get_class_from_element(learning_standard_item)
|
|
29
|
+
add_element(klass.new(learning_standard_item))
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
correct_bad_data
|
|
34
|
+
reunite_children_with_parents
|
|
35
|
+
return standards
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def add_element(element)
|
|
39
|
+
return if element.illigit?
|
|
40
|
+
raise "#{element} has same ref_id as #{@elements_hash[element.ref_id]}" if @elements_hash[element.ref_id]
|
|
41
|
+
@elements_hash[element.ref_id] = element
|
|
42
|
+
instance_variable_get(instance_variable_name_for_element(element))[element.ref_id] = element
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def delete_element(element)
|
|
46
|
+
@elements_hash.delete(element.classified_ref_id)
|
|
47
|
+
instance_variable_get(instance_variable_name_for_element(element)).delete(element.ref_id)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Create methods for each element type that returns
|
|
51
|
+
# and array of elements instead of a hash
|
|
52
|
+
ELEMENT_NAMES.each do |element_name|
|
|
53
|
+
define_method(element_name) do
|
|
54
|
+
instance_variable_get(instance_variable_name_for_element_name(element_name)).values
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#######
|
|
59
|
+
private
|
|
60
|
+
#######
|
|
61
|
+
|
|
62
|
+
def correct_bad_data
|
|
63
|
+
BrokenDataCorrector.run
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def reunite_children_with_parents
|
|
67
|
+
elements.each do |element|
|
|
68
|
+
elements_hash[element.parent_ref_id].add_child(element) unless elements_hash[element.parent_ref_id].nil?
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def get_class_from_element(xml_element)
|
|
73
|
+
hierarcy_level_description = xml_element.xpath('./StandardHierarchyLevel/description').first || xml_element.xpath('./StandardHierarchyLevel/Description').first
|
|
74
|
+
return "CommonCoreParser::#{hierarcy_level_description.text}".gsub(/\s/,'').constantize
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def instance_variable_name_for_element(element)
|
|
78
|
+
instance_variable_name_for_element_name(element.class.name.sub(/^.*::/, '').underscore.pluralize)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def instance_variable_name_for_element_name(element_name)
|
|
82
|
+
"@#{element_name}_hash"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require 'bundler/setup'
|
|
6
|
+
require 'nokogiri'
|
|
7
|
+
require 'singleton'
|
|
8
|
+
require 'active_support/core_ext'
|
|
9
|
+
|
|
10
|
+
require File.expand_path('../common_core_parser', __FILE__)
|
|
11
|
+
require File.expand_path('../common_core_parser/master', __FILE__)
|
|
12
|
+
require File.expand_path('../common_core_parser/broken_data_corrector', __FILE__)
|
|
13
|
+
|
|
14
|
+
require File.expand_path('../common_core_parser/element', __FILE__)
|
|
15
|
+
require File.expand_path('../common_core_parser/elements/component', __FILE__)
|
|
16
|
+
require File.expand_path('../common_core_parser/elements/standard', __FILE__)
|
|
17
|
+
require File.expand_path('../common_core_parser/elements/cluster', __FILE__)
|
|
18
|
+
require File.expand_path('../common_core_parser/elements/domain', __FILE__)
|
|
19
|
+
require File.expand_path('../common_core_parser/elements/subject_grade', __FILE__)
|
|
20
|
+
require File.expand_path('../common_core_parser/elements/standard_type', __FILE__)
|
|
21
|
+
|
|
22
|
+
module CommonCoreParser
|
|
23
|
+
DATA_PATH = File.expand_path('../../data', __FILE__)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class Object
|
|
27
|
+
def blank?
|
|
28
|
+
respond_to?(:empty?) ? empty? : !self
|
|
29
|
+
end
|
|
30
|
+
end
|
data/test/jenkins.bash
ADDED
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
|
|
4
|
+
require 'simplecov'
|
|
5
|
+
SimpleCov.start
|
|
6
|
+
|
|
7
|
+
require File.expand_path('../../lib/common_core_parser', __FILE__)
|
|
8
|
+
require 'active_support'
|
|
9
|
+
require 'active_support/test_case'
|
|
10
|
+
require 'test/unit'
|
|
11
|
+
|
|
12
|
+
class ActiveSupport::TestCase
|
|
13
|
+
class << self
|
|
14
|
+
# test "verify something" do
|
|
15
|
+
# ...
|
|
16
|
+
# end
|
|
17
|
+
def test(name, &block)
|
|
18
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
|
19
|
+
defined = instance_method(test_name) rescue false
|
|
20
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
|
21
|
+
if block_given?
|
|
22
|
+
define_method(test_name, &block)
|
|
23
|
+
else
|
|
24
|
+
define_method(test_name) do
|
|
25
|
+
flunk "No implementation provided for #{name}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
require 'mocha'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
|
|
4
|
+
require 'test_helper'
|
|
5
|
+
|
|
6
|
+
module CommonCoreParser
|
|
7
|
+
class DomainTest < ActiveSupport::TestCase
|
|
8
|
+
|
|
9
|
+
# to_s
|
|
10
|
+
test "should return string representation of domain" do
|
|
11
|
+
assert_equal '<CommonCoreParser::Domain ref_id: 4246B738DA224018B6D20C12F9ED0073, parent_ref_id: C235350E091D437FBE2794CE93FBE949, code: Mathematics.1.G, statement: Geometry, grades: 01>', math_domain.to_s
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# valid?
|
|
15
|
+
test "should return true for valid?" do
|
|
16
|
+
assert_equal true, math_domain.valid?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "should return false for valid? when statement is blank" do
|
|
20
|
+
saved_math_domain = math_domain
|
|
21
|
+
saved_math_domain.stubs(:statement).returns('')
|
|
22
|
+
assert_equal true, saved_math_domain.statement.blank?
|
|
23
|
+
assert_equal false, saved_math_domain.valid?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test 'should return repdecessor ref id' do
|
|
27
|
+
assert_equal('C235350E091D437FBE2794CE93FBE949',math_domain.parent_ref_id)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def math_domain
|
|
33
|
+
Domain.new(math_domain_xml)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def math_domain_xml
|
|
37
|
+
@math_domain_xml ||= Nokogiri::XML(File.read(DATA_PATH+'/Mathematics/Grade1/Domain/Math_Grade1_G.xml')).xpath('//LearningStandardItem').first
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|