summaryrefslogtreecommitdiffstats
path: root/sdo-cpp/trunk/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'sdo-cpp/trunk/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h')
-rw-r--r--sdo-cpp/trunk/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h236
1 files changed, 236 insertions, 0 deletions
diff --git a/sdo-cpp/trunk/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h b/sdo-cpp/trunk/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
new file mode 100644
index 0000000000..422623d9d7
--- /dev/null
+++ b/sdo-cpp/trunk/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
@@ -0,0 +1,236 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _SDOSCHEMASAX2PARSER_H_
+#define _SDOSCHEMASAX2PARSER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Parser.h"
+#include "commonj/sdo/SchemaInfo.h"
+#include "stack"
+#include "commonj/sdo/TypeDefinitionsImpl.h"
+#include "commonj/sdo/GroupDefinition.h"
+#include "commonj/sdo/XMLQName.h"
+#include "commonj/sdo/ParserErrorSetter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOSAX2Parser implements SAX2Parser.
+ * This class gets called back by the libxml library, and
+ * deals with the creation of metadata objects from XSD.
+ */
+
+ class SDOSchemaSAX2Parser : public SAX2Parser
+ {
+
+ public:
+ typedef std::map<SDOXMLString, SDOXMLString> PARSED_LOCATIONS;
+ typedef std::vector<SDOXMLString> DEFINED_NAMESPACES;
+
+ SDOSchemaSAX2Parser(SchemaInfo& schemaInfo,
+ ParserErrorSetter* insetter,
+ PARSED_LOCATIONS& parsedLocations,
+ DEFINED_NAMESPACES& definedNamepaces);
+
+ virtual ~SDOSchemaSAX2Parser();
+
+
+ virtual void startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI);
+
+
+ virtual void stream(std::istream& input);
+
+ virtual int parse(const char* filename);
+ virtual void endDocument();
+
+
+ const SDOXMLString& getTargetNamespaceURI() const {return schemaInfo.getTargetNamespaceURI();}
+
+ friend std::istream& operator>>(std::istream& input, SDOSchemaSAX2Parser& parser);
+ friend std::istringstream& operator>>(std::istringstream& input, SDOSchemaSAX2Parser& parser);
+
+
+ int parseURI(const SDOXMLString& location, const SDOXMLString& base);
+
+ private:
+
+ internal::TypeDefinitionsImpl& getTypeDefinitions() {return typeDefinitions;}
+
+ // group handling.
+
+ int inGroup;
+ bool preParsing;
+ GroupDefinition* currentGroup;
+ std::vector<GroupDefinition> groupList;
+
+ bool bInSchema; // only parse when within a schema
+ bool bInvalidElement; // where element content is not valid
+ bool bInInvalidContent; // actually inside invalid content.
+ bool bInvalidList; // a list with no type - not supported.
+
+ virtual void replayEvents(
+ const SDOXMLString& uri,
+ const SDOXMLString& name,
+ bool isGroup,
+ const SAX2Attributes& groupAttributes);
+
+ virtual void storeStartElementEvent(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void storeEndElementEvent(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI
+ );
+
+ virtual void startInclude(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startElement(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startAttribute(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startComplexType(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startSimpleType(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startRestriction(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startExtension(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startGroup(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startList(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ XMLQName resolveTypeName(
+ const SDOXMLString& fullTypeName,
+ const SAX2Namespaces& namespaces,
+ SDOXMLString& uri,
+ SDOXMLString& name);
+
+ void setName(
+ const SAX2Attributes& attributes,
+ SDOXMLString& sdoname,
+ SDOXMLString& localname
+ );
+
+ void setType(
+ internal::PropertyDefinitionImpl& property,
+ const SAX2Attributes& attributes,
+ const SAX2Namespaces& namespaces);
+
+ void setTypeName(
+ internal::TypeDefinitionImpl& type,
+ const SAX2Attributes& attributes,
+ const SAX2Namespaces& namespaces);
+
+ void setDefault(
+ internal::PropertyDefinitionImpl& thisProperty,
+ const SAX2Attributes& attributes);
+
+
+ SchemaInfo& schemaInfo;
+
+ internal::PropertyDefinitionImpl currentProperty;
+ std::stack<internal::PropertyDefinitionImpl> propertyStack;
+ void setCurrentProperty(const internal::PropertyDefinitionImpl& property);
+ void defineProperty();
+
+ internal::TypeDefinitionImpl currentType;
+ std::stack<internal::TypeDefinitionImpl> typeStack;
+ void setCurrentType(const internal::TypeDefinitionImpl& type);
+ void defineType();
+
+ internal::TypeDefinitionsImpl typeDefinitions;
+
+ PARSED_LOCATIONS& parsedLocations;
+ DEFINED_NAMESPACES& definedNamespaces;
+
+ friend class XSDHelperImpl;
+ };
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+#endif //_SDOSCHEMASAX2PARSER_H_