Using SDMX 2.0 Web Service
To add reference to ASP.NET Web Service, use the following URL: http://dataservices.imf.org/sdmx20/SDMX_Web_Service.asmx.
To add reference to WCF Service into your project, use the following URL: http://dataservices.imf.org/sdmx20/SDMX_WCF_Service.svc.
These URLs are given as examples and may be different on the concrete server.
The SDMX Web Service exposes the following methods:
• GetDataflow
• GetDataStructure
• GetCompactData
• GetMetadataStructure
• GetGenericMetadata
• GetCodeList
• GetMaxSeriesInResult
1.1 GetDataflow Method
GetDataflow method returns the list of the datasets, registered for the Data Service.
public XElement GetDataflow();
Type: System.Xml.Linq.XElement
An XML data that represents the SDMX-ML structure message.
Empty SDMX-ML structure message is returned if there are no databases registered for the SDMX Web Service, and if there are no exceptions are being shown.
The following code example shows the use of GetDataflow metho
ASP.NET Web Service example:
ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient(); XElement structureMessage = sdmxServiceClient.GetDataflow();
WCF Service example:
WCF20.SDMXServiceClient client = new WCF20.SDMXServiceClient(); var result = client.GetDataflow(); return result.ToString();
1.2 GetDataStructure Method
GetDataStructure method returns the structure of the dataset in the SDMX-ML structure message for the given SDMX-ML query message.
public XElement GetDataStructure(XElement queryMessage);
queryMessage
Type: System.Xml.Linq.XElement
An XML data, that represents the SDMX-ML query message
Type: System.Xml.Linq.XElement
An XML data that represents the SDMX-ML structure message.
The following code example creates simple SDMX data structure query and shows the use of GetDataStructure method.
ASP.NET Web Service example:string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <KeyFamilyWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <KeyFamily>FAS</KeyFamily> </KeyFamilyWhere> </Query> </QueryMessage>"; XDocument queryMessageDocument = XDocument.Parse(query); XElement queryMessage = queryMessageDocument.Root; ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient(); XElement structureMessage = sdmxServiceClient.GetDataStructure(queryMessage);
WCF Service example:
SDMXServiceClient client = new SDMXServiceClient(); string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <KeyFamilyWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <KeyFamily>FAS</KeyFamily> </KeyFamilyWhere> </Query> </QueryMessage>"; var result = client.GetDataStructure(XElement.Parse(query));1.3 GetCompactData Method
GetCompactData method returns the SDMX-ML compact data message for the given SDMX-ML query message.
public XElement GetCompactData(XElement queryMessage);
queryMessage
Type: System.Xml.Linq.XElement
An XML data, that represents the SDMX-ML query message
Type: System.Xml.Linq.XElement
An XML data that represents the SDMX-ML compact data message.
The following code example creates simple SDMX data query and shows the use of GetCompactData method.
ASP.NET Web Service example:
string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <DataWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <And> <DataSet>FAS</DataSet> <Time> <StartTime>2010</StartTime> <EndTime>2015</EndTime> </Time> <Dimension id=""FREQ"">A</Dimension> <Dimension id=""INDICATOR"">FCMOA_NUM</Dimension> <!-- Geographical Outreach, Mobile Banking, Agent Outlets, active, Number of --> <Dimension id=""REF_AREA"">AF</Dimension> <!-- Afghanistan, Islamic Republic of --> </And> </DataWhere> </Query> </QueryMessage>"; XDocument queryMessageDocument = XDocument.Parse(query); XElement queryMessage = queryMessageDocument.Root; ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient(); XElement compactDataMessage = sdmxServiceClient.GetCompactData(queryMessage);WCF Service example:
SDMXServiceClient client = new SDMXServiceClient(); var request = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <DataWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <And> <DataSet>FAS</DataSet> <Time> <StartTime>2010</StartTime> <EndTime>2015</EndTime> </Time> <Dimension id=""FREQ"">A</Dimension> <Dimension id=""INDICATOR"">FCMOA_NUM</Dimension> <!-- Geographical Outreach, Mobile Banking, Agent Outlets, active, Number of --> <Dimension id=""REF_AREA"">AF</Dimension> <!-- Afghanistan, Islamic Republic of --> </And> </DataWhere> </Query> </QueryMessage>"; XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(request)); var message = Message.CreateMessage(MessageVersion.Soap11, "http://www.imf.org/SDMX/ISDMXService/GetCompactData", reader); var responseMessage = client.GetCompactData(message); var xmlReader = responseMessage.GetReaderAtBodyContents(); var result = xmlReader.ReadOuterXml();
1.4 GetMetadataStructure Method
GetMetadataStructure method returns the metadata structure of the dataset in the SDMX-ML structure message for the given SDMX-ML query message.
public XElement GetMetadataStructure(XElement queryMessage);
queryMessge
Type: System.Xml.Linq.XElement
An XML data, that represents the SDMX-ML query message
Type: System.Xml.Linq.XElement
An XML data that represents the SDMX-ML metadata structure message.
The following code example creates simple SDMX metadata structure query and shows the use of GetMetadataStructure method.
ASP.NET Web Service example:
string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <MetadataStructureWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <KeyFamily>FAS</KeyFamily> </MetadataStructureWhere> </Query> </QueryMessage>"; XDocument queryMessageDocument = XDocument.Parse(query); XElement queryMessage = queryMessageDocument.Root; ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient(); XElement structureMessage = sdmxServiceClient.GetMetadataStructure(queryMessage);WCF Service example:
SDMXServiceClient client = new SDMXServiceClient(); string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <MetadataStructureWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <KeyFamily>FAS</KeyFamily> </MetadataStructureWhere> </Query> </QueryMessage>"; var result = client.GetMetadataStructure(XElement.Parse(query));
1.5 GetGenericMetadata Method
GetGenericMetadata method returns the SDMX-ML generic metadata message for the given SDMX-ML query message.
C# SYNTAX
public XElement GetGenericMetadata(XElement queryMessage);
queryMessage
Type: System.Xml.Linq.XElement
An XML data, that represents the SDMX-ML query message
Type: System.Xml.Linq.XElement
An XML data that represents the SDMX-ML generic metadata message.
The following code example creates simple SDMX data query and shows the use of GetGenericMetadata method
ASP.NET Web Service example:
string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <MetadataWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <And> <DataSet>FAS</DataSet> <Time> <StartTime>2010</StartTime> <EndTime>2015</EndTime> </Time> <Dimension id=""FREQ"">A</Dimension> <Dimension id=""REF_AREA"">AF</Dimension> <Dimension id=""REF_AREA"">AL</Dimension> <Dimension id=""REF_AREA"">DZ</Dimension> <Or> <Dimension id=""INDICATOR"">FCMOA_NUM</Dimension> <Dimension id=""INDICATOR"">FCMOR_NUM</Dimension> <Dimension id=""INDICATOR"">FCAC_NUM</Dimension> <Dimension id=""INDICATOR"">FCACL_NUM</Dimension> <Dimension id=""INDICATOR"">FCBODCL_NUM</Dimension> </Or> </And> </MetadataWhere> </Query> </QueryMessage>";
XDocument queryMessageDocument = XDocument.Parse(query); XElement queryMessage = queryMessageDocument.Root; ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient(); XElement compactDataMessage = sdmxServiceClient.GetGenericMetadata(queryMessage);
WCF Service example:
SDMXServiceClient client = new SDMXServiceClient(); string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <MetadataWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <And> <DataSet>FAS</DataSet> <Time> <StartTime>2010</StartTime> <EndTime>2015</EndTime> </Time> <Dimension id=""FREQ"">A</Dimension> <Dimension id=""REF_AREA"">AF</Dimension> <Dimension id=""REF_AREA"">AL</Dimension> <Dimension id=""REF_AREA"">DZ</Dimension> <Or> <Dimension id=""INDICATOR"">FCMOA_NUM</Dimension> <Dimension id=""INDICATOR"">FCMOR_NUM</Dimension> <Dimension id=""INDICATOR"">FCAC_NUM</Dimension> <Dimension id=""INDICATOR"">FCACL_NUM</Dimension> <Dimension id=""INDICATOR"">FCBODCL_NUM</Dimension> </Or> </And> </MetadataWhere> </Query> </QueryMessage>"; var result = client.GetGenericMetadata(XElement.Parse(query));
1.6 GetCodeList Method
GetCodeList method returns the description of CodeLists
C# SYNTAX
public XElement GetCodeList(XElement queryMessage);
queryMessage
Type: System.Xml.Linq.XElement
An XML data, that represents the SDMX-ML query message
Type: System.Xml.Linq.XElement
An XML data that represents the SDMX-ML codelist message.
The following code example creates simple SDMX data query and shows the use of GetCodeList method.
ASP.NET Web Service example:
string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <CodelistWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <Or> <Codelist id=""CL_Indicator_FAS""/> </Or> </CodelistWhere> </Query> </QueryMessage>";
XDocument queryMessageDocument = XDocument.Parse(query); XElement queryMessage = queryMessageDocument.Root; ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient(); XElement compactDataMessage = sdmxServiceClient.GetCodeList(queryMessage);
SDMXServiceClient client = new SDMXServiceClient(); string query = @"<QueryMessage xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message""> <Query> <CodelistWhere xmlns=""http://www.SDMX.org/resources/SDMXML/schemas/v2_0/query""> <Or> <Codelist id=""CL_Indicator_CPIS"" /> </Or> </CodelistWhere> </Query> </QueryMessage>"; var result = client.GetCodeList(XElement.Parse(query));
1.7 GetMaxSeriesInResult Method
GetMaxSeriesInResult method returns the maximum number of time series that can be returned by GetCompactData.
public int GetMaxSeriesInResult();
Type: System.Int32
A non-negative integer value that represents the maximum number of time series that can be returned by GetCompactData method.
A special value of 0 means GetCompactData method can return unlimited number of time series.
The following code example shows the use of GetMaxSeriesInResult method.
ASP.NET Web Service example:
ASMXSDMXServiceSoapClient sdmxServiceClient = new ASMXSDMXServiceSoapClient();
int limit = sdmxServiceClient.GetMaxSeriesInResult();
WCF Service example:
SDMXServiceClient client = new SDMXServiceClient(); var result = client.GetMaxSeriesInResult();