Схема для смешивания html и xml (кроме «включая xhtml в xml»)

В XML-документ легко встроить некоторый XHTML-код, например:

<?xml version="1.0"?> 
<mannual:product xmlns:mannual="http://product/mannual" 
     xmlns="http://www.w3.org/1999/xhtml"> 
  ...
  <mannual:instruction>
    <p>Before proceeding, 
       <strong>make sure you put on your safety goggles</strong>.
       Start by unlocking the airlock...
    </p>
  </mannual:instruction>
  ....
</mannual:product>

Это можно сделать с помощью XML-схемы <import>, импортирующей файлы XHTML xsd и определения элемента <mannual:instruction> как типа xhtml.div.type.

Но что, если мы хотим смешать XML и HTML? Нравится:

<?xml version="1.0"?> 
<mannual:product xmlns:mannual="http://product/mannual" 
     xmlns="http://www.w3.org/1999/xhtml"> 
  ...
  <mannual:instruction>
    <p><mannual:information>Before proceeding, 
         <strong>make sure you put on your safety goggles</strong>.
       </mannual:information>
       <mannual:action>
         Start by unlocking the airlock...
       </mannual:action>
    </p>
  </mannual:instruction>
  ....
</mannual:product>

Как видите, в сегменте XHTML используются некоторые элементы XML (<information> и <action>). Определение instruction как xhtml.div.type не пройдет валидацию в таком случае. Как мы можем определить схему, чтобы обеспечить такую ​​гибкость?

0
0
215
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Грамматики требуют четкого определения; описание смешивания, размахивающее руками, не поможет.

У вашего «микса» HTML и XML нет такого четкого определения. Чтобы увидеть это, вам не нужно смотреть дальше элемента p из вашего примера. HTML не определяет элемент p, чтобы иметь дочерние элементы manual:information.

Так что вы можете

  • Закатайте рукава и напишите правильную грамматику для вашей новой грамматики, или
  • Пунт и используйте xsd:any, чтобы разрешить любую хорошо сформированную разметку, где вы хотите смешивать HTML и XML, отказавшись от возможности проверки на соответствие фактической грамматике.

Такая информация о том, что между xsd:any и определением правил для всех элементов XHTML, где разрешено такое смешение, не существует промежуточной точки, удовлетворила бы мое первоначальное любопытство.

Tankman六四 27.10.2018 05:10

В XSD 1.1 дополнительные квалификации могут быть добавлены к содержимому xsd:any через xsd:assert.

kjhughes 27.10.2018 05:26

Другие вопросы по теме