我在使用.NET XSD DataSet和TableAdapter功能的当前应用程序中有一个非常标准的表设置.我的contracts表包含一些标准合同信息,以及一个列primary department.这列是一个外键到我的Departments表,我在那里储存基本department name,id,notes.这是我的SQL Server中的所有设置和功能.
当我使用XSD工具时,我可以立即拖动两个表,它会自动检测/创建这两个表之间的外键.当我在主页上查看合同数据时,这非常有用.
但是,当我转到我的管理页面来修改部门数据时.我通常做这样的事情:
Dim dtDepartment As New DepartmentDataTable()
Dim taDepartment As New DepartmentTableAdapter()
taDepartment.Fill(dtDepartment)
Run Code Online (Sandbox Code Playgroud)
但是,在这一点上抛出异常,说明这里有一个外键引用,我猜是因为我没有Contract DataTable DataSet填充.
我该如何解决这个问题?我知道我可以简单地删除从XSD的外键使事情做工精细,但有没有额外的完整性检查,并具有XSD架构匹配数据库SQL模式是好的.
DTD和XML Schema的优点/缺点是什么(我甚至不确定后者的官方名称是什么!)?哪个更好?为什么我们需要两种方法来做同样的事情?
编辑:我在一篇正在阅读的文章中找到了这个,这促使我提出这个问题:
为什么选择W3C XML Schema语言?
W3C XML Schema Language不是唯一的模式语言.事实上,XML规范将文档类型定义(DTD)描述为表达模式的方式.此外,JAXB参考实现的预发布版本仅适用于DTD - 也就是说,不适用于使用XML Schema Language编写的模式.但是,XML Schema Language比DTD更丰富.例如,用XML Schema Language编写的模式可以描述在DTD中无法表达(或不能轻易表达)的结构关系和数据类型.有一些工具可用于将DTD转换为W3C XML模式语言,因此如果您使用的是早期版本的JAXB参考实现中使用的基于DTD的模式,则可以使用这些工具将模式转换为XML模式语言.http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch
我想我想举例说明为什么XML-Schema更好(如果确实如此).
我想在.xsd文件中定义浏览器中的xml文件.请为我检查以下两个文件,并指出我需要做什么.这两个文件位于同一文件夹下.
employee.xml
<?xml version="1.0"?>
<employee xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="employee.xsd">
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Run Code Online (Sandbox Code Playgroud)
的employee.xsd
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string" fixed="red" />
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud) 每当我需要从XML XSD架构创建类文件时,我在VS中使用.NET xsd.exe工具和预构建事件,以确保我的类和模式在构建时彼此同步.这当然很好,但是......
我注意到,如果XSD和派生类在同一个项目中,VS会理解该关系,并在解决方案资源管理器中直观地将CS显示为XSD文件的子级.所以我想知道Visual Studio 2010中是否有任何功能可以在IDE中为我执行类创建而不是依赖于预构建脚本?
例如,我会将XSD添加到项目集某些选项中,VS接管并为我创建我的类.
VS 2010是否支持这样的事情?或者我应该停止想知道并继续使用xsd.exe和prebuild.
编辑
我也注意到在XSD文件的属性下我可以选择设置一个Custom Tool,阅读这个看起来接近我的目标,但我不确定这个属性的正确用法.
编辑 此外,如果有解决方案,我需要基于VS2010标配的功能/功能.我宁愿不使用第三方插件等
我必须编写一个C++应用程序(使用GUI的Qt框架),它可以编辑存储在xsd模式文件描述的xml文件中的数据.有没有工具将xsd架构转换为C++类?
我有以下(作为示例)XML文件和XSD.
<?xml version="1.0" encoding="utf-8" ?>
<foo>
<DateVal>2010-02-18T01:02:03</DateVal>
<TimeVal>PT10H5M3S</TimeVal>
</foo>
Run Code Online (Sandbox Code Playgroud)
和
version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="foo">
<xs:complexType>
<xs:sequence>
<xs:element name="DateVal" type="xs:dateTime" />
<xs:element name="TimeVal" type="xs:duration" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
然后是以下C#代码:
static void Main(string[] args)
{
XmlDocument xd = new XmlDocument();
XmlSchema xs;
using (var fs = File.OpenRead(FilePath + "SimpleFields.xsd"))
{
xs = XmlSchema.Read(fs, null);
}
xd.Schemas.Add(xs);
xd.Load((FilePath + "SimpleFields.xml"));
xd.Validate(null);
var el_root = xd.DocumentElement;
var el_date = (XmlElement)el_root.SelectSingleNode("./DateVal");
//WANTED: el_date.Value = 2010-02-18 01:02:03 (as a DateTime Object) …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种方法来针对XSD验证大型XML文件.我看到了这个问题......验证XML的最佳方法......但答案都指向使用Xerces库进行验证.唯一的问题是,当我使用该库来验证180 MB文件时,我得到一个OutOfMemoryException.
是否有其他工具,库,策略来验证大于普通的XML文件?
编辑:SAX解决方案适用于java验证,但libxml工具的另外两个建议对于java之外的验证非常有用.
我有一组XSD,我可以从中生成数据访问类,存储过程等等.
我没有的是从这些生成数据库表的方法 - 是否有一个工具可以为我生成DDL语句?
这与数据集表中的创建数据库表不同,因为我没有数据集表,而是XSD.
有没有办法从xsd.exe控制输出文件名?
我的具体问题是,如果引用了导入的xsd,则会将其添加到文件名中.
我必须使用给定的XSD文件验证我的xml文件.想到最简单的方法就是xmllint,但我无法让它工作.谁能告诉我确切的命令?
我试过了:
xmllint --valid myxsd.xsd myxml.xml
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?这只会在命令行中输出2个文件
编辑:必须在控制台中执行此操作,因为在构建过程中将需要它