added full RelaxNG based config file syntax checking
[metaproxy-moved-to-github.git] / xml / schema / metaproxy.rnc
index f648a18..8e92daa 100644 (file)
-# The RelaxNG Compact Syntax file is the master copy
+# Metaproxy XML config file schemas
+#  $Id: metaproxy.rnc,v 1.5 2006-10-10 15:10:18 marc Exp $
+# 
+#   Copyright (c) 2005-2006, Index Data.
+# 
+#   See the LICENSE file for details
+# 
+# 
+# The RelaxNG Compact Syntax file 'metaproxy.rnc' is the master copy.
+# 
+# The RelaxNG XML Syntax and XML Schema are generated using 'trang':
 # trang metaproxy.rnc metaproxy.rng 
-# xmllint --relaxng metaproxy.rng ../../../etc/config1.xml 
-# see also http://books.xmlschemata.org/relaxng/relax-CHP-16-SECT-2.html
+# trang metaproxy.rnc metaproxy.xsd 
+# 
+# Config file validation is done using 'xmllint':
+# xmllint -/-relaxng metaproxy.rng ../../../etc/config1.xml 
+# xmllint -/-schema metaproxy.xsd config-bytarget.xml
+# 
+# For information on RelaxNG see http://relaxng.org 
+# see also http://books.xmlschemata.org/relaxng/
 
 default namespace = "http://indexdata.dk/yp2/config/1"
 
 start = metaproxy
 
-metaproxy = 
+metaproxy =
   element yp2 {
     element start {
       attribute route { xsd:NCName }
     },
     element filters { filter+ }?,
-    element routes {
-        route+
-    }
+    element routes { route+ }
   }
 
-route =  element route {
+route =
+  element route {
     attribute id { xsd:NCName },
-    (filter
-     | filter_ref_id
-     )+
-}
+    filter+
+  }
 
-filter = 
-    (filter_log
+filter =
+  element filter {
+    filter_refid
+    | filter_auth_simple
+    | filter_backend_test
     | filter_bounce
     | filter_frontend_net
-    | filter_z3950_client 
-    )
-
-filter_ref_id =
-  element filter {
-    attribute refid { xsd:NCName }
+    | filter_http_file
+    | filter_log
+    | filter_multi
+    | filter_query_rewrite
+    | filter_record_transform
+    | filter_session_shared
+    | filter_sru_z3950
+    | filter_virt_db
+    | filter_z3950_client
   }
 
+filter_refid = attribute refid { xsd:NCName }
+
+filter_auth_simple =
+  attribute type { "auth_simple" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element userRegister { xsd:string }?,
+  element targetRegister { xsd:string }?,
+  element discardUnauthorisedTargets { empty }?
+
+filter_backend_test =
+  attribute type { "backend_test" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?
+
 filter_bounce =
-  element filter {
-    attribute type { "bounce" },
-    attribute id { xsd:NCName }?,
-    attribute name { xsd:NCName }
+  attribute type { "bounce" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?
+
+filter_frontend_net =
+  attribute type { "frontend_net" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element threads { xsd:integer }?,
+  element port { xsd:string }
+
+filter_http_file =
+  attribute type { "http_file" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element mimetypes { xsd:string },
+  element area {
+    element documentroot { xsd:string },
+    element prefix { xsd:string }
   }
 
 filter_log =
-  element filter {
-    attribute type { "log" },
-    attribute id { xsd:NCName }?,
-    attribute name { xsd:NCName }?,
-    element message { xsd:NCName }?
-  }
+  attribute type { "log" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element message { xsd:string }?,
+  element filename { xsd:string }?,
+  element category {
+    attribute init-options { xsd:boolean }?,
+    attribute request-session { xsd:boolean }?,
+    attribute response-session { xsd:boolean }?,
+    attribute apdu { xsd:boolean }?,
+    attribute request-apdu { xsd:boolean }?,
+    attribute response-apdu { xsd:boolean }?
+  }?
 
-filter_frontend_net =
-  element filter {
-    attribute type { "frontend_net" },
-    attribute id { xsd:NCName }?,
-    attribute name { xsd:NCName }?,
-    element threads { xsd:integer },
-    element port { xsd:string }
+filter_multi =
+  attribute type { "multi" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element target {
+    attribute route { xsd:string },
+    xsd:string
+  }*,
+  element hideunavailable { empty }?
+
+filter_query_rewrite =
+  attribute type { "query_rewrite" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element xslt { xsd:string }
+
+filter_record_transform =
+  attribute type { "record_transform" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  retrievalinfo 
+
+filter_session_shared =
+  attribute type { "session_shared" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element resultset {
+    attribute max { xsd:integer },
+    attribute ttl { xsd:integer }
+  },
+  element session {
+    attribute ttl { xsd:integer }
   }
 
+filter_sru_z3950 =
+  attribute type { "sru_z3950" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?
+
+filter_virt_db =
+  attribute type { "virt_db" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element virtual {
+    attribute route { xsd:NCName }?,
+    element database { xsd:NCName },
+    element target { xsd:string }+
+  }+
+
 filter_z3950_client =
-  element filter {
-    attribute type { "z3950_client" },
-    attribute id { xsd:NCName }?,
-    attribute name { xsd:NCName }?,
-    element timeout { xsd:integer }
-  }
+  attribute type { "z3950_client" },
+  attribute id { xsd:NCName }?,
+  attribute name { xsd:NCName }?,
+  element timeout { xsd:integer }?
 
+retrievalinfo = 
+  element retrievalinfo { 
+    element retrieval {
+      attribute syntax { xsd:string },
+      attribute name { xsd:string }?,
+      attribute identifier { xsd:string }?,
+      attribute backendsyntax { xsd:string }?,
+      attribute backendname { xsd:string }?,
+      element convert {
+        element marc {
+          attribute inputformat { xsd:string },
+          attribute outputformat { xsd:string },
+          attribute inputcharset { xsd:string }
+        },
+        element xslt {
+          attribute stylesheet { xsd:string }
+        }?
+      }?
+    }+
+  }