我想使用Emacs'nxml-mode编辑XHTML文件,它可以使用rnc模式进行即时验证。这些内置于较新的Emacs版本中。
但是,我的XHTML文件包含来自另一个架构的元素。所以< foo:foo>标签有效,但仅限于< xhtml:head>该文件。
目前,nxml抱怨因为它使用的XHTML架构没有描述foo标签。如何创建描述与现有XHTML模式相关的foo标记的新模式,以及如何在schemas.xml文件中使用schema locating rules自动应用该模式?
ie:我想同时使用两个模式验证文档:内置的XHTML规则,以及一些添加某些命名空间标记的自定义规则。
答案 0 :(得分:2)
Validator.nu有一个preset schema,它是根据最初由James Clark开发的XHTML模式集修改的,其中一个添加内容是rdf:RDF,因此该模式可能对学习很有用。
(我对nxml-mode架构位置问题没有经验。)
答案 1 :(得分:2)
问题1:我认为你不需要这里有两个模式,而是一个“包含”另一个模式的模式,以及the RelaxNG tutorial第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 :(得分: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>
<强>参考强>