xsd输入选项

时间:2012-03-24 07:54:57

标签: xml xsd etl xsd-validation

我有两个与xml文档及其相关的xsd相关的相反要求。

背景是我需要从关系数据库中提取数据,将提取的数据转换为xml,然后将此xml加载到第二个“远程”数据库中。

相反的要求是这些

首先,我想创建/定义xml文档及其模式,以便永远不必修改它。因为我从关系数据库中提取数据,我正在考虑使用xml结构,例如这个

<data name="aaa" value="bbb" type="ccc" scale="ddd"/>

其中名称和值是强制性的,类型和比例(例如小数)是可选的,后两个仅在“必要时”使用

其次我需要一个强类型的xsd。这是为了确保加载的xml文档的使用者不会得到任何“令人讨厌的惊喜”。并且它们可以生成强类型的java对象以将xml文档解组为。

我可以使用上面显示的xml结构并强制键入xsd吗?

是否可以在一个中解决这两个要求? 这是: - 一个非常灵活的xml结构,可以应对未来的任何“未知”数据要求以及极其强大的数据类型?

什么是最好的妥协解决方案?

2 个答案:

答案 0 :(得分:2)

我仍然不清楚你的要求:
这里我介绍了XSD的一些功能。

对于自由主义者,有一些选择,如
1)XSD:允许任何元素和anyAttribute的任何元素允许特定节点的任何属性 2)对于属性minOccurs='0',您可以使用use='Optional'使元素可选 3)将数据类型声明为字符串将允许它为null。如果它的日期/日期时间然后定义一个带有模式MM / DD / YYYY等的simpleType,并将其用作TYPE,那么您也可以允许空数据。 (空白标签)
4)<xsd:All/>代替<xsd:sequence/>的使用允许您以任何顺序拥有元素。

严格要求 1)对于必须的标记使用minOccurs ='1'。默认情况下,除非您声明,否则每个元素都将具有minOccurs ='1'。
2)使用minLength ='1'强制标记具有值,以使其不为空
如果我闪现任何内容,我会列出更多:)

答案 1 :(得分:0)

希望这是一个明显的例子: -

我有大约5000万用户。 每个用户可以拥有数百个相关数据项,目前约有500个数据项。其中大多数是可选的。

我必须从一个数据库中提取这些数据项并加载到第二个远程数据库中。

随着时间的推移,其他用户数据项将添加到此提取和加载过程中。 我希望这个添加额外用户数据项的过程是精简的。例如快速便宜,易于测试, 易于部署到生产

我决定将这数百个数据项转换为一个完整的xml文档,每个用户一个xml文档, 使用原始问题中显示的格式。

此xml格式可以处理任何新的用户数据项,而无需更改。 这意味着添加新数据项时,我不必担心部署新版本的xsd。

但是我也希望进行强类型数据验证。我不相信上面显示的xml格式 可以与强类型的xsd一起使用。

我不需要坚持使用XML,JSON格式也可以满足我对具有可以应对的结构的要求 添加数据项,但我不知道如何以与使用xsd相同的方式验证JSON 验证其相关的XML文档。