Объединение HTML и XML из одной схемы, все вложенные в элемент еще одной схемы - PullRequest
0 голосов
/ 06 декабря 2009

Последние несколько лет я работаю над изучением XML-схемы, время от времени. У меня есть довольно хорошие знания по основам, но одна вещь все еще ускользает от меня:

Я хочу создать XML-документ, подобный следующему:

  <itemList xmlns="http://mydomain.com/namespaceA">
     <item>
        <html xmlns="http://www.w3.org/1999/xhtml"
              xmlns:nsB="http://mydomain.com/namespaceB">
           <body>
              <p>Any HTML code here but I want to be able to mark up
              <nsB:myBTag><strong>some</strong> of the text</nsB:myBTag>
              with tags from namespaceB even if those tags are nested within
              standard HTML tags and even if there are then more HTML tags 
              nested within my namespaceB tags.</p>
           </body>
        </html>
     </item>
  </itemList>

Обратите внимание, что внутри элемента <html> пространство имен xhtml является пространством имен по умолчанию. Это потому, что я хочу, чтобы авторы документов могли использовать стандартный редактор HTML, а затем просто вставлять специальные теги namespaceB туда, где они нужны. В любом экземпляре документа будет гораздо больше тегов XHTML, чем тегов namespaceB.

Итак, из того, что я предварительно извлек урок, я думаю, что мои две схемы должны будут выглядеть примерно так:

namespaceA

  <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
             xmlns:nsA="http://mydomain.com/namespaceA"
             targetNamespace="http://mydomain.com/namespaceA">
      <xs:element name="itemList">
          <xs:complexType>
              <xs:sequence>
                  <xs:element name="item" maxOccurs="unbounded" minOccurs="1">
                      <xs:complexType>
                          <xs:any namespace="http://www.w3.org/1999/xhtml"
                                  minOccurs="1" maxOccurs="1"
                                  processContents="strict">
                      </xs:complexType>
                  </xs:element>
              </xs:sequence>
          </xs:complexType>
      </xs:element>
  </xs:schema>

(Я думаю, что единственное пространство имен, которое мне нужно объявить для модели содержимого в теге <item>, - это пространство имен XHTML, потому что тогда тег <html> в экземпляре документа объявляет пространство имен namespaceB, но я ни в коем случае не уверен .)

namespaceB

  <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
             xmlns:nsB="http://mydomain.com/namespaceB"
             targetNamespace="http://mydomain.com/namespaceB">
      <xs:element name="myBTag">
          <!--  I am clueless here -->
          <!-- I have no idea how to make sure that additional HTML tags
           can go in here without screwing everything up -->
      </xs:element>
  </xs:schema>

Большой вопрос: нужно ли что-то делать, чтобы убедиться, что теги XHTML и namespaceB могут свободно смешиваться или это только часть или часть операции тега <xs:any>?

Естественно, мои схемы и документы будут намного сложнее, чем эта. Я упростил их для облегчения обсуждения. Заранее благодарим за любую помощь, которую вы можете предоставить. Если мне удастся преодолеть это препятствие, я смогу создать действительно мощную систему образовательного контента, которая поможет обучать весь мир бесплатно.

1 Ответ

0 голосов
/ 07 декабря 2009

Согласно спецификации XS , элемент <xs:any> может иметь атрибут namespace, который может иметь значение ##any - это означает, что соответствующий элемент в документ может иметь любое пространство имен.

Отсутствующий атрибут namespace имеет тот же эффект - так что вы можете просто его опустить. то есть ответ на «большой вопрос»:

  • Нужно ли что-либо делать, чтобы убедиться, что теги XHTML и namespaceB могут свободно смешиваться? Нет, вы не

  • Или это только часть или часть операции тега? Да, это

Отказ от ответственности : Я не проверял это, только прочитал спецификацию выше. На вашем месте я бы попробовал проверить некоторые примеры XML-документов с вашими упрощенными XSD выше, используя популярный XSD-валидатор, чтобы определить, при каких условиях он проверяет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...