松弛的NG(rnc)模式扩展XHTML

3
我想使用Emacs的nxml-mode编辑XHTML文件,该模式可以使用rnc模式进行即时验证。这一切都内置在较新版本的Emacs中。
然而,我的XHTML文件包含来自另一个模式的元素。因此,<foo:foo>标记是有效的,但仅限于文档的<xhtml:head>中。
目前,nxml会抱怨,因为它正在使用的XHTML模式没有描述foo标签。如何创建一个新模式,以描述现有XHTML模式中的foo标签,并如何使用schema locating rules在schemas.xml文件中自动应用该模式?
即:我想同时使用两个模式验证文档:内置的XHTML规则和添加某些命名空间标记的自定义规则。
3个回答

2

Validator.nu有一个预设模式,该模式是从最初由James Clark开发的XHTML模式集修改而来,并添加了头部的rdf:RDF,因此该模式可能对学习很有用。

(我没有处理nxml-mode模式位置问题的经验。)


2
问题1:我认为你不想在这里有两个模式,而是一个“包含”另一个模式,并与RelaxNG教程第9.2节中描述的覆盖/组合规则相结合。我自己也在努力解决这个问题。
问题2:对于第二个问题,我可以给你一个更好的答案;nxml-mode在多个位置之一查找“schemas.xml”文件,该文件执行模式匹配以将文件与模式关联起来。对于最简单的映射,我将此文件放在与xml文件相同的目录中:
<?xml version='1.0'?>
<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
  <uri resource="auto.xml" uri="lab.rnc"/>
</locatingRules>

这个文件将“auto.xml”文件与“lab.rnc”规范关联起来。


2
W3C有一个很好的工具供您使用。例如,这里是XHTML+RDFa的rng:
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- XHTML+RDFa 1.0 -->

<grammar ns="http://www.w3.org/1999/xhtml"
         xmlns="http://relaxng.org/ns/structure/1.0"
         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<include href="xhtml-datatypes-1.rng"/>
<include href="xhtml-attribs-1.rng"/>
<include href="xhtml-text-1.rng"/>
<include href="xhtml-list-1.rng"/>
<include href="xhtml-object-1.rng"/>
<include href="xhtml-pres-1.rng"/>
<include href="xhtml-edit-1.rng"/>
<include href="xhtml-bdo-1.rng"/>
<include href="xhtml-form-1.rng"/>
<include href="xhtml-table-1.rng"/>
<include href="xhtml-image-1.rng"/>
<include href="xhtml-ssismap-1.rng"/>
<include href="xhtml-events-1.rng"/>
<include href="xhtml-inlstyle-1.rng"/>
<include href="xhtml-base-1.rng"/>
<include href="xhtml-ruby-1.rng"/>
<include href="xhtml-metaAttributes-1.rng"/>

<define name="xhtml.Common.attrib" combine="interleave">
  <optional>
    <attribute name="href">
      <ref name="xhtml.URI.datatype"/>
    </attribute>
  </optional>
  <ref name="xhtml.Metainformation.attrib"/>
</define>

<include href="xhtml-hypertext-1.rng">
    <define name="xhtml.a.attlist">
      <ref name="xhtml.Common.attrib"/>
      <optional>
        <attribute name="charset">
          <ref name="xhtml.Charset.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <ref name="xhtml.ContentType.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="hreflang">
          <ref name="xhtml.LanguageCode.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="accesskey">
          <ref name="xhtml.Character.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="tabindex">
          <ref name="xhtml.Number.datatype"/>
        </attribute>
      </optional>
    </define>
</include>

<include href="xhtml-link-1.rng">
    <define name="xhtml.link.attlist">
      <ref name="xhtml.Common.attrib"/>
      <optional>
        <attribute name="charset">
          <ref name="xhtml.Charset.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="hreflang">
          <ref name="xhtml.LanguageCode.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <ref name="xhtml.ContentType.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="media">
          <ref name="xhtml.MediaDesc.datatype"/>
        </attribute>
      </optional>
    </define>
</include>

<include href="xhtml-meta-1.rng">
    <define name="xhtml.meta.attlist">
      <ref name="xhtml.Common.attrib"/>
      <optional>
        <attribute name="http-equiv">
          <data type="NMTOKEN"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="name">
          <data type="NMTOKEN"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="scheme">
          <text/>
        </attribute>
      </optional>
    </define>
</include>

<include href="xhtml-script-1.rng">
    <define name="xhtml.script.attlist">
      <ref name="xhtml.id.attrib"/>
      <ref name="xhtml.Metainformation.attrib"/>
      <optional>
        <attribute name="href">
          <ref name="xhtml.URI.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="charset">
          <ref name="xhtml.Charset.datatype"/>
        </attribute>
      </optional>
      <attribute name="type">
        <ref name="xhtml.ContentType.datatype"/>
      </attribute>
      <optional>
        <attribute name="src">
          <ref name="xhtml.URI.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="defer">
          <value>defer</value>
        </attribute>
      </optional>
      <optional>
        <attribute name="xml:space">
          <value>preserve</value>
        </attribute>
      </optional>
    </define>
</include>

<include href="xhtml-style-1.rng">
    <define name="xhtml.style.attlist">
      <ref name="xhtml.title.attrib"/>
      <ref name="xhtml.I18n.attrib"/>
      <ref name="xhtml.id.attrib"/>
      <ref name="xhtml.Metainformation.attrib"/>
      <optional>
        <attribute name="href">
          <ref name="xhtml.URI.datatype"/>
        </attribute>
      </optional>
      <attribute name="type">
        <ref name="xhtml.ContentType.datatype"/>
      </attribute>
      <optional>
        <attribute name="media">
          <ref name="xhtml.MediaDesc.datatype"/>
        </attribute>
      </optional>
      <!-- <optional>
        <attribute name="xml:space">
          <value>preserve</value>
        </attribute>
      </optional> -->
    </define>
</include>

<include href="xhtml-csismap-1.rng">
    <define name="xhtml.area.attlist">
      <ref name="xhtml.Common.attrib"/>
      <ref name="xhtml.shape.attrib"/>
      <ref name="xhtml.coords.attrib"/>
      <optional>
        <attribute name="nohref">
          <value>nohref</value>
        </attribute>
      </optional>
      <attribute name="alt">
        <ref name="xhtml.Text.datatype"/>
      </attribute>
      <optional>
        <attribute name="tabindex">
          <ref name="xhtml.Number.datatype"/>
        </attribute>
      </optional>
      <optional>
        <attribute name="accesskey">
          <ref name="xhtml.Character.datatype"/>
        </attribute>
      </optional>
    </define>
</include>

<include href="xhtml-param-1.rng">
    <define name="xhtml.param.attlist">
      <ref name="xhtml.id.attrib"/>
      <ref name="xhtml.Metainformation.attrib"/>
      <optional>
        <attribute name="href">
          <ref name="xhtml.URI.datatype"/>
        </attribute>
      </optional>
      <attribute name="name"/>
      <optional>
        <attribute name="value"/>
      </optional>
      <optional>
        <attribute name="valuetype">
          <choice>
        <value>data</value>
        <value>ref</value>
        <value>object</value>
          </choice>
        </attribute>
      </optional>
      <optional>
        <attribute name="type">
          <ref name="xhtml.ContentType.datatype"/>
        </attribute>
      </optional>
    </define>
</include>

<include href="xhtml-struct-1.rng">
    <define name="xhtml.title.attlist">
      <ref name="xhtml.Common.attrib"/>
    </define>

    <define name="xhtml.head.attlist">
      <ref name="xhtml.Common.attrib"/>
      <ref name="xhtml.profile.attlist"/>
    </define>

    <define name="xhtml.html.attlist">
      <ref name="xhtml.XHTML.version.attrib"/>
      <ref name="xhtml.Common.attrib"/>
    </define>
</include>

</grammar>

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接