Я объединил несколько вариантов в одну схему и попытался использовать ее для проверки некоторых тестовых элементов.
Источники: http://www.w3schools.com/schema/schema_complex_empty.asp
http://www.herongyang.com/XML-Schema/complexType-Empty-Element-Declaration.html
Зонирование:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="foo">
<xs:complexType></xs:complexType>
</xs:element>
<xs:element name="y1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="0" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="y2">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="xs:anyType" />
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Тестовые случаи:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="NewXMLSchema.xsd">
<!-- These six are all valid -->
<foo />
<y1 />
<y2 />
<foo></foo>
<y1></y1>
<y2></y2>
<!-- These three are all invalid! -->
<foo>
</foo>
<y1>
</y1>
<y2>
</y2>
<!-- These are invalid too. -->
<foo>invalid</foo>
<y1>invalid</y1>
<y2>invalid</y2>
</root>
Похоже, любой из трех объявлений элементов будет делать то, что вы хочу, кроме для дополнительной функции пустой строки.
Я бы не включил type = "xs: string", fixed = "" или nillable = "true", потому что все они семантически отличаются от пустого тега. У пустого тега не будет типа (например, строки), потому что он пуст. Он также не имел бы фиксированного значения пустой строки, потому что это отличается от того, чтобы быть пустым. Элемент, который не имеет размера, семантически отличается от пустого тега, потому что он семантически эквивалентен отсутствующему тегу (Источник: XSLT 2.0 и XSLT 2.0 Reference Manager от Michael Kay, стр. 182.). Пустой тег, такой как <br/>
, не означает, что в этом случае разрыв строки отсутствует. Это означает, что разрыв строки присутствует, но не имеет содержания или attriubtes.
Спасибо! Теперь я пытаюсь сделать обратное, то есть создать элемент '', который должен содержать строку символов. BTW '' имеет несколько атрибутов. –
Olumide