| // |
| // Copyright (c) 2020 Contributors to the Eclipse Foundation |
| // |
| |
| [appendix] |
| == Normative Binding Schema Syntax |
| |
| === XML Binding Schema |
| |
| Online version of XML Binding Schema is available at `https://jakarta.ee/xml/ns/jaxb/bindingschema_3_0.xsd`. |
| |
| [source,xml] |
| ---- |
| <xs:schema |
| targetNamespace = "https://jakarta.ee/xml/ns/jaxb" |
| xmlns:jaxb = "https://jakarta.ee/xml/ns/jaxb" |
| xmlns:xs = "http://www.w3.org/2001/XMLSchema" |
| elementFormDefault = "qualified" |
| attributeFormDefault = "unqualified"> |
| <xs:annotation> |
| <xs:documentation> |
| This is the XML Schema for the Jakarta XML Binding binding |
| customization descriptor. |
| All binding customization descriptors must indicate |
| the descriptor schema by using the Jakarta XML Binding namespace: |
| |
| https://jakarta.ee/xml/ns/jaxb |
| |
| and by indicating the version of the schema by |
| using the version element as shown below: |
| |
| <bindings xmlns="https://jakarta.ee/xml/ns/jaxb" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="https://jakarta.ee/xml/ns/jaxb |
| https://jakarta.ee/xml/ns/jaxb/bindingschema_3_0.xsd" |
| version="3.0"> |
| ... |
| </bindings> |
| |
| The instance documents may indicate the published version of |
| the schema using the xsi:schemaLocation attribute for Jakarta XML Binding |
| namespace with the following location: |
| |
| https://jakarta.ee/xml/ns/jaxb/bindingschema_3_0.xsd |
| </xs:documentation> |
| </xs:annotation> |
| <xs:group name = "declaration"> |
| <xs:annotation> |
| <xs:documentation> |
| Model group that represents a binding declaration. Each new binding |
| declaration added to the jaxb namespace that is not restricted to |
| globalBindings should be added as a child element to this model group. |
| </xs:documentation> |
| </xs:annotation> |
| <xs:choice> |
| <xs:element ref = "jaxb:globalBindings"/> |
| <xs:element ref = "jaxb:schemaBindings"/> |
| <xs:element ref = "jaxb:class"/> |
| <xs:element ref = "jaxb:property"/> |
| <xs:element ref = "jaxb:typesafeEnumClass"/> |
| <xs:element ref = "jaxb:typesafeEnumMember"/> |
| <xs:element ref = "jaxb:javaType"/> |
| <xs:element ref = "jaxb:dom"/> |
| <xs:element ref = "jaxb:inlineBinaryData"/> |
| <xs:any namespace = "##other" processContents = "lax"/> |
| </xs:choice> |
| </xs:group> |
| <xs:attribute name = "version" type="xs:token" > |
| <xs:annotation> |
| <xs:documentation> |
| Used to specify the version of the binding schema on the schema element for |
| inline annotations or jaxb:bindings for external binding. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attributeGroup name = "propertyAttributes"> |
| <xs:annotation><xs:documentation> |
| Attributes used for property customization. The attribute group can be |
| referenced either from the globalBindings declaration or from the |
| property declaration. The following defaults are defined by the JAXB |
| specification in global scope only. Thus they apply when the |
| propertyAttributes group is referenced from the globalBindings declaration |
| but not when referenced from the property declaration. |
| collectionType a class that implements java.util.List. |
| fixedAttributeAsConstantProperty false |
| enableFailFastCheck false |
| generateIsSetMethod false |
| optionalProperty wrapper |
| generateElementProperty false |
| attachmentRef default |
| </xs:documentation></xs:annotation> |
| <xs:attribute name = "collectionType" type="jaxb:referenceCollectionType"/> |
| <xs:attribute name = "fixedAttributeAsConstantProperty" type = "xs:boolean"/> |
| <xs:attribute name = "enableFailFastCheck" type = "xs:boolean"/> |
| <xs:attribute name = "generateIsSetMethod" type = "xs:boolean"/> |
| <xs:attribute name = "optionalProperty"> |
| <xs:simpleType> |
| <xs:restriction base="xs:NCName"> |
| <xs:enumeration value="wrapper"/> |
| <xs:enumeration value="primitive"/> |
| <xs:enumeration value="isSet"/> |
| </xs:restriction> |
| </xs:simpleType> |
| </xs:attribute> |
| <xs:attribute name = "generateElementProperty" type="xs:boolean"/> |
| <xs:attribute name = "attachmentRef"> |
| <xs:simpleType> |
| <xs:restriction base="xs:NCName"> |
| <xs:enumeration value="resolve"/> |
| <xs:enumeration value="doNotResolve"/> |
| <xs:enumeration value="default"/> |
| </xs:restriction> |
| </xs:simpleType> |
| </xs:attribute> |
| </xs:attributeGroup> |
| <xs:attributeGroup name = "XMLNameToJavaIdMappingDefaults"> |
| <xs:annotation> |
| <xs:documentation>Customize XMLNames to Java id mapping |
| </xs:documentation> |
| </xs:annotation> |
| <xs:attribute name = "underscoreBinding" default = "asWordSeparator" type = "jaxb:underscoreBindingType"/> |
| </xs:attributeGroup> |
| <xs:attributeGroup name = "typesafeEnumClassDefaults"> |
| <xs:attribute name = "typesafeEnumMemberName" default = "skipGeneration" type = "jaxb:typesafeEnumMemberNameType"/> |
| <xs:attribute name = "typesafeEnumBase" default = "xs:string" type = "jaxb:typesafeEnumBaseType"/> |
| <xs:attribute name = "typesafeEnumMaxMembers" type="xs:int" default="256"/> |
| </xs:attributeGroup> |
| <xs:element name = "globalBindings"> |
| <xs:annotation> |
| <xs:documentation>Customization values defined in global scope.</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:sequence minOccurs = "0"> |
| <xs:element ref = "jaxb:javaType" minOccurs = "0" maxOccurs = "unbounded"/> |
| <xs:element ref = "jaxb:serializable" minOccurs = "0"/> |
| <xs:any namespace = "##other" processContents = "lax"> |
| <xs:annotation> |
| <xs:documentation>allows extension binding declarations to be specified.</xs:documentation> |
| </xs:annotation> |
| </xs:any> |
| </xs:sequence> |
| <xs:attributeGroup ref = "jaxb:XMLNameToJavaIdMappingDefaults"/> |
| <xs:attributeGroup ref = "jaxb:typesafeEnumClassDefaults"/> |
| <xs:attributeGroup ref = "jaxb:propertyAttributes"/> |
| <xs:attribute name="generateValueClass" type="xs:boolean" |
| default= "true"/> |
| <xs:attribute name="generateElementClass" type="xs:boolean" |
| default= "false"/> |
| <xs:attribute name="mapSimpleTypeDef" type="xs:boolean" |
| default= "false"/> |
| <xs:attribute name="localScoping" default= "nested"> |
| <xs:simpleType> |
| <xs:restriction base="xs:NCName"> |
| <xs:enumeration value="nested"/> |
| <xs:enumeration value="toplevel"/> |
| </xs:restriction> |
| </xs:simpleType> |
| </xs:attribute> |
| <xs:attribute name = "enableJavaNamingConventions" default = "true" type = "xs:boolean"/> |
| <xs:attribute name = "choiceContentProperty" default = "false" type = "xs:boolean"/> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name = "schemaBindings"> |
| <xs:annotation> |
| <xs:documentation>Customization values with schema scope</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:all> |
| <xs:element name = "package" type = "jaxb:packageType" minOccurs = "0"/> |
| <xs:element name = "nameXmlTransform" type = "jaxb:nameXmlTransformType" minOccurs = "0"/> |
| </xs:all> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name = "class"> |
| <xs:annotation> |
| <xs:documentation>Customize interface and implementation class.</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/> |
| </xs:sequence> |
| <xs:attribute name = "name" type = "jaxb:javaIdentifierType"> |
| <xs:annotation> |
| <xs:documentation>Java class name without package prefix.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name = "implClass" type = "jaxb:javaIdentifierType"> |
| <xs:annotation> |
| <xs:documentation>Implementation class name including package prefix.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name="generateValueClass" type="xs:boolean"> |
| <xs:annotation> |
| <xs:documentation>Default value derived from [jaxb:globalBindings]@generateValueClass.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name = "property"> |
| <xs:annotation> |
| <xs:documentation>Customize property.</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:all> |
| <xs:element name = "javadoc" type = "xs:string" minOccurs="0"/> |
| <xs:element name = "baseType" type="jaxb:propertyBaseType" minOccurs="0"/> |
| </xs:all> |
| <xs:attribute name = "name" type = "jaxb:javaIdentifierType"/> |
| <xs:attributeGroup ref = "jaxb:propertyAttributes"/> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name = "javaType"> |
| <xs:annotation> |
| <xs:documentation>Data type conversions; overriding builtins</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:attribute name = "name" use = "required" type = "jaxb:javaIdentifierType"> |
| <xs:annotation> |
| <xs:documentation>name of the java type to which xml type is to be bound.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name = "xmlType" type = "xs:QName"> |
| <xs:annotation> |
| <xs:documentation> xml type to which java datatype has to be bound.Must be present when javaType is scoped to globalBindings</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name = "parseMethod" type = "jaxb:javaIdentifierType"/> |
| <xs:attribute name = "printMethod" type = "jaxb:javaIdentifierType"/> |
| <xs:attribute name = "hasNsContext" default = "false" type = "xs:boolean" > |
| <xs:annotation> |
| <xs:documentation> |
| If true, the parsMethod and printMethod must reference a method |
| signtature that has a second parameter of type NamespaceContext. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name = "typesafeEnumClass"> |
| <xs:annotation> |
| <xs:documentation> Bind to a type safe enumeration class.</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/> |
| <xs:element ref = "jaxb:typesafeEnumMember" minOccurs = "0" maxOccurs = "unbounded"/> |
| </xs:sequence> |
| <xs:attribute name = "name" type = "jaxb:javaIdentifierType"/> |
| <xs:attribute name = "map" type = "xs:boolean" default = "true"/> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name = "typesafeEnumMember"> |
| <xs:annotation> |
| <xs:documentation> Enumeration member name in a type safe enumeration class.</xs:documentation> |
| </xs:annotation> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/> |
| </xs:sequence> |
| <xs:attribute name = "value" type="xs:anySimpleType"/> |
| <xs:attribute name = "name" use = "required" type = "jaxb:javaIdentifierType"/> |
| </xs:complexType> |
| </xs:element> |
| |
| <!-- TYPE DEFINITIONS --> |
| |
| <xs:complexType name = "propertyBaseType"> |
| <xs:all> |
| <xs:element ref = "jaxb:javaType" minOccurs = "0"/> |
| </xs:all> |
| <xs:attribute name = "name" type = "jaxb:javaIdentifierType"> |
| <xs:annotation> |
| <xs:documentation> |
| The name attribute for [baseType] enables more precise control over the actual base type for a JAXB property. This customization enables specifying a more general base type than the property's default base type. The name attribute value must be a fully qualified Java class name. Additionally, this Java class must be a super interface/class of the default Java base type for the property. When the default base type is a primitive type, consider the default Java base type to be the Java wrapper class of that primitive type.This customization is useful to enable simple type substitution for a JAXB property representing with too restrictive of a default base type. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| </xs:complexType> |
| |
| <xs:complexType name = "packageType"> |
| <xs:sequence> |
| <xs:element name = "javadoc" type = "xs:string" minOccurs = "0"/> |
| </xs:sequence> |
| <xs:attribute name = "name" type = "jaxb:javaIdentifierType"/> |
| </xs:complexType> |
| <xs:simpleType name = "underscoreBindingType"> |
| <xs:annotation> |
| <xs:documentation>Treate underscore in XML Name to Java identifier mapping.</xs:documentation> |
| </xs:annotation> |
| <xs:restriction base = "xs:string"> |
| <xs:enumeration value = "asWordSeparator"/> |
| <xs:enumeration value = "asCharInWord"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <xs:simpleType name = "typesafeEnumBaseType"> |
| <xs:annotation> |
| <xs:documentation> |
| XML types or types derived from them which have enumeration facet(s) |
| which are be mapped to typesafeEnumClass by default. |
| The following types cannot be specified in this list: |
| "xsd:QName", "xsd:base64Binary", "xsd:hexBinary", |
| "xsd:date", "xsd:time", "xsd:dateTime", "xsd:duration", |
| "xsd:gDay", "xsd:gMonth", "xsd:Year", "xsd:gMonthDay", "xsd:YearMonth" |
| </xs:documentation> |
| </xs:annotation> |
| <xs:list itemType = "xs:QName"/> |
| </xs:simpleType> |
| <xs:simpleType name = "typesafeEnumMemberNameType"> |
| <xs:annotation> |
| <xs:documentation>Used to customize how to handle name collisions.</xs:documentation> |
| </xs:annotation> |
| <xs:restriction base = "xs:string"> |
| <xs:enumeration value = "generateName"/> |
| <xs:enumeration value = "generateError"/> |
| <xs:enumeration value = "skipGeneration"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <xs:simpleType name = "javaIdentifierType"> |
| <xs:annotation> |
| <xs:documentation>Placeholder type to indicate Legal Java identifier.</xs:documentation> |
| </xs:annotation> |
| <xs:list itemType = "xs:NCName"/> |
| </xs:simpleType> |
| <xs:complexType name = "nameXmlTransformRule"> |
| <xs:annotation> |
| <xs:documentation>Rule to transform an Xml name into another Xml name</xs:documentation> |
| </xs:annotation> |
| <xs:attribute name = "prefix" type = "xs:string"> |
| <xs:annotation> |
| <xs:documentation>prepend the string to QName.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name = "suffix" type = "xs:string"> |
| <xs:annotation> |
| <xs:documentation>Append the string to QName.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| </xs:complexType> |
| <xs:complexType name = "nameXmlTransformType"> |
| <xs:annotation> |
| <xs:documentation>Allows transforming an xml name into another xml name. Use case UDDI 2.0 schema.</xs:documentation> |
| </xs:annotation> |
| <xs:all> |
| <xs:element name = "typeName" type = "jaxb:nameXmlTransformRule" minOccurs = "0"> |
| <xs:annotation> |
| <xs:documentation>Mapping rule for type definitions.</xs:documentation> |
| </xs:annotation> |
| </xs:element> |
| <xs:element name = "elementName" type = "jaxb:nameXmlTransformRule" minOccurs = "0"> |
| <xs:annotation> |
| <xs:documentation>Mapping rule for elements</xs:documentation> |
| </xs:annotation> |
| </xs:element> |
| <xs:element name = "modelGroupName" type = "jaxb:nameXmlTransformRule" minOccurs = "0"> |
| <xs:annotation> |
| <xs:documentation>Mapping rule for model group</xs:documentation> |
| </xs:annotation> |
| </xs:element> |
| <xs:element name = "anonymousTypeName" type = "jaxb:nameXmlTransformRule" minOccurs = "0"> |
| <xs:annotation> |
| <xs:documentation>Mapping rule for class names generated for an anonymous type.</xs:documentation> |
| </xs:annotation> |
| </xs:element> |
| </xs:all> |
| </xs:complexType> |
| <xs:attribute name = "extensionBindingPrefixes"> |
| <xs:annotation> |
| <xs:documentation> |
| A binding compiler only processes this attribute when it occurs on an |
| an instance of xs:schema element. The value of this attribute is a |
| whitespace-separated list of namespace prefixes. The namespace bound |
| to each of the prefixes is designated as a customization declaration |
| namespace. |
| </xs:documentation> |
| </xs:annotation> |
| <xs:simpleType> |
| <xs:list itemType = "xs:normalizedString"/> |
| </xs:simpleType> |
| </xs:attribute> |
| <xs:element name = "bindings"> |
| <xs:annotation> |
| <xs:documentation> |
| Binding declaration(s) for a remote schema. |
| If attribute node is set, the binding declaraions |
| are associated with part of the remote schema |
| designated by schemaLocation attribute. The node |
| attribute identifies the node in the remote schema |
| to associate the binding declaration(s) with. |
| </xs:documentation> |
| </xs:annotation> |
| <!-- a <bindings> element can contain arbitrary number of binding declarations or nested <bindings> elements --> |
| <xs:complexType> |
| <xs:sequence> |
| <xs:choice minOccurs = "0" maxOccurs = "unbounded"> |
| <xs:group ref = "jaxb:declaration"/> |
| <xs:element ref = "jaxb:bindings"/> |
| </xs:choice> |
| </xs:sequence> |
| <xs:attribute name = "schemaLocation" type = "xs:anyURI"> |
| <xs:annotation> |
| <xs:documentation> |
| Location of the remote schema to associate binding declarations with. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name = "node" type = "xs:string"> |
| <xs:annotation> |
| <xs:documentation> |
| The value of the string is an XPATH 1.0 compliant string that |
| resolves to a node in a remote schema to associate |
| binding declarations with. The remote schema is specified |
| by the schemaLocation attribute occuring in the current |
| element or in a parent of this element. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute name = "version" type = "xs:token"> |
| <xs:annotation> |
| <xs:documentation> |
| Used to indicate the version of binding declarations. Only valid on root level bindings element. |
| Either this or "jaxb:version" attribute but not both may be specified. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| <xs:attribute ref = "jaxb:version"> |
| <xs:annotation> |
| <xs:documentation> |
| Used to indicate the version of binding declarations. Only valid on root level bindings element. |
| Either this attribute or "version" attribute but not both may be specified. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| </xs:complexType> |
| </xs:element> |
| <xs:simpleType name="referenceCollectionType"> |
| <xs:union> |
| <xs:simpleType> |
| <xs:restriction base="xs:string"> |
| <xs:enumeration value="indexed"/> |
| </xs:restriction> |
| </xs:simpleType> |
| <xs:simpleType> |
| <xs:restriction base="jaxb:javaIdentifierType"/> |
| </xs:simpleType> |
| </xs:union> |
| </xs:simpleType> |
| <xs:element name="dom"> |
| <xs:complexType> |
| <xs:attribute name = "type" type="xs:NCName" default="w3c"> |
| <xs:annotation> |
| <xs:documentation>Specify DOM API to bind to JAXB property to.</xs:documentation> |
| </xs:annotation> |
| </xs:attribute> |
| </xs:complexType> |
| </xs:element> |
| <xs:element name="inlineBinaryData"> |
| <xs:annotation> |
| <xs:documentation> |
| Disable MTOM/XOP encoding for this binary data. Annotation can be placed on a type definition that |
| derives from a W3C XSD binary data type or on an element that has a type that is |
| or derives from a W3C XSD binary data type. |
| </xs:documentation> |
| </xs:annotation> |
| </xs:element> |
| <xs:element name = "serializable"> |
| <xs:complexType> |
| <xs:attribute name="uid" type="xs:long" default="1"/> |
| </xs:complexType> |
| </xs:element> |
| </xs:schema> |
| ---- |