gpt4 book ai didi

xml - 如何声明可以在 DTD 中省略的具有默认值的属性?

转载 作者:行者123 更新时间:2023-12-04 04:34:46 26 4
gpt4 key购买 nike

在了解了 XML 的 DTD 之后,我真的很喜欢这个概念,并希望做以下事情:
我希望可以选择是否声明一个属性,以便如果声明了它,则它是一组选择 x、y、z 中的一个,如果未声明,则认为其具有值 m。
我尝试了以下方法:

type (x|y|z) "m"

但我得到了(使用读取文件的java):
The enumerated type list must end with ')' in the "type" attribute declaration.

整个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ATTLIST item
name ID #REQUIRED
type (type a|type b) "type a"
>]>

<root>
<item name="name1" type="type a" />
<item name="name2" />
</root>

如果我不说明类型,作为第二项,我会收到错误消息。我希望它被暗示,如果我没有在 xml 中声明它,默认值是类型 a。
另外,另一个(有点)不相关的问题是我必须在 ATTLIST 中声明我的所有属性,否则它们会产生错误。有没有办法绕过它?目前我所做的是用#IMPLIED 声明它们,但也许它不是正确的方法

最佳答案

默认值必须是枚举中的选项之一。只需添加 m作为一个选项:

type (x|y|z|m) "m"

更多信息: http://www.w3.org/TR/xml11/#sec-attr-defaults

枚举必须是单个 Nmtoken (name token) 所以你不能使用 type a 中的空格和 type b .你可以使用类似 type_a 的东西, type-a , typeA

例子:
<!DOCTYPE root [
<!ELEMENT root (item+)>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
name ID #REQUIRED
type (type_a|type_b) "type_a">
]>
<root>
<item name="name1" type="type_a"/>
<item name="name2"/>
</root>

此外,必须声明所有属性才能使您的 XML 有效。我认为没有办法解决这个问题。将它们声明为 #IMPLIED是正确的。

关于xml - 如何声明可以在 DTD 中省略的具有默认值的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19931088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com