KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > wsdl > ui > property > model > ElementOrTypeChooser


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 /**
21  * This generated bean class ElementOrTypeChooser
22  * matches the schema element 'ElementOrTypeChooser'.
23  * The root bean class is ElementProperties
24  *
25  * ===============================================================
26  * Shows a Tree based selector, which shows all the elements/types from Inline/Imported schemas.
27  * elementAttributeName : the attribute on which GlobalElement data type would be set.
28  * typeAttributeName : the attribute on which GlobalType data type would be set.
29  *
30  * ===============================================================
31  * Generated on Mon Feb 05 17:54:51 PST 2007
32  * @Generated
33  */

34
35 package org.netbeans.modules.xml.wsdl.ui.property.model;
36
37 public class ElementOrTypeChooser {
38     public static final String JavaDoc ELEMENTATTRIBUTENAME = "ElementAttributeName"; // NOI18N
39
public static final String JavaDoc TYPEATTRIBUTENAME = "TypeAttributeName"; // NOI18N
40

41     private java.lang.String JavaDoc _ElementAttributeName;
42     private java.lang.String JavaDoc _TypeAttributeName;
43
44     /**
45      * Normal starting point constructor.
46      */

47     public ElementOrTypeChooser() {
48     }
49
50     /**
51      * Deep copy
52      */

53     public ElementOrTypeChooser(org.netbeans.modules.xml.wsdl.ui.property.model.ElementOrTypeChooser source) {
54         this(source, false);
55     }
56
57     /**
58      * Deep copy
59      * @param justData just copy the XML relevant data
60      */

61     public ElementOrTypeChooser(org.netbeans.modules.xml.wsdl.ui.property.model.ElementOrTypeChooser source, boolean justData) {
62         _ElementAttributeName = source._ElementAttributeName;
63         _TypeAttributeName = source._TypeAttributeName;
64     }
65
66     // This attribute is optional
67
public void setElementAttributeName(java.lang.String JavaDoc value) {
68         _ElementAttributeName = value;
69     }
70
71     public java.lang.String JavaDoc getElementAttributeName() {
72         return _ElementAttributeName;
73     }
74
75     // This attribute is optional
76
public void setTypeAttributeName(java.lang.String JavaDoc value) {
77         _TypeAttributeName = value;
78     }
79
80     public java.lang.String JavaDoc getTypeAttributeName() {
81         return _TypeAttributeName;
82     }
83
84     public void writeNode(java.io.Writer JavaDoc out) throws java.io.IOException JavaDoc {
85         String JavaDoc myName;
86         myName = "ElementOrTypeChooser";
87         writeNode(out, myName, ""); // NOI18N
88
}
89
90     public void writeNode(java.io.Writer JavaDoc out, String JavaDoc nodeName, String JavaDoc indent) throws java.io.IOException JavaDoc {
91         writeNode(out, nodeName, null, indent, new java.util.HashMap JavaDoc());
92     }
93
94     /**
95      * It's not recommended to call this method directly.
96      */

97     public void writeNode(java.io.Writer JavaDoc out, String JavaDoc nodeName, String JavaDoc namespace, String JavaDoc indent, java.util.Map JavaDoc namespaceMap) throws java.io.IOException JavaDoc {
98         out.write(indent);
99         out.write("<");
100         if (namespace != null) {
101             out.write((String JavaDoc)namespaceMap.get(namespace));
102             out.write(":");
103         }
104         out.write(nodeName);
105         writeNodeAttributes(out, nodeName, namespace, indent, namespaceMap);
106         writeNodeChildren(out, nodeName, namespace, indent, namespaceMap);
107         out.write("/>\n");
108     }
109
110     protected void writeNodeAttributes(java.io.Writer JavaDoc out, String JavaDoc nodeName, String JavaDoc namespace, String JavaDoc indent, java.util.Map JavaDoc namespaceMap) throws java.io.IOException JavaDoc {
111         // elementAttributeName is an attribute with namespace http://xml.netbeans.org/schema/wsdlui/property
112
if (_ElementAttributeName != null) {
113             out.write(" elementAttributeName='");
114             org.netbeans.modules.xml.wsdl.ui.property.model.ElementProperties.writeXML(out, _ElementAttributeName, true);
115             out.write("'"); // NOI18N
116
}
117         // typeAttributeName is an attribute with namespace http://xml.netbeans.org/schema/wsdlui/property
118
if (_TypeAttributeName != null) {
119             out.write(" typeAttributeName='");
120             org.netbeans.modules.xml.wsdl.ui.property.model.ElementProperties.writeXML(out, _TypeAttributeName, true);
121             out.write("'"); // NOI18N
122
}
123     }
124
125     protected void writeNodeChildren(java.io.Writer JavaDoc out, String JavaDoc nodeName, String JavaDoc namespace, String JavaDoc indent, java.util.Map JavaDoc namespaceMap) throws java.io.IOException JavaDoc {
126     }
127
128     public void readNode(org.w3c.dom.Node JavaDoc node) {
129         readNode(node, new java.util.HashMap JavaDoc());
130     }
131
132     public void readNode(org.w3c.dom.Node JavaDoc node, java.util.Map JavaDoc namespacePrefixes) {
133         if (node.hasAttributes()) {
134             org.w3c.dom.NamedNodeMap JavaDoc attrs = node.getAttributes();
135             org.w3c.dom.Attr JavaDoc attr;
136             java.lang.String JavaDoc attrValue;
137             boolean firstNamespaceDef = true;
138             for (int attrNum = 0; attrNum < attrs.getLength(); ++attrNum) {
139                 attr = (org.w3c.dom.Attr JavaDoc) attrs.item(attrNum);
140                 String JavaDoc attrName = attr.getName();
141                 if (attrName.startsWith("xmlns:")) {
142                     if (firstNamespaceDef) {
143                         firstNamespaceDef = false;
144                         // Dup prefix map, so as to not write over previous values, and to make it easy to clear out our entries.
145
namespacePrefixes = new java.util.HashMap JavaDoc(namespacePrefixes);
146                     }
147                     String JavaDoc attrNSPrefix = attrName.substring(6, attrName.length());
148                     namespacePrefixes.put(attrNSPrefix, attr.getValue());
149                 }
150             }
151             readNodeAttributes(node, namespacePrefixes, attrs);
152         }
153         readNodeChildren(node, namespacePrefixes);
154     }
155
156     protected void readNodeAttributes(org.w3c.dom.Node JavaDoc node, java.util.Map JavaDoc namespacePrefixes, org.w3c.dom.NamedNodeMap JavaDoc attrs) {
157         org.w3c.dom.Attr JavaDoc attr;
158         java.lang.String JavaDoc attrValue;
159         attr = (org.w3c.dom.Attr JavaDoc) attrs.getNamedItem("elementAttributeName");
160         if (attr != null) {
161             attrValue = attr.getValue();
162             _ElementAttributeName = attrValue;
163         }
164         attr = (org.w3c.dom.Attr JavaDoc) attrs.getNamedItem("typeAttributeName");
165         if (attr != null) {
166             attrValue = attr.getValue();
167             _TypeAttributeName = attrValue;
168         }
169     }
170
171     protected void readNodeChildren(org.w3c.dom.Node JavaDoc node, java.util.Map JavaDoc namespacePrefixes) {
172     }
173
174     public void changePropertyByName(String JavaDoc name, Object JavaDoc value) {
175         if (name == null) return;
176         name = name.intern();
177         if (name == "elementAttributeName")
178             setElementAttributeName((java.lang.String JavaDoc)value);
179         else if (name == "typeAttributeName")
180             setTypeAttributeName((java.lang.String JavaDoc)value);
181         else
182             throw new IllegalArgumentException JavaDoc(name+" is not a valid property name for ElementOrTypeChooser");
183     }
184
185     public Object JavaDoc fetchPropertyByName(String JavaDoc name) {
186         if (name == "elementAttributeName")
187             return getElementAttributeName();
188         if (name == "typeAttributeName")
189             return getTypeAttributeName();
190         throw new IllegalArgumentException JavaDoc(name+" is not a valid property name for ElementOrTypeChooser");
191     }
192
193     public String JavaDoc nameSelf() {
194         return "ElementOrTypeChooser";
195     }
196
197     public String JavaDoc nameChild(Object JavaDoc childObj) {
198         return nameChild(childObj, false, false);
199     }
200
201     /**
202      * @param childObj The child object to search for
203      * @param returnSchemaName Whether or not the schema name should be returned or the property name
204      * @return null if not found
205      */

206     public String JavaDoc nameChild(Object JavaDoc childObj, boolean returnConstName, boolean returnSchemaName) {
207         return nameChild(childObj, returnConstName, returnSchemaName, false);
208     }
209
210     /**
211      * @param childObj The child object to search for
212      * @param returnSchemaName Whether or not the schema name should be returned or the property name
213      * @return null if not found
214      */

215     public String JavaDoc nameChild(Object JavaDoc childObj, boolean returnConstName, boolean returnSchemaName, boolean returnXPathName) {
216         if (childObj instanceof java.lang.String JavaDoc) {
217             java.lang.String JavaDoc child = (java.lang.String JavaDoc) childObj;
218             if (child == _ElementAttributeName) {
219                 if (returnConstName) {
220                     return ELEMENTATTRIBUTENAME;
221                 } else if (returnSchemaName) {
222                     return "elementAttributeName";
223                 } else if (returnXPathName) {
224                     return "@elementAttributeName";
225                 } else {
226                     return "ElementAttributeName";
227                 }
228             }
229             if (child == _TypeAttributeName) {
230                 if (returnConstName) {
231                     return TYPEATTRIBUTENAME;
232                 } else if (returnSchemaName) {
233                     return "typeAttributeName";
234                 } else if (returnXPathName) {
235                     return "@typeAttributeName";
236                 } else {
237                     return "TypeAttributeName";
238                 }
239             }
240         }
241         return null;
242     }
243
244     /**
245      * Return an array of all of the properties that are beans and are set.
246      */

247     public java.lang.Object JavaDoc[] childBeans(boolean recursive) {
248         java.util.List JavaDoc children = new java.util.LinkedList JavaDoc();
249         childBeans(recursive, children);
250         java.lang.Object JavaDoc[] result = new java.lang.Object JavaDoc[children.size()];
251         return (java.lang.Object JavaDoc[]) children.toArray(result);
252     }
253
254     /**
255      * Put all child beans into the beans list.
256      */

257     public void childBeans(boolean recursive, java.util.List JavaDoc beans) {
258     }
259
260     public boolean equals(Object JavaDoc o) {
261         return o instanceof org.netbeans.modules.xml.wsdl.ui.property.model.ElementOrTypeChooser && equals((org.netbeans.modules.xml.wsdl.ui.property.model.ElementOrTypeChooser) o);
262     }
263
264     public boolean equals(org.netbeans.modules.xml.wsdl.ui.property.model.ElementOrTypeChooser inst) {
265         if (inst == this) {
266             return true;
267         }
268         if (inst == null) {
269             return false;
270         }
271         if (!(_ElementAttributeName == null ? inst._ElementAttributeName == null : _ElementAttributeName.equals(inst._ElementAttributeName))) {
272             return false;
273         }
274         if (!(_TypeAttributeName == null ? inst._TypeAttributeName == null : _TypeAttributeName.equals(inst._TypeAttributeName))) {
275             return false;
276         }
277         return true;
278     }
279
280     public int hashCode() {
281         int result = 17;
282         result = 37*result + (_ElementAttributeName == null ? 0 : _ElementAttributeName.hashCode());
283         result = 37*result + (_TypeAttributeName == null ? 0 : _TypeAttributeName.hashCode());
284         return result;
285     }
286
287 }
288
289
290 /*
291         The following schema file has been used for generation:
292
293 <?xml version="1.0" encoding="UTF-8"?>
294
295 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
296             targetNamespace="http://xml.netbeans.org/schema/wsdlui/property"
297             xmlns:tns="http://xml.netbeans.org/schema/wsdlui/property"
298             elementFormDefault="qualified">
299     <xsd:element name="ElementProperties">
300         <xsd:annotation>
301             <xsd:documentation xml:lang="en-US">Root node for specifying customizers for a element.
302                 This needs to be on the GlobalElement which would represent the node in the WSDL tree.
303             If this is defined in local elements it is ignored.</xsd:documentation>
304         </xsd:annotation>
305         <xsd:complexType>
306             <xsd:sequence>
307                 <xsd:element ref="tns:PropertyGroup" maxOccurs="unbounded" />
308                 <xsd:element ref="tns:Property" maxOccurs="unbounded" />
309                 <xsd:element ref="tns:GroupedProperty" maxOccurs="unbounded" />
310             </xsd:sequence>
311         </xsd:complexType>
312     </xsd:element>
313     
314     <xsd:element name="PropertyGroup">
315         <xsd:annotation>
316             <xsd:documentation xml:lang="en-US">Used to create groups in the property sheet.
317                 By default, if no groups are defined all the properties will be shown
318                 in the default Property sheet called "Properties".
319                 name : defines the name of the Group.
320                 groupOrder : defines the order in which the groups will be created. The groupOrder starts with 1.
321                 isDefault : overrides the default property sheet to be this group rather than "Properties".
322                 This enables the user to put non-customized properties (which do not have a Property defined in this xml) to go into this property sheet.
323                 
324                 
325             </xsd:documentation>
326         </xsd:annotation>
327         <xsd:complexType>
328             <xsd:attribute name="name" type="xsd:string" use="required"/>
329             <xsd:attribute name="groupOrder" type="xsd:int"/>
330             <xsd:attribute name="isDefault" type="xsd:boolean" default="false"/>
331         </xsd:complexType>
332     </xsd:element>
333     <xsd:element name="Property">
334         <xsd:annotation>
335             <xsd:documentation xml:lang="en-US">Property represents each attribute that would be created for the Node in the wsdleditor tree.
336                 It defines a way to specify customizers for attributes.
337                 There are 3 types of Property customizers:
338                 SchemaCustomizer : The default Customizer is the SchemaCustomizer, which shows drop downs for enumerations and boolean attributes,
339                 and String customizer for all other types. So if there is no Property defined for a attribute, it will have
340                 SchemaCustomizer.
341                 BuiltInCustomizer : specifies a way to put already defined customizer to be shown. Examples are part chooser, message chooser etc.
342                 NewCustomizer : provides a way to create a custom customizer specific to the user requirement. When using this the developer has
343                 to implement the SPI org.netbeans.modules.xml.wsdl.ui.spi.WSDLLookupProvider, and add a implementation of
344                 org.netbeans.modules.xml.wsdl.ui.spi.NewCustomizerProvider, which will provide the custom Node.Property to be shown in the
345                 wsdl editor property sheet.
346             </xsd:documentation>
347         </xsd:annotation>
348         <xsd:complexType>
349             <xsd:choice>
350                 <xsd:element name="SchemaCustomizer"/>
351                 <xsd:element name="BuiltInCustomizer">
352                     <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
353                         <xsd:choice>
354                             <xsd:element name="DependsOnCustomizer">
355                                 <xsd:annotation>
356                                     <xsd:documentation xml:lang="en-US">Use a built-in customizer whose value(s) depend on some other attribute
357                                         of the the same element or some other source.
358                                     </xsd:documentation>
359                                 </xsd:annotation>
360                                 <xsd:complexType>
361                                     <xsd:choice>
362                                         <xsd:element name="StaticCustomizer">
363                                             <xsd:annotation>
364                                                 <xsd:documentation xml:lang="en-US">dependsOnAttributeName : the attribute on which the value(s) of the chooser would depend on.
365                                                     For example: some elements may have a attribute for message and another for part, and the PartsChooser should show parts from the message that is selected in the message attribute.
366                                                     In that the dependsOnAttributeName for PartChooser would be message.
367                                                 </xsd:documentation>
368                                             </xsd:annotation>
369                                             <xsd:complexType>
370                                                 <xsd:attribute name="dependsOnAttributeName" type="xsd:QName"/>
371                                             </xsd:complexType>
372                                         </xsd:element>
373                                         <!--No use case as of yet, xsd:element name="DynamicCustomizer">
374                                             <xsd:annotation>
375                                                 <xsd:documentation xml:lang="en-US">
376                                                     
377                                                 </xsd:documentation>
378                                             </xsd:annotation>
379                                             <xsd:complexType>
380                                                 <xsd:attribute name="dependsOnAttributeValueType" type="xsd:string"/>
381                                                 <xsd:attribute name="attributeValueProviderClass" type="xsd:string"/>
382                                             </xsd:complexType>
383                                         </xsd:element-->
384                                     </xsd:choice>
385                                     <xsd:attribute name="name" type="tns:builtInCustomizerTypes"/>
386                                 </xsd:complexType>
387                             </xsd:element>
388                             <xsd:element name="SimpleCustomizer">
389                                 <xsd:annotation>
390                                     <xsd:documentation xml:lang="en-US">
391                                         Use the builtin chooser that are available (the names are defined under builtInCustomizerTypes simple type as enumerations,
392                                         name: specifies which builtin chooser to use.
393                                     </xsd:documentation>
394                                 </xsd:annotation>
395                                 <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
396                                     <xsd:sequence/>
397                                     <xsd:attribute name="name" type="tns:builtInCustomizerTypes"/>
398                                 </xsd:complexType>
399                             </xsd:element>
400                         </xsd:choice>
401                     </xsd:complexType>
402                 </xsd:element>
403                 <xsd:element ref="tns:NewCustomizer"/>
404             </xsd:choice>
405             <xsd:attribute name="attributeName" type="xsd:string" use="required"/>
406             <xsd:attribute name="isNameableAttribute" type="xsd:boolean" default="false"/>
407             <xsd:attribute name="decoratorAttribute" type="xsd:QName"/>
408             <xsd:attribute name="groupName" type="xsd:string"/>
409             <xsd:attribute name="propertyOrder" type="xsd:int"/>
410         </xsd:complexType>
411     </xsd:element>
412     <xsd:element name="GroupedProperty">
413         <xsd:annotation>
414             <xsd:documentation xml:lang="en-US">Some attributes in a element are mutually exclusive, so in the UI, for unambiguous usage, the user may want to add a single property chooser for 2 or more attributes, which will set the appropriate attribute depending on some criteria that the customizer may determine.
415                 groupedAttributeNames : specify all the mutually exclusive attributes. There will be a single customizer for all these attributes.
416                 groupName : specifies which PropertyGroup this belongs to.
417                 propertyOrder : specifies the order in the PropertyGroup where this property would be placed.
418                 displayName: specifies the Display name of the combined chooser.
419             </xsd:documentation>
420         </xsd:annotation>
421         <xsd:complexType>
422             <xsd:choice>
423                 <xsd:element name="BuiltInCustomizer" >
424                     <xsd:annotation>
425                         <xsd:documentation xml:lang="en-US">To use pre-built customizers.
426                         </xsd:documentation>
427                     </xsd:annotation>
428                     <xsd:complexType>
429                         <xsd:choice>
430                             <xsd:element name="ElementOrTypeChooser">
431                                 <xsd:annotation>
432                                     <xsd:documentation xml:lang="en-US">Shows a Tree based selector, which shows all the elements/types from Inline/Imported schemas.
433                                         elementAttributeName : the attribute on which GlobalElement data type would be set.
434                                         typeAttributeName : the attribute on which GlobalType data type would be set.
435                                     </xsd:documentation>
436                                 </xsd:annotation>
437                                 <xsd:complexType>
438                                     <xsd:attribute name="elementAttributeName" type="xsd:NCName"/>
439                                     <xsd:attribute name="typeAttributeName" type="xsd:NCName"/>
440                                 </xsd:complexType>
441                             </xsd:element>
442                             <xsd:element name="ElementOrTypeOrMessagePartChooser">
443                                 <xsd:annotation>
444                                     <xsd:documentation xml:lang="en-US">Shows a Tree based selector, which shows all the elements/types from Inline/Imported schemas and also the messages from all imported and existing wsdls.
445                                         elementAttributeName : the attribute on which GlobalElement data type would be set.
446                                         typeAttributeName : the attribute on which GlobalType data type would be set.
447                                         messageAttributeName : the attribute on which Message data type would be set.
448                                         partAttributeName : the attribute on which part would be set.
449                                         This chooser can select between a GlobalElement or GlobalType or a wsdl Part.
450                                         
451                                     </xsd:documentation>
452                                 </xsd:annotation>
453                                 <xsd:complexType>
454                                     <xsd:attribute name="elementAttributeName" type="xsd:NCName"/>
455                                     <xsd:attribute name="typeAttributeName" type="xsd:NCName"/>
456                                     <xsd:attribute name="messageAttributeName" type="xsd:NCName"/>
457                                     <xsd:attribute name="partAttributeName" type="xsd:NCName"/>
458                                 </xsd:complexType>
459                             </xsd:element>
460                         </xsd:choice>
461                     </xsd:complexType>
462                 </xsd:element>
463                 <xsd:element ref="tns:NewCustomizer"/>
464             </xsd:choice>
465             <xsd:attribute name="groupedAttributeNames" type="tns:attributeList" use="required"/>
466             <xsd:attribute name="groupName" type="xsd:string"/>
467             <xsd:attribute name="propertyOrder" type="xsd:int"/>
468             <xsd:attribute name="displayName" type="xsd:NCName" use="required"/>
469         </xsd:complexType>
470     </xsd:element>
471     
472     
473     <xsd:element name="NewCustomizer">
474         <xsd:annotation>
475             <xsd:documentation xml:lang="en-US">Provides a way for developer to provide a custom property customizer for the attribute, if the builtin chooser dont satisfy their requirements.
476 When using this the developer has to implement the SPI org.netbeans.modules.xml.wsdl.ui.spi.WSDLLookupProvider, and add a implementation of org.netbeans.modules.xml.wsdl.ui.spi.NewCustomizerProvider, which will provide the custom Node.Property to be shown in the wsdl editor property sheet.
477             </xsd:documentation>
478         </xsd:annotation>
479     </xsd:element>
480     
481     
482     <xsd:simpleType name="builtInCustomizerTypes">
483         <xsd:restriction base="xsd:string">
484             <xsd:enumeration value="MessageChooser">
485                 <xsd:annotation>
486                     <xsd:documentation xml:lang="en-US">Shows a drop down of all messages in the current WSDL document and also ones in imported WSDL documents.</xsd:documentation>
487                 </xsd:annotation>
488             </xsd:enumeration>
489             <xsd:enumeration value="PartChooser">
490                 <xsd:annotation>
491                     <xsd:documentation xml:lang="en-US">Show a drop down of all parts for a message. By default, the chooser assumes that it is in the binding section under input/output/fault, and shows all the parts for the message selected in the input/output/fault.
492     If not, then the dependsOnCustomizer needs to be used to specify the attribute which represents the message, whose parts will be shown</xsd:documentation>
493                 </xsd:annotation>
494             </xsd:enumeration>
495             <xsd:enumeration value="PortTypeChooser">
496                 <xsd:annotation>
497                     <xsd:documentation xml:lang="en-US">Show a drop down of all port types in the WSDL Document/Imported WSDL Documents.</xsd:documentation>
498                 </xsd:annotation>
499             </xsd:enumeration>
500             <xsd:enumeration value="PartsChooser">
501                 <xsd:annotation>
502                     <xsd:documentation xml:lang="en-US">Show a dialog of all parts for a message, from which multiple parts can be selected. By default, the chooser assumes that it is in the binding section under input/output/fault, and shows all the parts for the message selected in the input/output/fault.
503     If not, then the dependsOnCustomizer needs to be used to specify the attribute which represents the message, whose parts will be shown</xsd:documentation>
504                 </xsd:annotation>
505             </xsd:enumeration>
506         </xsd:restriction>
507     </xsd:simpleType>
508     
509     <xsd:simpleType name="attributeList">
510         <xsd:list itemType="xsd:string"/>
511     </xsd:simpleType>
512     
513 </xsd:schema>
514
515 */

516
Popular Tags