根据我在oslo上看到的情况,声明性xml将起到关键作用。我是否可以期望大量设计师生成的xml来创建真实的应用程序?只是知道我还没研究过。如果你仔细研究了这个问题,我会告诉你的看法。
一些背景…
每当我深入研究任何XML支持的声明性技术(如Silverlight和WPF、ASP.NET或msbuild)时,我似乎最终编辑了大量原始XML文本。设计师很少有足够的表现力来满足我的需要。
一方面,我真的看不出人和机器可读性之间有更好的折衷,而且公平地说,XML编辑的体验随着每一个化身而变得更好。
另一方面,我还没有发现XML对于它的某些用途是理想的。尤其是在表达逻辑、重构和可测试性方面。可能是设计者太弱,或者XML太富表现力,或者是我太暴躁,被对象和方法宠坏了。
最佳答案
我倾向于成为一个有点可疑的XML拥护者。尽管我每天都使用它,而且基于xml的web服务已经成为我职业生涯的一大部分(也是我写这本书的基础),但我认为它被广泛地过度使用。我倾向于属于那种认为你的工具箱里应该有很多工具的思想流派,你应该使用最好的工具来完成工作。有很多事情XML是一个很好的解决方案。但有很多事情不是这样的,有些事情可能是个糟糕的选择。
正如有些人热衷于批评和避免XML一样,有些人也同样热衷于(或更热衷于)赞扬和使用XML。在上面随便提到的例子中,大部分都是在讨论基于web的技术。在这些情况下,您通常已经有了一个XML解析器和/或DOM操纵器,因此使用它不会有任何危害。你没有增加复杂性,因为它已经存在了。flash&air在功能上大量使用xml,但它们的目标环境是解析xml-ish标记(如果不是xml本身,那么html或xhtml)是每个应用程序的核心部分。对于这些技术,引入不同类型的数据表达语言将增加复杂性。使用xml非常有意义。
这里有一个例子…这里讨论的语言是Perl,因为这是我主要使用的语言,但是Perl方面与这一点无关:我一直在研究一个现有模块的扩展,该模块转储深层数据结构。对很多事情都很有用——序列化、跨平台的可移植性等等,也是一种流行的调试工具。我想要扩展它的原因是真正的大型和复杂的结构(比如由orm或mop框架生成的结构)可能会变得毛茸茸的。所以我的第一个想法是做一个扩展,让我可以把数据转换成html,这样我就可以对它进行一些控制。然后我想,如果我能创建显示各种元素的图表,以及哪些元素与哪些元素相链接等等,这将是很好的。然后我想到,如果我选择了合理的中性格式,我应该能够相当容易地导出这两种格式。
那种格式?XML。在这种情况下,为什么它一定比本机Perl序列化结构更好,或者比使用不同的中间表示(如Yaml或JSON)更好?因为如果我有有效的、格式良好的xml,我可以很容易地使用xslt将其转换为(x)html或svg。如果需要的话,我还可以将其转换为纯文本(我已经有了xslt样式表,根据用户的选择,它们选择发出html片段或干净的单词包装纯文本)。
有很多方法可以解决这个特定的问题,但是XML在这种情况下给我的优势使它成为首选(至少,对于我的偏好和需求)。xslt是一个定义良好、文档齐全的(好吧,您对w3c文档的看法可能会有所不同,但这方面的书籍并不缺乏)工具,可以将xml转换成几乎任何东西。对于这个特殊的问题,XML的表现力,再加上我的最终目标格式(XHTML和SVG)本身就是XML这一事实,使它成为一个明确的选择。另一方面,我曾多次向客户(作为顾问)或(作为公司员工/团队成员)向老板/团队推荐XML不应用于某些任务。有时原因很清楚——使用XML并不能提高数据的(再)可用性,他们还没有在项目中使用XML,这不是那种你应该引入依赖性的事情,等等。有时原因更微妙;如果您试图决定如何存储/检索应用程序的配置,那么它是否真的需要使用xml?任何其他应用程序都不太可能需要读取/解析此内容,因此数据的可移植性/重用不是问题。如果数据在性质上相当简单,那么您可能可以使用密钥/值对文件进行管理。如果数据更复杂和/或更复杂,则可以使用yaml。
一般来说,XML是数据表达式的最差选择,除非它是最佳选择。json和yaml也是如此,要充分利用这些方法,最好的方法是熟悉并熟悉所有这些方法,并知道哪一个是你面前工作的最佳工具。
关于xml - 我注定要开发XML吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/219572/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl