Qt 4.8
qxsdschemamerger.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "qxsdschemamerger_p.h"
43 
45 
46 using namespace QPatternist;
47 
49 {
50  merge(schema, otherSchema);
51 }
52 
54 {
55  return m_mergedSchema;
56 }
57 
58 void XsdSchemaMerger::merge(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema)
59 {
60  m_mergedSchema = XsdSchema::Ptr(new XsdSchema(otherSchema->namePool()));
61 
62  // first fill the merged schema with the values from schema
63  if (schema) {
64  const XsdElement::List elements = schema->elements();
65  for (int i = 0; i < elements.count(); ++i) {
66  m_mergedSchema->addElement(elements.at(i));
67  }
68 
69  const XsdAttribute::List attributes = schema->attributes();
70  for (int i = 0; i < attributes.count(); ++i) {
71  m_mergedSchema->addAttribute(attributes.at(i));
72  }
73 
74  const SchemaType::List types = schema->types();
75  for (int i = 0; i < types.count(); ++i) {
76  m_mergedSchema->addType(types.at(i));
77  }
78 
79  const SchemaType::List anonymousTypes = schema->anonymousTypes();
80  for (int i = 0; i < anonymousTypes.count(); ++i) {
81  m_mergedSchema->addAnonymousType(anonymousTypes.at(i));
82  }
83 
84  const XsdModelGroup::List elementGroups = schema->elementGroups();
85  for (int i = 0; i < elementGroups.count(); ++i) {
86  m_mergedSchema->addElementGroup(elementGroups.at(i));
87  }
88 
89  const XsdAttributeGroup::List attributeGroups = schema->attributeGroups();
90  for (int i = 0; i < attributeGroups.count(); ++i) {
91  m_mergedSchema->addAttributeGroup(attributeGroups.at(i));
92  }
93 
94  const XsdNotation::List notations = schema->notations();
95  for (int i = 0; i < notations.count(); ++i) {
96  m_mergedSchema->addNotation(notations.at(i));
97  }
98 
99  const XsdIdentityConstraint::List identityConstraints = schema->identityConstraints();
100  for (int i = 0; i < identityConstraints.count(); ++i) {
101  m_mergedSchema->addIdentityConstraint(identityConstraints.at(i));
102  }
103  }
104 
105  // then merge in the values from the otherSchema
106  {
107  const XsdElement::List elements = otherSchema->elements();
108  for (int i = 0; i < elements.count(); ++i) {
109  if (!m_mergedSchema->element(elements.at(i)->name(otherSchema->namePool())))
110  m_mergedSchema->addElement(elements.at(i));
111  }
112 
113  const XsdAttribute::List attributes = otherSchema->attributes();
114  for (int i = 0; i < attributes.count(); ++i) {
115  if (!m_mergedSchema->attribute(attributes.at(i)->name(otherSchema->namePool())))
116  m_mergedSchema->addAttribute(attributes.at(i));
117  }
118 
119  const SchemaType::List types = otherSchema->types();
120  for (int i = 0; i < types.count(); ++i) {
121  if (!m_mergedSchema->type(types.at(i)->name(otherSchema->namePool())))
122  m_mergedSchema->addType(types.at(i));
123  }
124 
125  const SchemaType::List anonymousTypes = otherSchema->anonymousTypes();
126  for (int i = 0; i < anonymousTypes.count(); ++i) {
127  // add anonymous type as they are
128  m_mergedSchema->addAnonymousType(anonymousTypes.at(i));
129  }
130 
131  const XsdModelGroup::List elementGroups = otherSchema->elementGroups();
132  for (int i = 0; i < elementGroups.count(); ++i) {
133  if (!m_mergedSchema->elementGroup(elementGroups.at(i)->name(otherSchema->namePool())))
134  m_mergedSchema->addElementGroup(elementGroups.at(i));
135  }
136 
137  const XsdAttributeGroup::List attributeGroups = otherSchema->attributeGroups();
138  for (int i = 0; i < attributeGroups.count(); ++i) {
139  if (!m_mergedSchema->attributeGroup(attributeGroups.at(i)->name(otherSchema->namePool())))
140  m_mergedSchema->addAttributeGroup(attributeGroups.at(i));
141  }
142 
143  const XsdNotation::List notations = otherSchema->notations();
144  for (int i = 0; i < notations.count(); ++i) {
145  if (!m_mergedSchema->notation(notations.at(i)->name(otherSchema->namePool())))
146  m_mergedSchema->addNotation(notations.at(i));
147  }
148 
149  const XsdIdentityConstraint::List identityConstraints = otherSchema->identityConstraints();
150  for (int i = 0; i < identityConstraints.count(); ++i) {
151  if (!m_mergedSchema->identityConstraint(identityConstraints.at(i)->name(otherSchema->namePool())))
152  m_mergedSchema->addIdentityConstraint(identityConstraints.at(i));
153  }
154  }
155 }
156 
void addElement(const XsdElement::Ptr &element)
Definition: qxsdschema.cpp:75
XsdSchema::Ptr mergedSchema() const
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
XsdElement::Ptr element(const QXmlName &name) const
Definition: qxsdschema.cpp:82
XsdAttributeGroup::Ptr attributeGroup(const QXmlName name) const
Definition: qxsdschema.cpp:195
XsdIdentityConstraint::Ptr identityConstraint(const QXmlName &name) const
Definition: qxsdschema.cpp:258
void addAttributeGroup(const XsdAttributeGroup::Ptr &group)
Definition: qxsdschema.cpp:188
Represents a XSD schema object.
Definition: qxsdschema_p.h:91
SchemaType::List anonymousTypes() const
Definition: qxsdschema.cpp:181
int count(const T &t) const
Returns the number of occurrences of value in the list.
Definition: qlist.h:891
XsdModelGroup::List elementGroups() const
Definition: qxsdschema.cpp:223
XsdSchemaMerger(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema)
void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint)
Definition: qxsdschema.cpp:251
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
void addNotation(const XsdNotation::Ptr &notation)
Definition: qxsdschema.cpp:230
XsdIdentityConstraint::List identityConstraints() const
Definition: qxsdschema.cpp:265
const T & at(int i) const
Returns the item at index position i in the list.
Definition: qlist.h:468
XsdModelGroup::Ptr elementGroup(const QXmlName &name) const
Definition: qxsdschema.cpp:216
XsdNotation::Ptr notation(const QXmlName &name) const
Definition: qxsdschema.cpp:237
The namespace for the internal API of QtXmlPatterns.
XsdNotation::List notations() const
Definition: qxsdschema.cpp:244
QExplicitlySharedDataPointer< XsdSchema > Ptr
Definition: qxsdschema_p.h:94
SchemaType::Ptr type(const QXmlName &name) const
Definition: qxsdschema.cpp:124
virtual QXmlName name(const NamePool::Ptr &namePool) const
static const struct @32 types[]
void addAnonymousType(const SchemaType::Ptr &type)
Definition: qxsdschema.cpp:168
XsdAttribute::List attributes() const
Definition: qxsdschema.cpp:110
XsdAttribute::Ptr attribute(const QXmlName &name) const
Definition: qxsdschema.cpp:103
static const QTextHtmlElement elements[Html_NumElements]
void addElementGroup(const XsdModelGroup::Ptr &group)
Definition: qxsdschema.cpp:209
XsdAttributeGroup::List attributeGroups() const
Definition: qxsdschema.cpp:202
void merge(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema)
void addType(const SchemaType::Ptr &type)
Definition: qxsdschema.cpp:117
SchemaType::List types() const
Definition: qxsdschema.cpp:131
virtual QXmlName name(const NamePool::Ptr &np) const =0
Returns the name of the type.
XsdElement::List elements() const
Definition: qxsdschema.cpp:89
void addAttribute(const XsdAttribute::Ptr &attribute)
Definition: qxsdschema.cpp:96
NamePool::Ptr namePool() const
Definition: qxsdschema.cpp:60