Смешивание пространств имен XML с XHTML

Как мне написать XML-схему, в которой элементы можно было бы использовать в сочетании с элементами из другого пространства имен?

В частности, если я хочу использовать некоторые элементы для создания шаблонов в документе XHTML как таковом:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:tmp="http://www.example.com/~/template">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

    <div id="idName">

        <tmp:region name="regionName">

            <div class="className">

                <h1>
                    <tmp:data name="dataName1">
                        <tmp:format type="formatType">
                            <tmp:param name="paramName" value="paramValue" />
                            <tmp:param name="paramName" value="paramValue" />
                        </tmp:format>
                    </tmp:data>
                </h1>

                <div>
                    <tmp:data name="dataName2" />
                </div>

            </div>

        </tmp:region>

    </div>

</body>

</html>

Я не хочу, чтобы кто-то писал схему, я как раз занимаюсь этим (я думаю правильно), но, как уже упоминалось, как можно гарантировать, что элементы из пространства имен tmp могут использоваться, как показано в примере? Что мне нужно включить или исключить из XSD или где-либо еще?


person Dan Lugg    schedule 23.12.2010    source источник


Ответы (1)


Если вам что-то нужно где-то, вы можете использовать xs:any :

<xs:any processContent="skip" namespace="http://www.foo.com/hello/world"/>

... чтобы, например, разрешить любой элемент из предоставленного пространства имен.

person Istao    schedule 23.12.2010
comment
Спасибо lstao; Это будет разрешать только элементы из предоставленного пространства имен, или (как) я смогу включать любые правильно сформированные элементы? Элемент <tmp:region></tmp:region> может (должен) содержать произвольное количество дочерних элементов как из пространства имен tmp, так и из других (в частности, XHTML). Кроме того, теперь я понимаю, что XHTML 1.0 не позволяет действительным документам смешивать внешние пространства имен с пространством имен XHTML. Было бы лучше написать документы в виде XML и преобразовать их позже, используя что-то вроде XSLT? - person Dan Lugg; 24.12.2010
comment
Другие пространства имен см. в документе xs:any. Вы можете поставить, например, namespace="##any". Я не знаю о xhtml. - person Istao; 25.12.2010