我正在使用 JDK 7 在 IDEA 13.02 中尝试 XML SCHEMA 1.1
这是我从教程中获得的 XML 架构代码。当我在 IntelliJ IDEA 中打开此文件并单击“验证”时,出现以下错误:
cvc-complex-type.2.4.a:发现以元素“openContent”开头的无效内容。'{" http://www.w3.org/2001/XMLSchema ":annotation, " http://www.w3.org/2001/XMLSchema ":simpleContent, " http://www.w3.org 之一/2001/XMLSchema ":complexContent, " http://www.w3.org/2001/XMLSchema ":group, " http://www.w3.org/2001/XMLSchema ":all, " http://www .w3.org/2001/XMLSchema “:选择,” http://www.w3.org/2001/XMLSchema “:序列,” http://www.w3.org/2001/XMLSchema “:属性,” http预计为://www.w3.org/2001/XMLSchema ":attributeGroup, " http://www.w3.org/2001/XMLSchema ":anyAttribute}'。
这是使用 XML Schema 1.1 增强功能的 XSD 文件:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.books.org"
xmlns:pub="http://www.books.org"
elementFormDefault="qualified">
<complexType name="Publication" abstract="true">
<openContent mode="interleave">
<any />
</openContent>
<sequence>
<element name="Title" type="string" />
<element name="Author" type="string" />
<element name="Date" …Run Code Online (Sandbox Code Playgroud) 我在找出如何告诉 XSD 字段数据的最小长度必须为 12 位数字和最大长度为 14 位数字时遇到一些麻烦。有没有人知道如何做到这一点,因为minlength和maxlength只能用于字符串。
<xs:simpleType name="timestamp_vorige_inspectie">
<xs:restriction base="xs:integer">
<xs:minLength value="12"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud) 我发现将复杂类型从一个 XSD 文件导入和引用到另一个 XSD 文件时遇到困难。让我用一个例子来说明我的场景
学生.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
xmlns="xyz"
elementFormDefault="qualified">
<xsd:element name="student" type="student" />
<xsd:complexType name="student">
<xsd:sequence>
<xsd:element name="id" type="xsd:string" />
<xsd:element name="birth-date" type="xsd:date" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
这是另一个 XSD,Teacher.xsd,我想在其中引用 Student.xsd 中的复杂类型 Student
老师.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
xmlns="xyz"
elementFormDefault="qualified">
<xsd:import schemaLocation="student.xsd"
namespace="xyzzz" />
<xsd:element name="teacher" type="teacher" />
<xsd:complexType name="teacher">
<xsd:sequence>
<xsd:element name="id" type="xsd:string" />
<xsd:element name="name" type="xsd:string" />
// TODO - Refer to student from student.xsd
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
我看过其他 Stack …
我正在为一个没有内容、只有属性的元素编写 XSD,这看起来相当简单:
<xs:complexType name="ViewElement">
<xs:attribute name="Name" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="VIEW" type="ViewElement" minOccurs="0" maxOccurs="unbounded"/>
Run Code Online (Sandbox Code Playgroud)
如果 XML 包含
<VIEW Name='V_UP'></VIEW>
Run Code Online (Sandbox Code Playgroud)
或者
<VIEW Name='V_UP'/>
Run Code Online (Sandbox Code Playgroud)
效果很好。但如果 XML 包含
<VIEW Name='V_UP'>
</VIEW>
Run Code Online (Sandbox Code Playgroud)
我明白了
该元素不能包含空格。内容模型为空。
我想让 XML 的作者能够灵活地以这种方式编写 XML,但我不知道如何允许内容,而只允许空白内容。有什么建议么?
我有这个 xml-Schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="Fussballmannschaft">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Stadt" type="xs:string" />
<xs:attribute name="Tabellenplatz" type="xs:string" />
<xs:element name="Spieler">
<xs:complexType>
<xs:attribute name="SpielerID" type="xs:string" />
<xs:keyref name="I_D" refer="Name" />
<xs:attribute name="Name" type="xs:string" />
<xs:element name="Torwart">
<xs:attribute name="GehealteneElfmeter" type="xs:integer" />
<xs:keyref name="ID_Torwart" refer="SpielerID" />
</xs:element>
<xs:element name="Verteidiger">
<xs:attribute name="GewonneneZweikaempfe" type="xs:integer" />
<xs:keyref name="ID_Verteidiger" refer="SpielerID" />
</xs:element>
<xs:element name="Stuermer">
<xs:attribute name="GeschosseneTore" type="xs:integer" />
<xs:keyref name="ID_Stuermer" refer="SpielerID" />
</xs:element>
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
和这个样本:
<Fussballmannschaft Name="BVB">
<Stadt>Dortmund</Stadt>
<Tabellenplatz>3</Tabellenplatz>
<Spieler …Run Code Online (Sandbox Code Playgroud) 我试图找到一个解决方案来验证POST请求中发送的XML数据是否满足给定的自定义XML模式.
如果我使用XmlMediaTypeFormatterASP.NET Web API提供的,我没有可用的架构验证,据我所知.例如:如果我有型号类型......
public class Order
{
public string Code { get; set; }
public int Quantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
...并在一个POST操作ApiController...
public HttpResponseMessage Post(Order order)
{
if (ModelState.IsValid)
{
// process order...
// send 200 OK response for example
}
else
// send 400 BadRequest response with ModelState errors in response body
}
Run Code Online (Sandbox Code Playgroud)
...我可以发布以下"错误的"XML数据,但仍然会得到200 OK响应:
User-Agent: Fiddler
Host: localhost:45678
Content-Type: application/xml; charset=utf-8
<Order> <Code>12345</Nonsense> </Order> // malformed XML
Run Code Online (Sandbox Code Playgroud)
要么:
<Order> <CustomerName>12345</CustomerName> </Order> // …Run Code Online (Sandbox Code Playgroud) asp.net-mvc xsd xml-validation asp.net-mvc-4 asp.net-web-api
可以使用文档类型描述(DTD)或XML架构(xsd)定义和验证XML文件,如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<annotation xmlns="http://www.xyz.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xyz.com
file:system.xsd" >
Run Code Online (Sandbox Code Playgroud)
要么
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE annotation SYSTEM "http://www.xyz.de/system.dtd">
Run Code Online (Sandbox Code Playgroud)
两种方式都定义了找到DTD或XSD的URL.有没有办法给出相对或本地路径?所以我可以将它们与XML文件一起存储,而不是依赖于服务器?
使用XML Schema声明a complexType只有一个子元素时,以下三种方法都实现了目标:
<xs:complexType> <xs:sequence> <xs:element ref="somevalue"/> </xs:sequence> </xs:comlexType>
<xs:complexType> <xs:choice> <xs:element ref="somevalue"/> </xs:choice> </xs:comlexType>
<xs:complexType> <xs:all> <xs:element ref="somevalue"/> </xs:all> </xs:comlexType>
Run Code Online (Sandbox Code Playgroud)
显然,sequence,choice和all不是必须的,为单独的元件,因为它们应当由用于指示多个元素的顺序.是否有一种更简洁的方式来声明complexType只有一个子元素?(即一个消除使用sequence,all或者choice,某种方式.)
我想编写一个简单的XML文件,其中包含位于我计算机上同一本地目录中的自定义xsd文件.我不明白文件开头的必要语法(我已经google了,但XSD教程似乎只关注元素定义而不是xsd:schema).
我的sys_params.xsd开始了:
<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:element name="shipOrder" type="order"/>
Run Code Online (Sandbox Code Playgroud)
我的sys_params.xml开始了:
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com sys_params.xsd"
<orderperson>John Smith</orderperson>
Run Code Online (Sandbox Code Playgroud)
我的XML在xml上报告此验证错误:
错误架构文档"sys_params.xsd"具有与实例文档" http://www.w3schools.com "中指定的目标命名空间不同的目标命名空间
毫无疑问,我的代码是错误的,但我需要一些帮助来纠正它.
我一直无法找到任何有关此的信息,可能是由于我没有掌握术语。我想要做的是为货币创建一个模板元素(已经有),并在两个地方使用两个不同的名称(即currentBalance和maxBalance)使用它。
我当前的模板格式为:
<xsd:element name="currency">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:double">
<xsd:attribute ref="currencyCode" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)