A method of automatically extracting content from a data resource, the data resource comprising a plurality of hierarchical levels (310, 320, 330), each of the plurality of hierarchical levels comprising content defined using mark-up language and the method comprising a training phase and a content extraction phase, wherein the training phase precedes the content extraction phase; the training phase comprising the steps of: i) defining one or more hierarchical levels of interest; ii) defining an entity which is comprised within the one or more hierarchical levels of interest defined in step i) and one or more properties associated with that entity; and for each entity of one or more entities and the associated entity properties defined in step ii), executing a plurality of training instances, wherein each of the training instances comprises the steps of: a) defining a property value for each of the one or more properties associated with said entity; b) for each of the property values, determining a containing element which provides a match to the property value and storing the containing element in an instance schema, the instance schema being associated with said entity; and iii) comparing each of the plurality of instance schemas associated with said entity to generate a final schema for said entity; the content extraction phase comprising the steps of: I) comparing a data resource from which content is to be extracted with a composite schema, the composite schema containing one or more of the final schema for each entity; II) identifying those entities and their associated properties within the data resource which match the containing elements specified in the composite schema; and III) extracting those entities and their associated properties identified in step II) from the data resource. i) defining one or more hierarchical levels of interest; ii) defining an entity which is comprised within the one or more hierarchical levels of interest defined in step i) and one or more properties associated with that entity; and for each entity of one or more entities and the associated entity properties defined in step ii), executing a plurality of training instances, wherein each of the training instances comprises the steps of: a) defining a property value for each of the one or more properties associated with said entity; b) for each of the property values, determining a containing element which provides a match to the property value and storing the containing element in an instance schema, the instance schema being associated with said entity; and a) defining a property value for each of the one or more properties associated with said entity; b) for each of the property values, determining a containing element which provides a match to the property value and storing the containing element in an instance schema, the instance schema being associated with said entity; and iii) comparing each of the plurality of instance schemas associated with said entity to generate a final schema for said entity; I) comparing a data resource from which content is to be extracted with a composite schema, the composite schema containing one or more of the final schema for each entity; II) identifying those entities and their associated properties within the data resource which match the containing elements specified in the composite schema; and III) extracting those entities and their associated properties identified in step II) from the data resource.