我有一些描述每个设备设置的非结构化数据。对于例如对于设备1:
<ChartSetting xmlns="ChartSetting1">
<ChartSizeX>132.6</ChartSizeX>
<ChartSizeY>132.6</ChartSizeY>
<ChartType>Native</ChartType>
<BarSizeX>90</BarSizeX>
<BarSizeY>6</BarSizeY>
<DistToBar>34.8</DistToBar>
<DistToFirstLineY>17.5</DistToFirstLineY>
<MarkerDistance>120</MarkerDistance>
<DistToFirstField>18.5</DistToFirstField>
<PatchSizeX>7.5</PatchSizeX>
<PatchSizeY>9</PatchSizeY>
</ChartSetting>
然而,对于设备2设置不同
<ChartSetting xmlns="ChartSetting2">
<PatchGap>1</PatchGap>
<PatchSize>5</PatchSize>
</ChartSetting>
xml数据不用于查询目的,它将被传递给.net应用程序,最终将其发送到devicedriver(通过C ++代码) 我们只有四种类型的设备。因此,不同设置的可能性是有限的。
这种数据可以存储为符合某种模式的类型化XML吗?如果存储了无效设置,则存储为varchar将是噩梦。
我知道xml架构集合可以有多个架构,但它只能确认一个架构。
有没有简单的方法来创建架构?
我应该使用无类型XML吗?
答案 0 :(得分:2)
您可以为四种不同的设备类型创建DTD并使用这些DTD验证XML片段,但我建议您在SQL Server外部进行处理。
如果您不打算查询XML,则没有任何理由将其存储为XML数据类型。
您的问题的答案:
答案 1 :(得分:0)
答案 2 :(得分:0)
1.我认为,如果您的架构集合包含4个不同的架构,则相关列可以包含满足集合中某个架构的xml。
2.我认为最简单的方法是让sql server为你创建一个模式(首先用所需的列创建表ChartSetting1
,ChartSetting2
- 不一定,你可以创建返回的SELECT
所有列,但使用表格更容易),然后
DECLARE @mySchema NVARCHAR(MAX);
SET @mySchema = N'';
SET @mySchema =@mySchema +
(
SELECT * FROM ChartSetting1
FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting1')
);
SET @mySchema =@mySchema +
(
SELECT * FROM ChartSetting2
FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting2')
);
CREATE XML SCHEMA COLLECTION [name] AS @mySchema;
-- we don't need these tables , drop them
DROP TABLE ChartSetting1,ChartSetting2
3.这取决于。我想说如果你需要将XML数据限制在模式验证之外,那么使用非类型化XML是有意义的。如果模式验证涵盖了数据验证的所有方面,为什么不使用它呢?
答案 3 :(得分:-2)
XML肩膀确实作为XML存储在数据库中。 XML更像是一种传输介质而不是数据。正如你所说的那样大而难以查询。您应该将数据存储为数据(varchar int ect),然后使用PATH MODE以您想要的格式将其返回给您