【问题标题】:XML Doctype, how to applyXML Doctype,如何申请
【发布时间】:2011-12-14 16:00:05
【问题描述】:

如何在 xml 中应用 doctype?

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE application [
       <!ELEMENT application (#PCDATA)>
]>
<application>
       <settings>
              <environment use="production" />
              <database datasource="MySQL" environment="production" />
              <database datasource="MySQL" environment="development" />
              <import>
                     <path value="Application" />
                     <path value="Application/Library" />
              </import>
       </settings>
       <environment name="production">
              <database>
                     <hostname value="127.0.0.1" />
                     <username value="root" />
                     <password value="" />
                     <database value="app" />
              </database>
       </environment>
       <environment name="development">
              <database>
                     <hostname value="127.0.0.1" />
                     <username value="root" />
                     <password value="" />
                     <database value="app" />
              </database>
       </environment>
</application>

我还想验证 XML 中必须包含的元素和属性,例如,环境设置,你必须有这个节点,以及我如何创建可以由各种 XML 实现的单个 doctype,那么如何使用 xsd 文件验证 xml?

【问题讨论】:

  • DOCTYPE 声明与 DTD 一起使用。但是您还提到了使用 xsd 文件进行验证,这通常意味着 W3C XML 模式。请澄清。
  • 是的,w3c 架构 .. 只是想知道如何为所有 xml 应用 dtd
  • 您是否同时使用 XML Schema 和 DTD?这是两种不同的架构语言。
  • 不,我正在使用 dtd .. 但我想用 xsd 验证这些属性?

标签: xml xsd doctype


【解决方案1】:

尝试以下架构(您需要填充类型定义):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://example.com/sample"
    xmlns="http://example.com/sample">
  <xs:element name="application">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="settings" type="settingsType" />
        <xs:element name="environment" maxOccurs="unbounded" type="environmentType" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- type definitions -->
  <xs:complexType name="settingsType">
    ... define type here...
  </xs:complexType>
  <xs:complexType name="environmentType">
    ... define type here...
  </xs:complexType>
</xs:schema>

然后可以通过在根节点中包含一个 xmlns 属性来将您希望验证的 XML 实例与架构相关联:

<application xmlns="http://example.com/sample">
       <settings>
              ....
       </settings>
       <environment name="production">
              ....
       </environment>
       <environment name="development">
              ....
       </environment>
</application>

【讨论】:

  • 我还有一个问题,在设置中,会有一个包含将要使用的环境定义的节点,如果是这样,我如何验证这个环境是否存在于xml中?跨度>
  • 基于我上面回答中的架构,一个符合标准的 XML 文档必须至少有一个 environment 节点,否则这将无法针对架构进行验证。这能回答你的问题吗?
  • Nopz,检查这个线程 stackoverflow.com/questions/8511736/xsd-restricted-rule 你明白我想做什么。
  • 好的,我明白你的意思了。好吧,您可以扩展 XSD 简单类型(字符串等)以使用基于枚举的 XSD 限制,但是此枚举包含在您的类型的定义中,并且不能从该定义之外拉入,因此您可能会遇到问题.
  • 有什么方法可以检查这个定义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多