Могу ли я написать схему, что все XML действительны для него? - PullRequest
0 голосов
/ 15 июня 2010

Мне нужно написать схему, чтобы все экземпляры XML действовали для него.я попытался:

      <xs:element name="Arguments">
    <xs:complexType>
      <xs:sequence>
         <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
      </xs:sequence>
    </xs:complexType>

, но он применяет корневой элемент с именем Аргументы.есть ли способ для корня быть Any?

Ответы [ 2 ]

0 голосов
/ 15 июня 2010

Целью всей схемы является ограничение потенциального пространства действительных документов.Либо вы делаете целый документ, либо вы делаете фрагмент.Если вы делаете целый документ, правильный подход - просто опустить схему полностью.В самом деле.У вас нет никаких ограничений (кроме правильной формы), и поэтому вы не можете применить какую-либо интерпретацию к документу, который не является XML-документом.

Случай, когда у вас есть фрагмент, оченьболее полезным, хотя.Лучший способ сделать это - иметь внешний элемент (имя которого вы контролируете), который содержит неконтролируемый фрагмент.Когда вы делаете это, вы должны сказать, что контент представляет собой последовательность произвольных элементов от нуля до неограниченного числа, что вы уже сделали.Если это действительно что-нибудь , вы также можете подумать о разрешении смешанного контента (конечно, не делайте этого, если он вам не нужен, но если вы хотите обрабатывать такие вещи, как контент в абзацах XHTMLтогда это то, что вам нужно) и разрешить произвольные атрибуты для содержащего элемента (см. <xsd:anyAttribute>).Также часто бывает полезно указать, что существуют ограничения на то, из какого пространства имен могут быть получены произвольные элементы (##other является наиболее полезным, поскольку он останавливает неконтролируемую рекурсию в вашей схеме).

Таким образом, кроме проверкиесли у вас есть правильные детали, вы, вероятно, лучше , а не , пытаясь справиться абсолютно все.Просто убедитесь, что ваш контейнерный элемент определен именно для вашей реальной цели.

0 голосов
/ 15 июня 2010

Хороший вопрос, хотя я не уверен, что это можно сделать.Ваш подход с использованием xs:any хорош, но я не уверен, что его можно применить ко всему XML (то есть к корню), но только к его части.

Цитировать из книги, которую я однажды прочитал(что-то, что ставит цель «почему?», которые задают люди): [...] полезно при написании схем для таких языков, как XSLT, которые обычно включают разметку из нескольких словарей, которые неизвестны при написании схемы [...] полезно, когда вы только начинаете проектировать структуру документа, и у вас еще нет четкого представления о том, как все сочетается друг с другом [...] ( XML в двух словах )

Мне также любопытно посмотреть, можно ли это сделать или как лучше обойти это.

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