我的架构中的 dcy = (Second.Bottom + Second.Top) - (First.Bottom + First.Top)
if dcy >=0 then
shift Second.Top by (First.Bottom - Second.Top) //down
else
shift Second.Top by -(Second.Bottom - First.Top) //up
dcx = (Second.Left + Second.Right) - (First.Left + First.Right)
if dcx >=0 then
shift Second.Left by (First.Right - Second.Left) //right
else
shift Second.Left by -(Second.Right - First.Left) //left
约束定义了少数元素的主键和外键。
虽然架构不会引发任何错误。
虽然未添加生成java类xsd:unique
。
xsd:unique
答案 0 :(得分:1)
JAXB不会强制执行验证规则。
要强制执行验证规则,您需要在解析 XML时指定XSD架构。
假设您要求Unmarshaller
为您解析XML,例如你没有解组DOM节点,你这样做:
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile); // file or URL
JAXBContext jaxbContext = JAXBContext.newInstance();
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(handler); // To specify how validation errors should be handled
Object obj = unmarshaller.unmarshal(source);
这在Unmarshaller
:
验证和良好形成
客户端应用程序可以通过
setSchema(javax.xml.validation.Schema)
API启用或禁用JAXP 1.3验证机制。复杂的客户端可以指定自己的验证SAX 2.0兼容解析器,并使用unmarshal(Source)
API绕过JAXP 1.3验证机制。由于在JAXB 2.0中定义了解组无效XML内容,因此Unmarshaller默认验证事件处理程序比JAXB 1.0更宽松。当JAXB 1.0绑定编译器生成的模式派生代码向
JAXBContext
注册时,默认的unmarshal验证处理程序为DefaultValidationEventHandler
,并在遇到致命错误或错误后终止编组操作。对于JAXB 2.0客户端应用程序,没有显式定义的默认验证处理程序,默认事件处理仅在遇到致命错误后终止解组操作。