cosmosdb的XML Schema

时间:2017-10-28 06:40:14

标签: azure-cosmosdb

我们可以在cosmos Db中添加XML Schema吗?如果是,我们如何查询它们? 我能够将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
}

3 个答案:

答案 0 :(得分:4)

Cosmos DB(显然是superseded Document DB)开发团队故意选择不支持XML。他们的Schema-Agnostic Indexing Whitepaper揭示了选择背后的原因:

  

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

然后,引擎为您提供了一堆用于查询数据的API:SQLCassandraMongoGremlinTable和{{ 3}}(列表将来可能会扩展)。

坏消息:您不能只是将XML插入其中并每天调用它-没有API能让您做到这一点。

好消息,您可以将XML转换为JSON,然后再转换为JSON。有了JSON后,您可以从Etcd中进行选择(同样,列表可能会随着时间的推移而增长)。

查找特定示例,例如,如何在StackOverflow上将XML转换为JSON很简单:

  1. heaps of client libraries
  2. Javascript example

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

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

答案 1 :(得分:2)

CosmosDB是一个NOSQL数据库,简单的答案是 NO 。它将数据存储在JSON文档中:https://docs.microsoft.com/en-us/azure/cosmos-db/introduction

即使它主要支持4个API,也可以根据所选的API在图形模型(Gremlin)或文档集合(MongoDb,DocumentDB)中处理这些JSON文档。或SQL等。但结果始终是JSON文档。

但是有很多工具可以将XML转换为JSON并转换回来。

答案 2 :(得分:0)

最好在CosmosDB中保存JSON文档,并且查询它们很容易。我将建议将其转换为JSON并将其另存为文档,而不是保存一长串XML。检查此link以了解如何查询JSON ...