From 3bf42ed8ccc93a3ff5fdabb9153b887018075acc Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 19 Jan 2010 11:44:48 +0200 Subject: Add support for selective polymorphic in C++/Tree New options: --polymorphic-type, --polymorphic-type-all. --- documentation/cxx/tree/manual/index.xhtml | 57 +++++++++++++++++++++++++++++++ documentation/xsd.1 | 25 ++++++++++++++ documentation/xsd.xhtml | 20 ++++++++++- 3 files changed, 101 insertions(+), 1 deletion(-) (limited to 'documentation') diff --git a/documentation/cxx/tree/manual/index.xhtml b/documentation/cxx/tree/manual/index.xhtml index f1696c0..c00be9e 100644 --- a/documentation/cxx/tree/manual/index.xhtml +++ b/documentation/cxx/tree/manual/index.xhtml @@ -3470,6 +3470,63 @@ f (root& r) } +

The mapping can often automatically determine which types are + polymorphic based on the substitution group declarations. However, + if your XML vocabulary is not using substitution groups or if + substitution groups are defined in a separate schema, then you will + need to use the --polymorphic-type option to specify + which types are polymorphic. When using this option you only need + to specify the root of a polymorphic type hierarchy and the mapping + will assume that all the derived types are also polymorphic. + Also note that you need to specify this option when compiling every + schema file that references the polymorphic type. Consider the following + two schemas as an example:

+ +
+<!-- base.xsd -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <xs:complexType name="base">
+    <xs:sequence>
+      <xs:element name="b" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <!-- substitution group root -->
+  <xs:element name="base" type="base"/>
+
+</xs:schema>
+  
+ +
+<!-- derived.xsd -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+  <include schemaLocation="base.xsd"/>
+
+  <xs:complexType name="derived">
+    <xs:complexContent>
+      <xs:extension base="base">
+        <xs:sequence>
+          <xs:element name="d" type="xs:string"/>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:element name="derived" type="derived" substitutionGroup="base"/>
+
+</xs:schema>
+  
+ +

In this example we need to specify "--polymorphic-type base" + when compiling both schemas because the substitution group is declared + in a schema other than the one defining type base.

+ +

You can also indicate that all types should be treated as polymorphic + with the --polymorphic-type-all. However, this may result + in slower generated code with a greater footprint.

+ diff --git a/documentation/xsd.1 b/documentation/xsd.1 index 743f1af..762d865 100644 --- a/documentation/xsd.1 +++ b/documentation/xsd.1 @@ -739,6 +739,31 @@ are replaced with new lines. Generate polymorphism-aware code. Specify this option if you use substitution groups or .BR xsi:type . +Use the +.B --polymorphic-type +or +.B --polymorphic-type-all +option to specify which type hierarchies are polymorphic. + +.IP "\fB\--polymorphic-type \fItype\fR" +Indicate that +.I type +is a root of a polymorphic type hierarchy. The compiler can often +automatically determine which types are polymorphic based on the +substitution group declarations. However, you may need to use this +option if you are not using substitution groups or if substitution +groups are defined in another schema. You need to specify this option +when compiling every schema file that references +.IR type . +The +.I type +argument is an XML Schema type name that can be optionally qualified +with a namespace in the +.IB namespace # name +form. + +.IP "\fB\--polymorphic-type-all\fR" +Indicate that all types should be treated as polymorphic. .IP "\fB\--generate-serialization\fR" Generate serialization functions. Serialization functions convert diff --git a/documentation/xsd.xhtml b/documentation/xsd.xhtml index 1f1c5f8..46e8c1a 100644 --- a/documentation/xsd.xhtml +++ b/documentation/xsd.xhtml @@ -657,7 +657,25 @@
--generate-polymorphic
Generate polymorphism-aware code. Specify this option if you use - substitution groups or xsi:type.
+ substitution groups or xsi:type. Use the + --polymorphic-type or + --polymorphic-type-all option to specify + which type hierarchies are polymorphic. + +
--polymorphic-type type
+
Indicate that type is a root of a polymorphic + type hierarchy. The compiler can often automatically determine + which types are polymorphic based on the substitution group + declarations. However, you may need to use this option if you are + not using substitution groups or if substitution groups are defined + in another schema. You need to specify this option when compiling + every schema file that references type. The + type argument is an XML Schema type name that + can be optionally qualified with a namespace in the + namespace#name form.
+ +
--polymorphic-type-all
+
Indicate that all types should be treated as polymorphic.
--generate-serialization
Generate serialization functions. Serialization functions -- cgit v1.1