2008-11-12 7 views
3

Я хотел бы отредактировать файлы XHTML с помощью Emacs 'nxml-mode, который может использовать схемы rnc для проверки на лету. Все это встроено в новые версии Emacs.Схема RelaxNG (rnc) для расширения XHTML

Однако мои XHTML-файлы содержат элементы из другой схемы. Итак, < foo: foo > теги действительны, но только в пределах < xhtml: head > документа.

В настоящее время nxml жалуется, потому что используемая им схема XHTML не описывает тег foo. Как создать новую схему, которая описывает тег foo по отношению к существующей схеме XHTML, и как я могу автоматически применить эту схему с помощью schema locating rules в файле schemas.xml?

ie: Я хотел бы проверить документ, используя две схемы одновременно: встроенные правила XHTML и некоторые пользовательские правила, которые добавляют определенные теги имен.

ответ

2

Validator.nu имеет preset schema, который изменен из набора схем XHTML, первоначально разработанного Джеймсом Кларком, и одним из дополнений является rdf: RDF в голове, поэтому схема может быть полезна для изучения.

(у меня нет опыта работы с вопросами определения местоположения nxml режима схемы.)

2

Проблема 1: Я считаю, что вы не хотите, две схемы здесь, а одна схема, которая «включает» еще одна, в сочетании с правила переопределения/комбинации, описанные в разделе 9.2, из the RelaxNG tutorial. Я сам борюсь с этим.

Задача 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:

<?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> 

Ссылки