package org.basex.http.rest;
import javax.xml.*;
import javax.xml.transform.stream.*;
import javax.xml.validation.*;
import org.basex.io.in.*;
import org.basex.util.*;
import org.xml.sax.*;
/**
* XML Schemas for REST requests.
*
* @author BaseX Team 2005-17, BSD License
* @author Christian Gruen
*/
enum RESTSchema {
/** Single instance. */
INSTANCE;
/** Validation schema. */
private final Schema schema;
/** Constructor. */
RESTSchema() {
try {
schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).
newSchema(new StreamSource(new ArrayInput(Token.token(SCHEMA_CONTENT))));
} catch(final SAXException ex) {
throw Util.notExpected(ex);
}
}
/**
* Create a new validator against the schema.
* @return a new validator
*/
static Validator newValidator() {
return INSTANCE.schema.newValidator();
}
/** Post Schema. */
private static final String SCHEMA_CONTENT =
"<?xml version='1.0' encoding='UTF-8'?>" +
"<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
" xmlns='http://basex.org/rest'" +
" targetNamespace='http://basex.org/rest'>" +
"<xs:element name='query'>" +
"<xs:complexType>" +
"<xs:sequence>" +
"<xs:element ref='text' minOccurs='1' maxOccurs='1'/>" +
"<xs:element ref='parameter' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='option' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='variable' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='context' minOccurs='0' maxOccurs='1'/>" +
"</xs:sequence>" +
"</xs:complexType>" +
"</xs:element>" +
"<xs:element name='run'>" +
"<xs:complexType>" +
"<xs:sequence>" +
"<xs:element ref='text' minOccurs='1' maxOccurs='1'/>" +
"<xs:element ref='parameter' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='option' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='variable' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='context' minOccurs='0' maxOccurs='1'/>" +
"</xs:sequence>" +
"</xs:complexType>" +
"</xs:element>" +
"<xs:element name='command'>" +
"<xs:complexType>" +
"<xs:sequence>" +
"<xs:element ref='text' minOccurs='1' maxOccurs='1'/>" +
"<xs:element ref='parameter' minOccurs='0' maxOccurs='unbounded'/>" +
"<xs:element ref='option' minOccurs='0' maxOccurs='unbounded'/>" +
"</xs:sequence>" +
"</xs:complexType>" +
"</xs:element>" +
"<xs:element name='text' type='xs:string'/>" +
"<xs:element name='option'>" +
"<xs:complexType>" +
"<xs:attribute name='name' type='xs:string' use='required'/>" +
"<xs:attribute name='value' type='xs:string' use='required'/>" +
"</xs:complexType>" +
"</xs:element>" +
"<xs:element name='parameter'>" +
"<xs:complexType>" +
"<xs:attribute name='name' type='xs:string' use='required'/>" +
"<xs:attribute name='value' type='xs:string' use='required'/>" +
"</xs:complexType>" +
"</xs:element>" +
"<xs:element name='variable'>" +
"<xs:complexType>" +
"<xs:attribute name='name' type='xs:string' use='required'/>" +
"<xs:attribute name='value' type='xs:string' use='required'/>" +
"<xs:attribute name='type' type='xs:string' use='optional'/>" +
"</xs:complexType>" +
"</xs:element>" +
"<xs:element name='context' type='xs:anyType'/>" +
"</xs:schema>";
}