jaxb のほぼ初心者で、xjc (jdk 8) を使用して PLMXMLSchema.xsd を Java クラスにバインドしようとしています。
これはスキーマの抜粋です
<xsd:complexType name="ProductType">
<xsd:annotation>
<xsd:documentation>
This is the revision-independent Product, derived from Structure.
It corresponds to the STEP 'product'.
Attributes:
productId: The identifier of the Product, unique in some context, e.g. an
Organisation.
alternateForRef: An 'alternate' Product is one which is substitutable, in all
contexts, for a particular Product. If this is an 'alternate'
Product, then this attribute references the Product for which
this is an alternate.
unitRef: The default Unit for the 'quantity' attribute of any referencing
ProductInstance elements.
designRequired: true if all the revisions of this Product must have
at least one associated DesignRevision
source: whether the Product is manufactured or bought-in
vendorRef: References the Vendor when the Product represents a
vendor part.
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="plm:StructureBase">
<xsd:attribute name="productId" type="xsd:string" use="optional"/>
<xsd:attribute name="alternateForRef" type="plm:anyURIType" use="optional" plm:refType="plm:Product"/>
<xsd:attribute name="unitRef" type="plm:anyURIType" use="optional" plm:refType="plm:Unit"/>
<xsd:attribute name="designRequired" type="xsd:boolean" default="true"/>
<xsd:attribute name="source" type="plm:ProductSourceEnum" use="optional"/>
<xsd:attribute name="vendorRef" type="plm:anyURIType" use="optional" plm:refType="plm:Vendor"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Product" type="plm:ProductType" substitutionGroup="plm:Structure"/>
最初のポイント
xjc コンパイラがクラスをビルドしますProductType.java
が、私はそれを好みProduct.java
ます。これは一例にすぎません。スキーマでは一貫して「FooType」という命名規則に「Type」サフィックスを付けて使用しているため、私は削除したいと考えています。ここで提案されているように「単純な」バインディングを使用するhttps://stackoverflow.com/a/4818344/2668213効果がないようです..
2 点目
スキーマ内の属性
<xsd:attribute name="alternateForRef" type="plm:anyURIType" use="optional" plm:refType="plm:Product"/>
に翻訳されます
@XmlAttribute(name = "alternateForRef")
protected String alternateForRef;
しかし、私は大いに好むだろう
@XmlAttribute(name = "alternateForRef")
@XmlIDREF
protected Product alternateForRef;
このパターンは、一部の属性がplm:refType
クラスへの idref であるスキーマに一貫して適用されます。したがって、これらすべてのケースに一度に対処するための (外部バインディング?) ソリューションがあることを願っています。