- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个元模型来存储技术测量,以便在使用 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
的更多类型(如 VectorType
、 MatrixType
、 ValueType
)并声明全局元素scalar
, vector
, matrix
与 substitutionGroup="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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!