下列命题成立吗:
对于每个dtd,都有一个xsd定义完全相同的语言,而对于每个xsd,都有一个dtd定义完全相同的语言。或者换一种说法:由任何dtd定义的语言集合正是由任何xsd定义的语言集合?
稍微扩展一下这个问题:XML文档基本上是一个大字符串。语言是字符串的集合。例如,所有mathml文档的(无限)集合是一种语言,所有rss文档的集合也是如此等等。mathml(rss,…)也是所有xml文档(无限)集的一个适当子集。您可以使用dtd或xsd来定义这样的xml子集。
现在,每个DTD都定义了一种语言。但是如果你考虑所有可能的DTD,你会得到一组语言。我的问题是,这个集合是否与您从所有可能的xsd中得到的集合完全相同?如果是这样,那么dtd和xsd是等价的,因为两者定义的xml语言的范围是相等的。
为什么这个问题很重要?如果dtd和xsd都是等价的,那么可以编写一个以dtd为输入并提供等价xsd的程序,而另一个程序则相反。我知道有很多程序声称可以做到这一点,但我怀疑这是否真的可能。
最佳答案
一个有趣的问题;问得好!
答案是“不”,在两个方向上。
这是一个在xsd中没有等价物的dtd:
<!ELEMENT e (#PCDATA | e)* >
<!ENTITY egbdf "Every good boy deserves favor.">
<e/>和<e>&egbdf;</e>,但不包括<e>&beadgcf;</e>。lt、gt等以外的命名实体的引用的字符序列来制定问题,那么答案就会改变:对于每个不涉及符号声明的dtd,都有一个xsd模式。它在实体扩展后接受完全相同的文档集,并以忽略xsi命名空间中的命名空间属性和属性的方式定义“相同”。e的任何实例,而不管文档实例中绑定到该命名空间的前缀是什么。<xs:schema xmlns:xs="..." targetNamespace="http://example.com/nss/24397">
<xs:element name="e" type="xs:string"/>
</xs:schema>
e元素。<xs:schema xmlns:xs="...">
<xs:element name="e" type="xs:integer"/>
</xs:schema>
<e>42</e>,但不接受文档<e>42d Street</e>。DTD不能做出这种区分,因为DTD没有约束PCData内容的机制。最接近的dtd是<!ELEMENT e (#PCDATA)>,它接受两个示例文档。xsi:type属性允许在文档中修改内容模型。以下架构文档描述的xsd架构没有等效的dtd:<xs:schema xmlns:xs="...">
<xs:complexType name="e">
<xs:sequence>
<xs:element ref="e" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="e2">
<xs:sequence>
<xs:element ref="e" minOccurs="2" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
<xs:element name="e" type="e"/>
</xs:schema>
<e xmlns:xsi="..." xsi:type="e2"><e/><e/></e>并拒绝文档<e xmlns:xsi="..." xsi:type="e2"><e/><e/><e/></e>。DTD没有机制使内容模型依赖于文档实例中给定的属性值。<!ELEMENT e ANY>格式的元素声明,这是不同的,因为它要求对所有实际出现的元素进行声明。关于xml - DTD与XSD定义的XML语言范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19683429/
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or