<?xml version="1.0" encoding="UTF-8"?>
<!--
Schema for eXist Configuration file conf.xml
TODO: Remove optional attributes in favour of well defined/named parent elements
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xs:simpleType name="yes_no">
<xs:restriction base="xs:string">
<xs:enumeration value="yes"/>
<xs:enumeration value="no"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="exist">
<xs:complexType>
<xs:sequence>
<xs:element name="cluster">
<xs:complexType>
<xs:attribute name="dbaUser" type="xs:string" default="admin"/>
<xs:attribute name="dbaPassword" type="xs:string"/>
<xs:attribute name="exclude" type="xs:string" default="/db/system,/db/system/config"/>
<xs:attribute name="journalDir" type="xs:string" default="webapp/WEB-INF/data/journal"/>
<xs:attribute name="protocol" type="xs:string" default="UDP(mcast_addr=228.1.2.3;mcast_port=45566;ip_ttl=8;ip_mcast=true;mcast_send_buf_size=800000;mcast_recv_buf_size=150000;ucast_send_buf_size=800000;ucast_recv_buf_size=150000;loopback=true):PING(timeout=2000;num_initial_members=3;up_thread=true;down_thread=true):MERGE2(min_interval=10000;max_interval=20000):FD(shun=true;up_thread=true;down_thread=true;timeout=2500;max_tries=5):VERIFY_SUSPECT(timeout=3000;num_msgs=3;up_thread=true;down_thread=true):pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800;max_xmit_size=8192;up_thread=true;down_thread=true):UNICAST(timeout=300,600,1200,2400,4800;window_size=100;min_threshold=10;down_thread=true):pbcast.STABLE(desired_avg_gossip=20000;up_thread=true;down_thread=true):FRAG(frag_size=8192;down_thread=true;up_thread=true):pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=true;print_local_addr=true)"/>
</xs:complexType>
</xs:element>
<xs:element name="db-connection">
<xs:complexType>
<xs:sequence>
<xs:element name="default-permissions" minOccurs="0">
<xs:complexType>
<xs:attribute name="collection" type="xs:string" default="0775"/>
<xs:attribute name="resource" type="xs:string" default="0775"/>
</xs:complexType>
</xs:element>
<xs:element name="pool">
<xs:complexType>
<xs:attribute name="max" type="xs:integer" default="20"/>
<xs:attribute name="min" type="xs:integer" default="1"/>
<xs:attribute name="sync-period" type="xs:integer" default="120000"/>
<xs:attribute name="wait-before-shutdown" type="xs:integer" default="120000"/>
</xs:complexType>
</xs:element>
<xs:element name="query-pool" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="max-stack-size" type="xs:integer" default="5"/>
<xs:attribute name="size" type="xs:integer" default="128"/>
<xs:attribute name="timeout" type="xs:integer" default="120000"/>
<xs:attribute name="timeout-check-interval" type="xs:integer" default="30000"/>
</xs:complexType>
</xs:element>
<xs:element name="recovery">
<xs:complexType>
<xs:attribute name="enabled" type="yes_no" default="yes"/>
<xs:attribute name="group-commit" type="yes_no" default="no"/>
<xs:attribute name="journal-dir" type="xs:string" default="webapp/WEB-INF/data"/>
<xs:attribute name="size" type="xs:string" default="100M"/>
<xs:attribute name="sync-on-commit" type="yes_no" default="no"/>
<xs:attribute name="force-restart" type="yes_no" default="no"/>
<xs:attribute name="consistency-check" type="yes_no" default="yes"/>
</xs:complexType>
</xs:element>
<xs:element name="security" minOccurs="0">
<xs:complexType>
<xs:attribute name="class" type="xs:string" default="org.exist.security.XMLSecurityManager"/>
<xs:attribute name="password-encoding" use="optional" default="md5">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="plain"/>
<xs:enumeration value="md5"/>
<xs:enumeration value="simple-md5"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="password-realm" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="watchdog">
<xs:complexType>
<xs:attribute name="output-size-limit" type="xs:integer"/>
<xs:attribute name="query-timeout" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="cacheSize" type="xs:string" default="48M"/>
<xs:attribute name="collectionCache" type="xs:string" default="24M"/>
<xs:attribute name="database" type="xs:string" default="@database@"/>
<xs:attribute name="files" type="xs:string" default="webapp/WEB-INF/data"/>
<xs:attribute name="free_mem_min" type="xs:integer" default="5"/>
<xs:attribute name="pageSize" type="xs:integer" default="4096"/>
</xs:complexType>
</xs:element>
<xs:element name="indexer">
<xs:complexType>
<xs:sequence>
<xs:element name="modules">
<xs:complexType>
<xs:sequence>
<xs:element name="module" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" default="ngram-index"/>
<xs:attribute name="class" type="xs:string" default="org.exist.indexing.impl.NGramIndex"/>
<xs:attribute name="file" type="xs:string" default="ngram.dbx"/>
<xs:attribute name="connectionTimeout" type="xs:integer" default="10000"/>
<xs:attribute name="flushAfter" type="xs:integer" default="300"/>
<xs:attribute name="n" type="xs:integer" default="3"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="stopwords">
<xs:complexType>
<xs:attribute name="file" type="xs:string" default="stopword"/>
</xs:complexType>
</xs:element>
<xs:element name="index">
<xs:complexType>
<xs:sequence>
<xs:element name="fulltext">
<xs:complexType>
<xs:sequence>
<xs:element name="include" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="path" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="exclude" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="path" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="default" default="all">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="all"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="attributes" type="xs:boolean" default="true"/>
<xs:attribute name="alphanum" type="xs:boolean" default="true"/>
</xs:complexType>
</xs:element>
<xs:element name="create" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="path" type="xs:string" use="optional"/>
<xs:attribute name="qname" type="xs:string" use="optional"/>
<xs:attribute name="type" type="xs:anySimpleType"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="caseSensitive" type="yes_no" default="yes"/>
<xs:attribute name="index-depth" type="xs:integer" default="5"/>
<xs:attribute name="preserve-whitespace-mixed-content" type="yes_no" default="no"/>
<xs:attribute name="stemming" type="yes_no" default="no"/>
<xs:attribute name="suppress-whitespace" default="both">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="leading"/>
<xs:enumeration value="trailing"/>
<xs:enumeration value="both"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="tokenizer" type="xs:string" default="org.exist.storage.analysis.SimpleTokenizer"/>
<xs:attribute name="track-term-freq" type="yes_no" default="yes"/>
</xs:complexType>
</xs:element>
<xs:element name="scheduler">
<xs:complexType>
<xs:sequence>
<xs:element name="job" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="optional" default="user">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="startup"/>
<xs:enumeration value="system"/>
<xs:enumeration value="user"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="class" type="xs:string" use="optional"/>
<xs:attribute name="xquery" type="xs:string" use="optional"/>
<xs:attribute name="cron-trigger" type="xs:string" use="optional"/>
<xs:attribute name="period" type="xs:string" use="optional"/>
<xs:attribute name="delay" type="xs:long" use="optional"/>
<xs:attribute name="repeat" type="xs:integer" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="serializer">
<xs:complexType>
<xs:sequence>
<xs:element name="custom-filter" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="class" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="add-exist-id" default="none">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="all"/>
<xs:enumeration value="element"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="compress-output" type="yes_no" default="no"/>
<xs:attribute name="enable-xinclude" type="yes_no" default="yes"/>
<xs:attribute name="enable-xsl" type="yes_no" default="no"/>
<xs:attribute name="indent" type="yes_no" default="yes"/>
<xs:attribute name="match-tagging-attributes" type="yes_no" default="no"/>
<xs:attribute name="match-tagging-elements" type="yes_no" default="yes"/>
</xs:complexType>
</xs:element>
<xs:element name="transformer">
<xs:complexType>
<xs:sequence>
<xs:element name="attribute" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="class" type="xs:string" default="org.apache.xalan.processor.TransformerFactoryImpl"/>
<xs:attribute name="caching" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="validation">
<xs:complexType>
<xs:sequence>
<xs:element name="entity-resolver">
<xs:complexType>
<xs:sequence>
<xs:element name="catalog" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="uri" type="xs:string" default="webapp/WEB-INF/catalog.xml"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="mode" default="auto">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="auto"/>
<xs:enumeration value="no"/>
<xs:enumeration value="yes"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="xquery">
<xs:complexType>
<xs:sequence>
<xs:element name="builtin-modules">
<xs:complexType>
<xs:sequence>
<xs:element name="module" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="class" type="xs:string"/>
<xs:attribute name="uri" type="xs:anyURI"/>
<xs:attribute name="src" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="enable-java-binding" type="yes_no" default="no"/>
<xs:attribute name="disable-deprecated-functions" type="yes_no" default="no"/>
<xs:attribute name="enable-query-rewriting" type="yes_no" default="yes"/>
<xs:attribute name="backwardCompatible" type="yes_no" default="no"/>
<xs:attribute name="raise-error-on-failed-retrieval" type="yes_no" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="xupdate">
<xs:complexType>
<xs:attribute name="allowed-fragmentation" type="xs:integer" default="5"/>
<xs:attribute name="enable-consistency-checks" type="yes_no" default="no"/>
<xs:attribute name="growth-factor" type="xs:integer" default="20"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>