我们可以在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
}
答案 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:SQL,Cassandra,Mongo,Gremlin,Table和{{ 3}}(列表将来可能会扩展)。
坏消息:您不能只是将XML插入其中并每天调用它-没有API能让您做到这一点。
好消息,您可以将XML转换为JSON,然后再转换为JSON。有了JSON后,您可以从Etcd中进行选择(同样,列表可能会随着时间的推移而增长)。
查找特定示例,例如,如何在StackOverflow上将XML转换为JSON很简单:
回到您的特定文档,您可能已将字符串转换为子对象,如下所示:
{
"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 ...