2013-11-13 3 views
1

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

<?xml version="1.0" encoding="utf-8" ?> 
<Books> 
    <Book 
    Title="Animal Farm" 
    Author="George Orwell" 
    /> 
</Books> 

Можно ли автору в XSD для этого XML-файл, который говорит: Если элемент книги имеет атрибут Title, то атрибут Автор должен существовать тоже? Обратите внимание, что я не спрашиваю об ограничениях, основанных на значениях атрибутов, только имена атрибутов.

ответ

1

В XSD 1.0 вам придется наложить это ограничение на уровень приложения.

В XSD 1.1, вы можете использовать xs:assert наложить ограничение:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Books"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Book" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="Title"/> 
      <xs:attribute name="Author"/> 
      <xs:assert test="not(@Title) or @Author"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

Это также может быть сделано (возможно, более удобно) с присвоением условного типа, но в любом случае он должен XSD 1.1. –

Смежные вопросы