我是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行给出了一个错误,即元素&#34; name&#34;不允许使用内容模型&#34;(名称)&#34;
我需要弄清楚如何更改我的架构,以便正确验证。
我真的很感激任何帮助。
答案 0 :(得分:0)
您错过了序列的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>