2

MGraph 是微软“奥斯陆”带来的一种很棒的文本数据格式。

您认为它有机会像今天的 XML 一样广泛吗?

示例(谷歌地理编码):

{  
  name = "waltrop, lehmstr 1d",  
  Status {  
    code = 200,  
    request: "geocode"  
  },  
  Placemark [  
    {  
      id = "p1",  
      address = "Lehmstraße, 45731 Waltrop, Deutschland",  
      AddressDetails { Country {CountryNameCode = "DE", CountryName = "Deutschland", AdministrativeArea { AdministrativeAreaName = "Nordrhein-Westfalen", SubAdministrativeArea = { SubAdministrativeAreaName = "Recklinghausen", Locality { LocalityName = "Waltrop", Thoroughfare { ThoroughfareName = "Lehmstraße" }, PostalCode = { PostalCodeNumber = "45731" }}}}}, Accuracy = 6 },  
      ExtendedData {  
        LatLonBox {  
          north = 51.6244226,  
          south = 51.6181274,  
          east = 7.4046111,  
          west = 7.3983159  
        }  
      },  
      Point {  
        coordinates [ 7.4013350, 51.6212620, 0 ]  
      }  
    }  
  ]  
}

此处的模式信息:Microsoft "Oslo" MGraph - 下一个 XML?

4

5 回答 5

3

以下是James Clark 对 M 的部分看法

一个好的建模语言需要以一流的方式支持有序和无序的数据。这个问题可能是最根本的,因为它会影响数据模型。

M 似乎弱的另一个领域是身份。在抽象数据模型中,实体具有独立于其字段值的身份。但是类型系统通过创建复制实体固有身份的人工字段,迫使我以类似 SQL 的方式谈论身份。更糟糕的是,身份范围是范围,它们是平面表。与此相关的是对层次结构的支持。图是比树更通用的数据模型,所以我很高兴有图而不是树。但是当我在处理树时,我希望能够说图是一棵树(相当于指定了对图中节点身份的约束),并且我希望能够将其作为一棵树来操作,特别是我想要分层路径。

XML 的优势之一是它可以同时处理文档和数据。这很重要,因为世界并没有整齐地划分为文档和数据。您有包含文档的数据和包含数据的文档。对文档进行清晰建模所需的关键是混合文本。您将如何支持 M 中的文档?缺乏对 order 的支持是这里的一个主要问题,因为有序是文档的规范。

一个相关的问题是 M 和 XML 如何结合在一起。我相信有一种将 M 值表示为 XML 文档的规范方法。但是,如果您有 XML 格式的数据,您如何用 M 表示它?在许多情况下,您需要将 XML 结构转换为 M 结构,以便对数据进行清晰的建模。但是您可能并不总是想花时间来做这件事,而且如果您的 XML 有类似文档的内容,它会变得很丑陋。您最好将 XML 块表示为 M 中的简单值(就像在 JSON 世界中,您经常得到包含 HTML 块的字符串)。M应该让这很容易。你可以用 RELAX NG 优雅地解决这个问题(我知道这不会发生,因为微软对 XSD 的承诺,但这是一个有趣的思想实验):

最后,还有标准化的问题。在我看来,XML 的成就主要不是技术成就。这是一个社会性的:让大量社区同意使用一种通用格式。标准化是达成该协议的关键因素。XML 不会作为单一供应商格式出现在任何地方。令人惊讶的是,在 PDC 上关于 Oslo 的讨论多次提到了开源,以及微软如何将规范置于其开放规范承诺之下以实现开源实施,但没有提到标准化。我可以理解这一点:如果我是 Microsoft,我当然不会热衷于重复 XSD 或 OOXML 体验。但开源并不能替代标准化。

"

在此处阅读James Clark 关于Oslo 建模语言的博客文章。

于 2009-01-12T21:04:52.903 回答
1

我情不自禁,但我觉得奥斯陆是一个寻找真正优秀的具体问题来解决的解决方案。我真的希望他们能找到它。

我也有一种感觉,他们需要一些有趣的东西来充实今年的 PDC。

于 2009-01-12T20:25:17.523 回答
1

回应 James Clark 对 M 的看法:

我还看到 M 和 Oslo 缺少一些东西,但并不完全相同。

最好有一些保证,即 M 会保留集合中的实体被保留的顺序。但是,您希望如何对元素进行排序是一个实现细节。如果您在 M 中有一个有序集合并将其保存到数据库中,您如何在其中维护它们的顺序?唯一的方法是对数据的形状做出一些假设,将一些列添加到您未指定的表中,在这种情况下,完全控制数据结构的形状更有意义。

身份也是如此。我们在内存中有对象标识的原因是因为每个对象在内存中分配了不同的位置,并且具有该内存地址来唯一标识它。但是,当保存到数据库时,此信息不再相关,您需要一些列或列组合来唯一标识该记录,作为其主键。如果您不指定它,则 M 必须为您发明一个列,您将不会引用它,除非可能通过某种难以发现的技巧。换句话说,没有“固有的身份”;总有一些数据可以明确识别它。

文档和数据不是两个不同的东西。XML 本身不处理文档;它只代表分层数据,文档就是由此组成的。只要数据是结构化的,它就可以用 M 表示,就像您可以为层次结构的各个部分编写类并从另一种类型引用一种类型以将它们组合成任意复杂的树一样。诚然,这更容易放在 XML 中,因为它是自由格式的文本,除非您编写 XSD 模式,否则没有真正的验证,但在这些情况下,您所做的工作与在代码类中定义类型和关系相同.

因此,最终,M 会处理您为其定义结构的文档,并且该结构实际​​上并没有任何限制。问题是这样做有多容易。使用工具来拆分 XML 文档并生成 M 模式的想法非常好。我想写一个不会太难,或者一旦它成熟一点,微软就将其包含在他们的工具链中。就“变得丑陋”的结构而言,如果您的数据结构真的那么复杂,那就是它。对它进行模式化具有很大的优势,在 XSD 或 M 或 C# 类中也是如此,但如果您的目标是将其存储在 SQL Server 数据库(或特别是 Oslo 存储库)中,那么它是必要且值得的。

我非常有信心 M 和支持工具链将演变成非常神奇和有用的东西。现在显然有很多缺失。就个人而言,我更关心的是,M 目前的目标是在关系、物理数据库级别而不是概念级别(如实体框架)进行建模,开发人员在概念级别开始建模是最自然的。毕竟,当编写类以从 MGraphs 实例化对象时(DSL 的目的和输出),您的类的定义可能与它们的持久化方式完全不同。特别是如果您在模型中使用继承。

我同意你的标准化。那样就好了。但是,我认为它不太重要,因为目标是将这些数据存储在 Oslo 存储库中。尤其是当 SQL 数据服务成熟到足以托管存储库时,我们将拥有所有不同的协议和格式来查询和操作这些数据。客户端将能够通过 ADO.NET 数据服务进行查询和更新,使用 JSON、POX、SOAP、MGraph 等格式化消息。所有 MGraph 数据都需要一个 MGraph 连接器,以便在数据库中获取它,可以通过任何可以想象的方式访问它。

您可以在我的文章中找到有关奥斯陆的更多信息:http: //dvanderboom.wordpress.com/2009/01/17/why-oslo-is-important/

于 2009-01-28T15:12:35.533 回答
0

...而 JSON 不具备的功能是什么?

于 2009-01-12T20:37:38.420 回答
0

我想知道为什么总是将 MGraph 与 XML 而不是看起来更相似的 YAML 进行比较。为什么我们经常重新发明轮子是无知还是盲目?

PS:这就是 YAML 的样子(除了 JSON 之外,没有自定义数据类型和对 YAML 提供的节点“p1”的引用):

{  
  name: "waltrop, lehmstr 1d",  
  Status: {  
    code: 200,  
    request: "geocode"  
  },  
  &p1 Placemark: [  
    {
      address: "Lehmstraße, 45731 Waltrop, Deutschland", 
      ExtendedData: { LatLonBox: {  
          north: 51.6244226,  
          south: 51.6181274,  
          east: 7.4046111,  
          west: 7.3983159
      }},  
      Point: { coordinates: [ 7.4013350, 51.6212620, 0.0 ] }
    }  
  ]  
}
于 2010-08-04T21:19:56.820 回答