/// <summary> /// Builds the cross DSD. /// </summary> /// <returns>The XS DSD</returns> private static ICrossSectionalDataStructureObject BuildCrossDsdNoTimeMeasure() { ICrossSectionalDataStructureMutableObject dsdMutableObject = new CrossSectionalDataStructureMutableCore { AgencyId = "TEST", Id = "TEST_DSD", Version = "1.0" }; dsdMutableObject.AddName("en", "Test data"); // FREQ="Q" ADJUSTMENT="N" STS_ACTIVITY="A" dsdMutableObject.AddDimension( new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "FREQ"), new StructureReferenceImpl("SDMX", "CL_FREQ", "1.0", SdmxStructureEnumType.CodeList)); dsdMutableObject.AddDimension( new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "ADJUSTMENT"), new StructureReferenceImpl("SDMX", "CL_ADJUSTMENT", "1.0", SdmxStructureEnumType.CodeList)); dsdMutableObject.AddDimension( new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "STS_ACTIVITY"), new StructureReferenceImpl("STS", "CL_STS_ACTIVITY", "1.0", SdmxStructureEnumType.CodeList)).MeasureDimension = true; dsdMutableObject.AddPrimaryMeasure(new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "OBS_VALUE")); dsdMutableObject.AddCrossSectionalMeasures( new CrossSectionalMeasureMutableCore { Code = "A", ConceptRef = new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "A"), MeasureDimension = "STS_ACTIVITY" }); dsdMutableObject.AddCrossSectionalMeasures( new CrossSectionalMeasureMutableCore { Code = "B", ConceptRef = new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "B"), MeasureDimension = "STS_ACTIVITY" }); dsdMutableObject.AddCrossSectionalAttachGroup("FREQ"); dsdMutableObject.AddCrossSectionalAttachSection("ADJUSTMENT"); var attributeMutableObject = dsdMutableObject.AddAttribute( new StructureReferenceImpl("TEST", "TEST_CS", "1.0", SdmxStructureEnumType.Concept, "DECIMALS"), new StructureReferenceImpl("STS", "CL_DECIMALS", "1.0", SdmxStructureEnumType.CodeList)); dsdMutableObject.AddCrossSectionalAttachObservation("DECIMALS"); attributeMutableObject.AttachmentLevel = AttributeAttachmentLevel.Observation; attributeMutableObject.AssignmentStatus = "Mandatory"; return dsdMutableObject.ImmutableInstance; }
/// <summary> /// Handles the Structure top level elements /// This includes Codelist /// </summary> /// <param name="parent"> /// The parent <see cref="IMutableObjects"/> /// </param> /// <param name="localName"> /// The name of the current xml element /// </param> /// <returns> /// The <see cref="StructureReaderBaseV20.ElementActions"/>. /// </returns> protected override ElementActions HandleTopLevel(IMutableObjects parent, object localName) { ElementActions actions = null; if (NameTableCache.IsElement(localName, ElementNameTable.KeyFamily)) { var kf = new CrossSectionalDataStructureMutableCore(); ParseAttributes(kf, this.Attributes); //// NOTE this is handled at HandleEndElement because we need to decide if it will remain a XS DSD or should it be converted to a non XS (2.0) one. //// parent.AddDataStructure(kf); this._currentDsd = kf; actions = this.AddNameableAction(kf, this.HandleChildElements); } return actions; }