aboutsummaryrefslogtreecommitdiff
path: root/libxsd-frontend/transformations/schema-per-type.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsd-frontend/transformations/schema-per-type.hxx')
-rw-r--r--libxsd-frontend/transformations/schema-per-type.hxx61
1 files changed, 61 insertions, 0 deletions
diff --git a/libxsd-frontend/transformations/schema-per-type.hxx b/libxsd-frontend/transformations/schema-per-type.hxx
new file mode 100644
index 0000000..6eb7442
--- /dev/null
+++ b/libxsd-frontend/transformations/schema-per-type.hxx
@@ -0,0 +1,61 @@
+// file : libxsd-frontend/transformations/schema-per-type.hxx
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef LIBXSD_FRONTEND_TRANSFORMATIONS_SCHEMA_PER_TYPE_HXX
+#define LIBXSD_FRONTEND_TRANSFORMATIONS_SCHEMA_PER_TYPE_HXX
+
+#include <vector>
+
+#include <libxsd-frontend/types.hxx>
+
+#include <libxsd-frontend/semantic-graph/elements.hxx> // Path
+#include <libxsd-frontend/semantic-graph/schema.hxx>
+
+namespace XSDFrontend
+{
+ namespace Transformations
+ {
+ class SchemaPerTypeTranslator
+ {
+ public:
+ virtual
+ ~SchemaPerTypeTranslator ();
+
+ // The following two functions should return empty string if
+ // there is no match.
+ //
+ virtual String
+ translate_type (String const& ns, String const& name) = 0;
+
+ virtual NarrowString
+ translate_schema (NarrowString const& abs_path) = 0;
+ };
+
+ // This transformation restructures the semantic graph to have
+ // each type definition in a seperate schema file.
+ //
+ class SchemaPerType
+ {
+ public:
+ struct Failed {};
+
+ // If a type of an element or attribute has a context entry
+ // with the by_value_key key and it is true, then the schema
+ // for this type is included "strongly".
+ //
+ SchemaPerType (SchemaPerTypeTranslator&,
+ bool fat_type_file,
+ char const* by_value_key = 0);
+
+ std::vector<SemanticGraph::Schema*>
+ transform (SemanticGraph::Schema&);
+
+ private:
+ bool fat_type_file_;
+ char const* by_value_key_;
+ SchemaPerTypeTranslator& trans_;
+ };
+ }
+}
+
+#endif // LIBXSD_FRONTEND_TRANSFORMATIONS_SCHEMA_PER_TYPE_HXX