我一直在使用xjc将XML编译成带注释的java类,以便使用jaxb生成xml文件。
我如何对Schematron进行同样的操作?
更新:更确切地说: java类不需要验证所有模式规则,只有与模式相关的部分,即可以表示为XSD的schematron的部分。
这是我想编译的特定模式:https://github.com/OpenPEPPOL/peppol-bis-invoice-3/blob/master/rules/sch/PEPPOL-EN16931-UBL.sch
其目的是生成PEPPOL、BIS账单、3.0发票和信用卡。其他意见也欢迎。
发布于 2022-06-20 12:26:55
Schematron不是模式定义,就像使用XJC时的XSD一样。不可能使用XJC从Schematron生成Java类。
发布于 2022-06-20 20:26:06
XSD是一种能够验证XML结构的语法。Schematron是帮助(而不是排他的)在数据上而不是在结构上验证业务规则的规则。
如果我与JAXB生成的类并行,XSD能够验证每个invoice.vat < invoice.totalAmount节点是否适合一个类属性;Schematron验证该类属性。因此Schematron规则通常添加到结构语法中(XSD、RelaxNG、DTD)。您可以在JAXB类上定义一些与您的模式规则相匹配的rules ()方法。
我还记得一个项目(15年前),该项目将一些Schematron规则包含到Xsd语法中,并帮助由此生成验证方法。但是生成的代码并不十分精确,而且大多数XPath表达式都不能转换为java。
那是基于https://github.com/NIEM/Schematron-in-XSD-Spec的,但我找不到。
如果必须实现这一点,我将查看https://phax.github.io/ph-schematron/,并将围绕JAXB类生成一个代理,该代理将根据Schematron规则进行验证。
向克利斯朵夫问好
https://stackoverflow.com/questions/72655759
复制相似问题