【问题标题】:DTD validation for small and simple xml小而简单的 xml 的 DTD 验证
【发布时间】:2016-11-07 01:49:13
【问题描述】:

我正在尝试为此 XML 构建一个小型验证

<adr>
  <parameters>
    <type><text>work</text></type>
    <label><text>Simon Perreault 2875 boul. Laurier, suite D2-630 Quebec, QC, Canada G1V 2M2</text></label>
  </parameters>
  <pobox/>
  <ext/>
  <street>2875 boul. Laurier, suite D2-630</street>
  <locality>Quebec</locality>
  <region>QC</region>
  <code>G1V 2M2</code>
  <country>Canada</country>
</adr>

考虑到pobox 有两个属性codregion,这个DTD 我缺少什么?谁能帮帮我?

<?mlx version ="1.0"?>
<!DOCTYPE ADR [

<!ELEMENT ADR (PARAMETERS, POBOX, EXT, STREET, LOCALITY, REGION, CODE, COUNTRY)>
<!ELEMENT PARAMETERS (#PCDATA)>
<!ELEMENT POBOX (#PCDATA)>
<!ELEMENT EXT (#PCDATA)>
<!ELEMENT STREET (#PCDATA)>
<!ELEMENT LOCALITY (#PCDATA)>
<!ELEMENT REGION (#PCDATA)>
<!ELEMENT CODE (#PCDATA)>
<!ELEMENT COUNTRY (#PCDATA)>

<!ATTLIST POBOX COD CDATA #IMPLIED>
<!ATTLIST POBOX REGION CDATA #IMPLIED>
]>

【问题讨论】:

  • 只是评论:您在 DTD 之上的处理指令是错误的 (&lt;?mlx version ="1.0"?&gt;)。也许修复它会有所改善。

标签: xml dtd


【解决方案1】:

以下是我注意到的几件事:

  • 就像评论中提到的那样,您的 XML 声明无效。它可能不会导致任何问题,因为解析器不知道 mlx 的含义,它被视为正常的处理指令。
  • 案件很重要。如果您有一个元素 adr,则不应将其声明为 ADR
  • 在 XML 中,parameters 有两个子元素,但被声明为只允许 #PCDATA
  • 没有错,但如果一个元素只有一个 ATTLIST 声明,则更易于阅读。
  • 通常如果您有一个单独的 DTD 文件,则不会在其中使用 DOCTYPE 声明。 DOCTYPE 通常在 XML 实例本身中。不确定这是否会给您带来问题(可能取决于您如何验证 XML)。它也可能在同一个文件中,但您已在问题中将其拆分。

这是您的 DTD 的更新版本:

<?xml version="1.0"?>
<!DOCTYPE adr [
<!ELEMENT adr (parameters, pobox, ext, street, locality, region, code, country)>
<!ELEMENT parameters (type, label)>
<!ELEMENT type (text)>
<!ELEMENT label (text)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT pobox (#PCDATA)>
<!ATTLIST pobox 
    cod    CDATA #IMPLIED
    region CDATA #IMPLIED>
<!ELEMENT ext (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT locality (#PCDATA)>
<!ELEMENT region (#PCDATA)>
<!ELEMENT code (#PCDATA)>
<!ELEMENT country (#PCDATA)>
]>

【讨论】:

  • @FernandoCorreia - 不客气。请考虑接受这个答案。 (stackoverflow.com/help/someone-answers)
猜你喜欢
  • 2010-11-22
  • 2012-08-21
  • 2012-09-21
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
相关资源
最近更新 更多