我是XML新手,正在努力让我的第一个XML模式正确地验证预先编写的xml文档。这可能是一个相当基本的问题,但我找不到一个很好的答案,也完全不理解这个问题。
下面是我的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<x:presentations xmlns:x="jon:presentations"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="jon:presentations presentations.xsd">
<presentation date="2013-07-31" length="PT30M">
<topic genre="Music">PianoML</topic>
<presenters>
<name title="Mr." id="Y258">
<first>Elvis</first>
<middle>A</middle>
<last>Presley </last>
</name>
<name title="Miss" id="X365">
<first>Lady</first>
<last>Gaga</last>
</name>
</presenters>
</presentation>
<presentation date="2013-08-05" length="PT35M">
<topic genre="Science">AlienML</topic>
<presenters>
<name title="Mr." id="Y007">
<first>Will</first>
<last>Smith</last>
</name>
<name title="Mr." id="Y360">
<first>Tommy</first>
<first>Lee</first>
<last>Jones</last>
</name>
</presenters>
</presentation>
</x:presentations>
这是我的方案:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="jon:presentations"
xmlns:prs="jon:presentations">
<xs:element name = "presentations">
<xs:complexType>
<xs:sequence>
<xs:element name = "presentation">
<xs:complexType>
<xs:sequence>
<xs:element name = "topic">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="genre">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Art"/>
<xs:enumeration value="Music"/>
<xs:enumeration value="Science"/>
<xs:enumeration value="Technology"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="presenters">
<xs:complexType>
<xs:sequence>
<xs:element name="name">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="first" type="xs:string"
minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="middle" type="xs:string"
minOccurs="0" maxOccurs="1"/>
<xs:element name="last" type="xs:string"/>
</xs:sequence>
<xs:attribute name="title" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Mr."/>
<xs:enumeration value="Mrs."/>
<xs:enumeration value="Ms."/>
<xs:enumeration value="Miss"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="id">
<xs:simpleType>
<xs:restriction base="xs:ID">
<xs:pattern value="[X-Y][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="date" type="xs:date">
</xs:attribute>
<xs:attribute name="length" type="xs:duration">
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我一点也不知道为什么,但是当我尝试验证xml文档时,它在第17行给出了一个错误,内容模型"(name)“不允许使用元素"name”。
我需要弄清楚如何更改我的模式,以便正确地进行验证。
我真的很感谢你的帮助。
发布于 2018-05-28 14:24:31
您刚刚错过了序列的minOuccur和maxOccur属性,以便XSD模式验证XML -在您的序列中,您需要提到minOccur和maxOccur属性-例如在您的示例中
演示文稿和名称可以按顺序出现-因此添加
minOccurs="1" maxOccurs="unbounded">
关于名称的顺序和演示的顺序,请进行更改并让我知道它是否有用
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="jon:presentations"
xmlns:prs="jon:presentations">
<xs:element name = "presentations">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name = "presentation">
<xs:complexType>
<xs:sequence>
<xs:element name = "topic">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="genre">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Art"/>
<xs:enumeration value="Music"/>
<xs:enumeration value="Science"/>
<xs:enumeration value="Technology"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="presenters">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="name">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="first" type="xs:string"
minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="middle" type="xs:string"
minOccurs="0" maxOccurs="1"/>
<xs:element name="last" type="xs:string"/>
</xs:sequence>
<xs:attribute name="title" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Mr."/>
<xs:enumeration value="Mrs."/>
<xs:enumeration value="Ms."/>
<xs:enumeration value="Miss"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="id">
<xs:simpleType>
<xs:restriction base="xs:ID">
<xs:pattern value="[X-Y][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="date" type="xs:date">
</xs:attribute>
<xs:attribute name="length" type="xs:duration">
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
https://stackoverflow.com/questions/50559333
复制相似问题