gpt4 book ai didi

java - 从元模型中消除可选字段

转载 作者:行者123 更新时间:2023-12-02 02:18:10 25 4
gpt4 key购买 nike

我创建了一个元模型来存储技术测量,以便在使用 JAXB 解析它们后在 Java 中对其进行管理。

我想支持标量(角度、长度、温度等)和 vector (如方向)。

作为奖励,我还想支持矩阵(也许用于旋转)。下面是一个示例模型。

<measure name="X">
<properties>
<property name="description" value="length"/>
<property name="unit" value="mm"/>
<property name="tolerance" value="1"/>
</properties>

<scalar>150.157</scalar>
<vector/>
<matrix/>
</measure>

我不喜欢当前的方法,在这种方法中,我为三种可能的值类型提供了三个可选条目。

是否有更好、统一的方法,无需使用也易于解析的可选字段?

最佳答案

其中一种方法是使用替换组。您声明一个全局元素,例如 value ,其中一些ValueType并在需要的地方引用它。

然后添加扩展 ScalarType 的更多类型(如 VectorTypeMatrixTypeValueType )并声明全局元素scalar , vector , matrixsubstitutionGroup="tns:value" 。这意味着这些元素可能会取代 value .

在您的 MeasureType 中您只需包含 <xs:element ref="value"/>这将允许 scalar , vector , matrix而是出现。

XJC 可以编译这种模式,而 JAXB 可以很好地处理替换组。您ll get a JAXBElement`类型的属性。

这是一个example of schema它使用这种方法:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.opengis.net/ogc"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
version="1.1.3">
<!--
filter is an OGC Standard.
Copyright (c) 2002,2003,2004,2010 Open Geospatial Consortium.
To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .

Updated: 2012-07-21
-->
<xsd:element name="Add" type="ogc:BinaryOperatorType"
substitutionGroup="ogc:expression"/>
<xsd:element name="Sub" type="ogc:BinaryOperatorType"
substitutionGroup="ogc:expression"/>
<xsd:element name="Mul" type="ogc:BinaryOperatorType"
substitutionGroup="ogc:expression"/>
<xsd:element name="Div" type="ogc:BinaryOperatorType"
substitutionGroup="ogc:expression"/>
<xsd:element name="PropertyName" type="ogc:PropertyNameType"
substitutionGroup="ogc:expression"/>
<xsd:element name="Function" type="ogc:FunctionType"
substitutionGroup="ogc:expression"/>
<xsd:element name="Literal" type="ogc:LiteralType"
substitutionGroup="ogc:expression"/>
<xsd:element name="expression" type="ogc:ExpressionType" abstract="true"/>
<!-- <xsd:complexType name="ExpressionType" abstract="true" mixed="true"/>
-->
<xsd:complexType name="ExpressionType" abstract="true"/>
<xsd:complexType name="BinaryOperatorType">
<xsd:complexContent>
<xsd:extension base="ogc:ExpressionType">
<xsd:sequence>
<xsd:element ref="ogc:expression" minOccurs="2" maxOccurs="2"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="FunctionType">
<xsd:complexContent>
<xsd:extension base="ogc:ExpressionType">
<xsd:sequence>
<xsd:element ref="ogc:expression" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="LiteralType">
<xsd:complexContent mixed="true">
<xsd:extension base="ogc:ExpressionType">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="PropertyNameType">
<xsd:complexContent mixed="true">
<xsd:extension base="ogc:ExpressionType"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>

关于java - 从元模型中消除可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com