Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在DTD中,如何让子元素与父元素具有相同的名称但不同的属性类型?_Xml_Web_Web Applications_Dtd - Fatal编程技术网

Xml 在DTD中,如何让子元素与父元素具有相同的名称但不同的属性类型?

Xml 在DTD中,如何让子元素与父元素具有相同的名称但不同的属性类型?,xml,web,web-applications,dtd,Xml,Web,Web Applications,Dtd,例如: <row> <row _id="1">......</row> <row _id="2">......</row> </row> ...... ...... 如何使用DTD来验证这样的东西? xml的结构是不可变的。你说 xml的结构是不可变的 但可能值得注意的是,在实践中,这种情况几乎从未发生过。您可能无法说服您的数据源(或者可能是在语言规范技术方面给您设置了学术难题的人)切换到不同的(并且可能更

例如:

<row>
   <row _id="1">......</row>
   <row _id="2">......</row>
</row>

......
......
如何使用DTD来验证这样的东西? xml的结构是不可变的。

你说

xml的结构是不可变的

但可能值得注意的是,在实践中,这种情况几乎从未发生过。您可能无法说服您的数据源(或者可能是在语言规范技术方面给您设置了学术难题的人)切换到不同的(并且可能更合理,或者至少更易于处理)设计,但这并不意味着XML的结构无法更改。XML处理中最有用的技术之一是:如果您的输入不是您想要的格式,请在处理之前将其转换为您想要的格式

你问题的答案取决于你的意思

从字面上讲,您会问在DTD中是否可能“让”同名的子级和父级具有不同的属性。正如Martin Honnen在一篇评论中指出的那样,答案是“是的,只是将出现在一个元素上的所有属性设置为可选,而不是两个元素都设置为可选,并且仅在适当的情况下使用它们”

但是,如果您想要的不仅仅是启用指定表单的实例文档,而是强制执行规则,即某些“行”元素(父元素)没有属性,而其他“行”元素(子元素)有ID属性,这可能是必需的,那么答案是否,您无法使用DTD执行此操作。DTD只有一个元素类型,每个名称只有一个元素声明,这意味着在DTD中,父“行”和子“行”实例是同一元素类型的实例,具有一组已声明的可能属性。(您希望父元素和子元素具有不同的属性这一事实本身就很好地证明了在您的设计中,它们是不同的元素类型。观察者可能会问,为什么您坚持用相同的名称调用两种不同的元素类型。应用程序是否还不够复杂,因此您必须通过在标记中引入无意义的歧义?)

其他模式语言(如XSD和RelaxNG)都有本地声明,因此可以有多个同名元素类型

你说呢

xml的结构是不可变的

但可能值得注意的是,在实践中,这种情况几乎从未发生过。您可能无法说服您的数据源(或者可能是在语言规范技术方面给您设置了学术难题的人)切换到不同的(并且可能更合理,或者至少更易于处理)设计,但这并不意味着XML的结构无法更改。XML处理中最有用的技术之一是:如果您的输入不是您想要的格式,请在处理之前将其转换为您想要的格式

你问题的答案取决于你的意思

从字面上讲,您会问在DTD中是否可能“让”同名的子级和父级具有不同的属性。正如Martin Honnen在一篇评论中指出的那样,答案是“是的,只是将出现在一个元素上的所有属性设置为可选,而不是两个元素都设置为可选,并且仅在适当的情况下使用它们”

但是,如果您想要的不仅仅是启用指定表单的实例文档,而是强制执行规则,即某些“行”元素(父元素)没有属性,而其他“行”元素(子元素)有ID属性,这可能是必需的,那么答案是否,您无法使用DTD执行此操作。DTD只有一个元素类型,每个名称只有一个元素声明,这意味着在DTD中,父“行”和子“行”实例是同一元素类型的实例,具有一组已声明的可能属性。(您希望父元素和子元素具有不同的属性这一事实本身就很好地证明了在您的设计中,它们是不同的元素类型。观察者可能会问,为什么您坚持用相同的名称调用两种不同的元素类型。应用程序是否还不够复杂,因此您必须通过在标记中引入无意义的歧义?)


其他模式语言(如XSD和RelaxNG)都有本地声明,因此可以有多个同名元素类型

好吧,如果您使_id属性隐含,那么它就不会影响到外层行。定义内容更加困难,而且您还没有拼写出内部行的内容。到目前为止,我认为您可能希望查看
div
元素的XHTML DTD,它们可以像您希望嵌套
元素一样进行嵌套,因此您可以遵循在那里采取的方法。好吧,如果您使_id属性隐含,那么它就不会影响到外层行。定义内容更加困难,而且您还没有拼写出内部行的内容。到目前为止,我认为您可能希望查看
div
元素的XHTML DTD,它们可以像您希望嵌套
元素一样进行嵌套,因此您可以遵循这里采用的方法。对于具有DTD的XML或SGML应用程序来说,其规则超出DTD所能描述的规则也是闻所未闻的。HTML将是一个典型的例子,因为DTD允许
内部
。对于带有DTD的XML或SGML应用程序来说,其规则超出DTD可以描述的规则也是前所未闻的。HTML将是一个典型的例子,因为DTD允许
内部