Как я могу указать список необходимых детских элементов XML, которые не должны быть в последовательности?
-
29-09-2019 - |
Вопрос
Следующий XML подтверждает предоставленный документ XSD. Однако, когда я начинаю удалять элементы, как из XML, это все еще подтверждает!?
Как написать XSD, который заставляет включать элементы?
<?xml version="1.0" encoding="UTF-8"?>
<Video>
<Title>
</Title>
<Description>
</Description>
<Contributor>
</Contributor>
<Subject>
</Subject>
</Video>
Тогда у меня есть XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="UploadXSD"
targetNamespace="http://tempuri.org/UploadXSD.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/UploadXSD.xsd"
xmlns:mstns="http://tempuri.org/UploadXSD.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Video">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" minOccurs="1" type="xs:string"></xs:element>
<xs:element name="Description" minOccurs="1" type="xs:string"></xs:element>
<xs:element name="Contributor" minOccurs="1" type="xs:string"></xs:element>
<xs:element name="Subject" minOccurs="1" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Решение
Ваша TargetNamesPace в XSD должно соответствовать пространству имен XML, который вы пытаетесь проверить, т.е.
<Video xmlns="http://tempuri.org/UploadXSD.xsd">
<Title>
</Title>
<Description>
</Description>
<Contributor>
</Contributor>
<Subject>
</Subject>
</Video>
Другие советы
Если вы используете xs:all
в отличие от xs:sequence
, элементы могут появиться в любом порядке. Есть некоторые дополнительные ограничения - например, элементы не могут быть указаны несколько раз, используя all
(Я не уверен, что если вы намереваете это использовать, ваша схема в настоящее время разрешит это.)
Не связан с StackOverflow