1

我正在尝试编写一个 DTD,并且我想定义一个元素 BOOKTYPE,它可以是一个、两个或三个。有没有一种方法可以确保只能在元素内输入这些值中的一个?

注意:1.我知道如何在属性中执行此操作,但不确定如何使用元素来完成。2. 我想要一种在 DTD 内部执行此操作的方法,而不是使用编程语言。

4

2 回答 2

1

不在 DTD 中,抱歉。您只需指定哪些元素可以作为子元素出现,以及文本内容 (#PCDATA) 是否可以出现。您对文本内容没有发言权。

您必须将数据移动到属性中,或者使用比旧的和笨重的 DTD 更强大的模式语言。

于 2009-09-26T11:56:07.030 回答
0

有没有一种方法可以确保只能在元素内输入这些值中的一个?

是的,使用包含XML Enumeration的 XML Schema Definition (XSD) 。这是货币的示例:

<xsd:simpleType name = "iso3currency">
 <xsd:restriction base = "xsd:string">
  <xsd:enumeration value = "AUD"/><!-- Australian Dollar -->
  <xsd:enumeration value = "BRL"/><!-- Brazilian Real -->
  <xsd:enumeration value = "CAD"/><!-- Canadian Dollar -->
  <xsd:enumeration value = "CNY"/><!-- Chinese Yen -->
  <xsd:enumeration value = "EUR"/><!-- Euro -->
  <xsd:enumeration value = "GBP"/><!-- British Pound -->
  <xsd:enumeration value = "INR"/><!-- Indian Rupee -->
  <xsd:enumeration value = "JPY"/><!-- Japanese Yen -->
  <xsd:enumeration value = "RUR"/><!-- Russian Rouble -->
  <xsd:enumeration value = "USD"/><!-- US Dollar -->
  <xsd:length value = "3"/>
 </xsd:restriction>

这将元素的值限制为列出的枚举值之一,长度为 3。

要使用它,您必须通过验证器传递您的 XML 和 XSD 。如何在 .NET 中执行此操作的示例如下:

如何:根据 Visual C#.NET 中的 XML 架构验证 XML 片段 http://support.microsoft.com/kb/318504

于 2009-09-26T07:21:43.767 回答