Rev 7747 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
setClass("ExternalReference", representation(ref = "externalptr"))setClass("libxmlTypeTable",representation(ref = "ExternalReference"))# Identifies the class of the element within a libxmlTypeTable sub-class.setGeneric("getTableElementType", function(table) standardGeneric("getTableElementType"))# The name of the element is the name of the class of the table without the Table suffix and,# with Ref tagged on and with xml as a suffix.setMethod("getTableElementType", "libxmlTypeTable",function(table)paste("xml", gsub("Table$", "Ref", class(table)), sep = ""))setMethod("$<-", "libxmlTypeTable",function(x, name, value) {stop("These tables are read-only for the moment")})setMethod("names", "libxmlTypeTable",function(x) {.Call("R_libxmlTypeTable_names", x, character(0), PACKAGE = "XML")})setAs("libxmlTypeTable", "list",function(from) {.Call("R_libxmlTypeTable_names", from, getTableElementType(from), PACKAGE = "XML")})setMethod("$", "libxmlTypeTable",function(x, name) {.Call("R_libxmlTypeTable_lookup", x, name, getTableElementType(x), PACKAGE = "XML")})#################################################################setClass("xmlSchemaRef", contains = "ExternalReference")SchemaRefFields = c("name", "targetNamespace", "version", "id","typeDecl", "attrDecl", "attrgrpDecl", "elemDecl", "notaDecl", "schemasImports")setMethod("$", "xmlSchemaRef",function(x, name) {idx = pmatch(name, SchemaRefFields)if(is.na(idx))stop("No field ", name, " in ", paste(SchemaRefFields, collapse = ", "))sym <- paste("R_libxmlTypeTable", SchemaRefFields[idx], sep = "_").Call(sym, x, PACKAGE = "XML")})setMethod("names", "xmlSchemaRef", function(x) SchemaRefFields)setClass("SchemaElementTable", contains = "libxmlTypeTable")setClass("xmlSchemaElementRef", contains = "ExternalReference")setClass("SchemaTypeTable", contains = "libxmlTypeTable")setClass("xmlSchemaTypeRef", contains = "ExternalReference")setClass("SchemaAttributeTable", contains = "libxmlTypeTable")setClass("xmlSchemaAttributeRef", contains = "ExternalReference")setClass("SchemaAttributeGroupTable", contains = "libxmlTypeTable")setClass("xmlSchemaAttributeGroupRef", contains = "ExternalReference")setClass("SchemaNotationTable", contains = "libxmlTypeTable")setClass("xmlSchemaNotationRef", contains = "ExternalReference")schemaValidationErrorHandler =function(){errors = character()warnings = character()h = function(msg) {if(inherits(msg, "XMLSchemaWarning"))warnings <<- c(warnings, msg)elseerrors <<- c(errors, msg)}structure(list(handler = h, results = function() list(errors = errors, warnings = warnings)), class = "XMLSchemaValidateHandler")}xmlSchemaValidate =# schemaValidationErrorHandler()function(schema, doc, errorHandler = xmlErrorFun(), options = 0L){if(is.character(doc))doc = xmlParse(doc)if(is.character(schema))schema = xmlSchemaParse(schema).oldErrorHandler = setXMLErrorHandler(if(is.list(errorHandler)) errorHandler[[1]] else errorHandler)on.exit(.Call("RS_XML_setStructuredErrorHandler", .oldErrorHandler, PACKAGE = "XML"), add = TRUE)status = .Call("RS_XML_xmlSchemaValidateDoc", schema@ref, doc, as.integer(options), NULL, PACKAGE = "XML") # errorHandler)if(inherits(errorHandler, "XMLStructuredErrorCumulator"))structure(list(status = status, errors = errorHandler[[2]]()), class = "XMLSchemaValidationResults")else if(inherits(errorHandler, "XMLSchemaValidateHandler"))c(status = status, errorHandler$results())elsestatus}setOldClass("XMLSchemaValidationResults")setMethod("show", "XMLSchemaValidationResults",function(object)show(object$errors))