cosmosdb 的 XML 架构

ABa*_*aig 3 azure-cosmosdb

我们可以在 cosmos Db 中添加 XML 架构吗?如果是的话我们如何查询它们?我可以将 XML 数据保存为字符串,但如何查询它们?

以下是我收集的文档:

    {
    "id": "4796300e-b1d3-4c60-abc3-9ac28fc87d45",
    "BId": "55ce95c2-b7f6-4c9b-a288-2363881f14bb",
    "SheetName": "<root><Tax_Type>tax</Tax_Type><Buildings_Limit /><Buildings_Value /><Contents_Limit /><Contents_Value /><Number_of_Stories /><Other_Limit /><Other_Value /><PremiumValue /><Roof_Geometry /><IsSoft_Story /><Sprinklers /><Tax>0</Tax><Tax_Percent>0</Tax_Percent><Year_Built /><Construction_Scheme /><Construction_Code /><Construction_Description /><Occupancy_Scheme /><Occupancy_Code /><Occupancy_Description /></root>",
    "HeaderIndex": "1",
    "_rid": "xxxxxxx",
    "_self": "dbs/xxx==/colls/xxx=/docs/xxx==/",
    "_etag": "\"xxxxx\"",
    "_attachments": "attachments/",
    "_ts": 1509170527
}
Run Code Online (Sandbox Code Playgroud)

tim*_*mur 6

Cosmos DB(显然已经取代了 Document DB)开发团队故意选择不支持 XML。他们的与模式无关的索引白皮书阐明了选择背后的原因:

\n\n
\n

文档的模式描述了独立于文档实例的文档的结构和类型系统。例如,XML 模式规范提供了用于表示 XML 文档的模式的语言。与 XML 不同,JSON 不存在如此广泛采用的模式标准。与 XML 相比,JSON\xe2\x80\x99s 类型系统是许多现代编程语言(尤其是 JavaScript)类型系统的严格子集。尽管缺乏模式规范,但 JSON 语法的简单性是其被广泛采用的原因之一。为了消除数据库和应用程序编程模型之间的阻抗不匹配,DocumentDB 利用了 JSON 的简单性及其缺乏模式规范的优势。它不对文档做出任何假设,并且除了实例特定值之外,还允许 DocumentDB 集合中的文档在架构上发生变化。与其他文档数据库相比,DocumentDB\xe2\x80\x99s 数据库引擎直接在 JSON 语法级别运行,与文档模式的概念无关

\n
\n\n

然后,该引擎为您提供了一堆 API 来查询数据:SQLCassandraMongoGremlinTableEtcd(该列表将来可能会扩展)。

\n\n

坏消息是您不能只是将 XML 放入其中就结束了 - 没有 API 可以让您这样做。

\n\n

好消息是您可以将 XML 转换为 JSON 并返回。获得 JSON 后,就会有大量的客户端库可供选择(同样,该列表可能会随着时间的推移而增长)。

\n\n

在 StackOverflow 上查找如何将 XML 转换为 JSON 的具体示例很容易,例如:

\n\n
    \n
  1. JavaScript 示例
  2. \n
  3. 或者如果你愿意的话也可以使用 C#
  4. \n
\n\n

回到您的特定文档,您可以将字符串转换为子对象,如下所示:

\n\n
{\n"id": "4796300e-b1d3-4c60-abc3-9ac28fc87d45",\n"BId": "55ce95c2-b7f6-4c9b-a288-2363881f14bb",\n"SheetName": {\n    "Tax_Type": "tax",\n    "Buildings_Limit": {},\n    "Buildings_Value": {},\n    "Contents_Limit": {},\n    "Contents_Value": {},\n    "Number_of_Stories": {},\n    "Other_Limit": {},\n    "Other_Value": {},\n    "PremiumValue": {},\n    "Roof_Geometry": {},\n    "IsSoft_Story": {},\n    "Sprinklers": {},\n    "Tax": "0",\n    "Tax_Percent": "0",\n    "Year_Built": {},\n    "Construction_Scheme": {},\n    "Construction_Code": {},\n    "Construction_Description": {},\n    "Occupancy_Scheme": {},\n    "Occupancy_Code": {},\n    "Occupancy_Description": {}\n},\n"HeaderIndex": "1",\n"_rid": "xxxxxxx",\n"_self": "dbs/xxx==/colls/xxx=/docs/xxx==/",\n"_etag": "\\"xxxxx\\"",\n"_attachments": "attachments/",\n"_ts": 1509170527\n}\n
Run Code Online (Sandbox Code Playgroud)\n