xsd 相关问题

XSD通常是指以W3C XML Schema格式编写的文档,其中包含特定类型的XML文档的描述。

当我们需要使用与另一个复杂类型几乎相似的值创建复杂类型时,使用complexContent还是创建复杂类型更好?

假设我有以下格式的复杂类型 假设我有以下格式的复杂类型 <xsd:complexType name="MyComplexType"> <xsd:sequence> <xsd:element name="FirstName" type="xsd:string"/> <xsd:element name="LastName" type="xsd:string"/> <xsd:element name="Age" type="xsd:int"/> <!-- Add more elements here as needed --> </xsd:sequence> </xsd:complexType> 现在如果想要另一种与MyComplexType具有相同内容的复杂类型,以下哪一个是最好的方法? 使用复杂内容 <xsd:complexType name="CustomComplexType"> <xsd:complexContent> <xsd:extension base="MyComplexType"> <xsd:sequence> <xsd:element name="FirstName" type="xsd:string"/> <xsd:element name="LastName" type="xsd:string"/> <!-- Add more elements here as needed, excluding Age --> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> 使用选择 <xsd:complexType name="MyComplexType"> <xsd:sequence> <xsd:choice> <xsd:element name="FirstName" type="xsd:string"/> <xsd:element name="LastName" type="xsd:string"/> <!-- Add more elements here as needed --> </xsd:choice> </xsd:sequence> </xsd:complexType> 完全创建新的复杂类型 <xsd:complexType name="MySimplifiedComplexType"> <xsd:sequence> <xsd:element name="FirstName" type="xsd:string"/> <xsd:element name="LastName" type="xsd:string"/> </xsd:sequence> </xsd:complexType> 为了方便且不影响现有模式,我采用了创建新的复杂类型的第三种方法。但想知道哪一种是最好的方法? 注意:无法针对我的案例编辑现有类型,因此也排除了第二个选项。但仍然希望包括在内,以便知道这是否是最好的方法。 如果从用例的角度来看,您的类型彼此不相关,您应该使用不同的类型来避免不相关实体之间的耦合。如果它们独立发散,稍后会节省您的精力。 如果它们相关,您可以利用扩展。将公共属性取出为一个基本类型,并从该基本类型扩展其他类型。 <xsd:complexType name="MyBaseComplexType"> <xsd:sequence> <!-- Common Elements --> <xsd:element name="FirstName" type="xsd:string"/> <xsd:element name="LastName" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="CustomComplexType"> <xsd:complexContent> <xsd:extension base="MyComplexType"> <xsd:sequence> <xsd:element name="Age" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="OtherCustomComplexType"> <xsd:complexContent> <xsd:extension base="MyComplexType"> <xsd:sequence> <xsd:element name="SomeOtherAttribute" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> CustomComplexType和OtherCustomComplexType现在将包含FirstName和LastName

回答 1 投票 0

XML 和 XML-Schema 基数问题

我有 XML 和 XML 架构。 XML 包含过滤器,并且可以在另一个过滤器中包含过滤器。现在我尝试在架构中使用 key 和 keyref 但收到错误 The cardinality o...

回答 1 投票 0

根据 NodeJS 中的架构 (xsd) 验证 XML

NPM 中的任何 XML 库是否支持根据 XSD 架构验证 XML? 我会审视自己,但是: $ npm 搜索 xml 2>/dev/null |厕所-l 212 注意:xsd包不是它...

回答 2 投票 0

UBL文档中的customizationID要放什么以及从哪里获取这些信息

我正在尝试根据此 XSD 文件和此 schematron 生成发票 UBL XML 文件。一旦生成,我将在这里验证它。 所以,根据 schematron,我必须有一个 Customizat...

回答 1 投票 0

如何从 Excel 2016 保存架构定义 XSD 文件?

Excel 2016 可以在内部创建从 XML 数据文件导入的 XML 架构定义。它出现在 Excel 的“XML 源”面板中,列出了 XML 元素层次结构,其中可以...

回答 1 投票 0

如果UBL中的miniOccurs =“0”,如何知道哪个元素是必需的

这是我的 XML 测试代码: 这是我的 XML 测试代码: <?xml version="1.0" encoding="UTF-8"?> <Invoice xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:ccts="urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-2" xmlns:stat="urn:oasis:names:specification:ubl:schema:xsd:DocumentStatusCode-1.0" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:udt="urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"> <cbc:ID>A00095678</cbc:ID> <cbc:IssueDate>2005-06-21</cbc:IssueDate> <cac:AccountingSupplierParty> </cac:AccountingSupplierParty> <cac:AccountingCustomerParty> </cac:AccountingCustomerParty> <cac:LegalMonetaryTotal> <cbc:PayableAmount currencyID="GBP">107.50</cbc:PayableAmount> </cac:LegalMonetaryTotal> <cac:InvoiceLine> <cbc:ID>A</cbc:ID> <cbc:LineExtensionAmount currencyID="GBP">100.00</cbc:LineExtensionAmount> <cac:Item> </cac:Item> </cac:InvoiceLine> </Invoice> 我将由于 minOccurs="1" 而需要的唯一元素放入 UBL.xsd 文件中。 当我尝试在此网站上验证我的 XML 时 [BR-01]-An Invoice shall have a Specification identifier (BT-24). [BR-04]-An Invoice shall have an Invoice type code (BT-3). [BR-05]-An Invoice shall have an Invoice currency code (BT-5). [BR-06]-An Invoice shall contain the Seller name (BT-27). [BR-07]-An Invoice shall contain the Buyer name (BT-44). [BR-08]-An Invoice shall contain the Seller postal address. [BR-10]-An Invoice shall contain the Buyer postal address (BG-8). [BR-CO-18]-An Invoice shall at least have one VAT breakdown group (BG-23). 我明白错误的含义,我的问题更多: UBL.xsd 文件说这些元素是强制性的是什么?我将必须生成有关其他 .xsd 文件的文件,并且我想了解哪些元素是必需的。 我认为这些错误来自 Schematron 验证,请参见例如https://github.com/ConnectingEurope/eInvoicing-EN16931/blob/validation-1.3.10/ubl/schematron/preprocessed/EN16931-UBL-validation-preprocessed.sch#L79.

回答 1 投票 0

如何在不更改目标命名空间的情况下扩展命名空间中的复杂类型

参考此:其他帖子 我正在尝试做与另一篇文章中的OP基本相同的事情;使用我自己添加的属性扩展复杂类型,而不更改主命名空间。我

回答 1 投票 0

java 17 从 xsd 文件生成 xml

我从java 8迁移到java 17 在java 8中我使用这个插件从xsd生成xml: org.jvnet.jaxb2.maven2 ...

回答 1 投票 0


将 XSD 与包含一起使用

这是一个 XSD: 这是一个 XSD: <?xml version="1.0"?> <xsd:schema elementFormDefault='unqualified' attributeFormDefault='unqualified' xmlns:xsd='http://www.w3.org/2001/XMLSchema' > <xsd:simpleType name='TheSimpleType'> <xsd:restriction base='xsd:string' /> </xsd:simpleType> </xsd:schema> 这是第二个 XSD,其中包括上面的 XSD: <?xml version="1.0" encoding="UTF-8" ?> <xsd:schema elementFormDefault='unqualified' attributeFormDefault='unqualified' xmlns:xsd='http://www.w3.org/2001/XMLSchema' targetNamespace='a' xmlns='a' > <xsd:include schemaLocation='Include.xsd' /> <xsd:element name = "TheElement" > <xsd:complexType> <xsd:attribute name="Code" type="TheSimpleType" use="required"/> </xsd:complexType> </xsd:element> </xsd:schema> 我需要将(第二个)XSD 读入 C# 中并且: 检查它是否是有效的 XSD,并且 根据它验证文件。 这里有一些需要在架构中阅读的 C# 代码: XmlSchemaSet schemaSet = new XmlSchemaSet(); foreach (string sd in Schemas) { using (XmlReader r = XmlReader.Create(new FileStream(sd, FileMode.Open))) { schemaSet.Add(XmlSchema.Read(r, null)); } } schemaSet.CompilationSettings = new XmlSchemaCompilationSettings(); schemaSet.Compile(); .Compile() 失败,因为“类型 'a:TheSimpleType' 未声明,或者不是简单类型。” 但是,如果满足以下任一条件,它就会起作用: 名称空间已从架构中删除,或者 命名空间已添加到包含中。 问题是:如何让 C# 在不编辑架构的情况下接受它? 我怀疑问题在于,虽然我已将两个模式放入 XmlSchemaSet 中,但我仍然需要告诉 C# 其中一个模式包含在另一个模式中,即它本身尚未解决。事实上,如果我只告诉 XmlSchemaSet 有关主 XSD(而不是包含)(没有(或有)命名空间),那么“类型 'TheSimpleType' 未声明,或者不是简单类型。” 因此,这似乎是一个关于解决的问题,包括:如何?! 问题在于打开架构以供在线阅读的方式: XmlReader.Create(new FileStream(sd, FileMode.Open) 我必须编写自己的XmlResolver,然后才能看到包含文件的路径是如何解析的:它来自可执行文件的目录,而不是来自父模式的目录。问题在于父架构未获取其 BaseURI 集。以下是打开架构的方法: XmlReader.Create(new FileStream(pathname, FileMode.Open, FileAccess.Read),null, pathname) 您可以使用 XmlSchema.Includes 将它们链接在一起。然后,您只需将主模式添加到模式集中即可: var includeSchema = XmlSchema.Read(XmlReader.Create(...), null); var mainSchema = XmlSchema.Read(XmlReader.Create(...), null); var include = new XmlSchemaInclude(); include.Schema = includeSchema; mainSchema.Includes.Add(include); var schemaSet = new XmlSchemaSet(); schemaSet.Add(mainSchema); schemaSet.Compile(); XmlSchemaSet 的默认行为是不尝试解析任何 XSD 包含的架构。为此,必须初始化 XmlResolver 属性。 XmlSchemaSet schemas = new XmlSchemaSet { XmlResolver = new XmlUrlResolver() }; 此外,您必须按照 @Richard Barraclough 的回答为 XmlReader 设置 baseUri。 试试这个:D public static XmlSchema LoadSchema(string pathname) { XmlSchema s = null; XmlValidationHandler h = new XmlValidationHandler(); using (XmlReader r = XmlReader.Create(new FileStream(pathname, FileMode.Open))) { s = XmlSchema.Read(r, new ValidationEventHandler(h.HandleValidationEvent)); } if (h.Errors.Count > 0) { throw new Exception(string.Format("There were {1} errors reading the XSD at {0}. The first is: {2}.", pathname, h.Errors.Count, h.Errors[0])); } return s; } public static XmlSchema LoadSchemaAndResolveIncludes(string pathname) { FileInfo f = new FileInfo(pathname); XmlSchema s = LoadSchema(f.FullName); foreach(XmlSchemaInclude i in s.Includes) { XmlSchema si = LoadSchema(f.Directory.FullName + @"\" + i.SchemaLocation); si.TargetNamespace = s.TargetNamespace; i.Schema = si; } return s; } public static List<ValidationEventArgs> Validate(string pathnameDocument, string pathnameSchema) { XmlSchema s = LoadSchemaAndResolveIncludes(pathnameSchema); XmlValidationHandler h = new XmlValidationHandler(); XmlDocument x = new XmlDocument(); x.Load(pathnameDocument); x.Schemas.Add(s); s.Compile(new ValidationEventHandler(h.HandleValidationEvent)); x.Validate(new ValidationEventHandler(h.HandleValidationEvent)); return h.Errors; } 特别注意si.TargetNamespace = s.TargetNamespace;。 显然,这假设包含被指定为相对于它们所包含到的模式的文件路径。 这是我编写的用于处理 xsd 验证的方法。希望这对某人有所帮助。 /// <summary> /// Ensure all xsd imported xsd documented are in same folder as master xsd /// </summary> public XsdXmlValidatorResult Validate(string xmlPath, string xsdPath, string xsdNameSpace) { var result = new XsdXmlValidatorResult(); var readerSettings = new XmlReaderSettings {ValidationType = ValidationType.Schema}; readerSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; readerSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; readerSettings.Schemas.Add(null, xsdPath); readerSettings.ValidationEventHandler += (sender, args) => { switch (args.Severity) { case XmlSeverityType.Warning: result.Warnings.Add(args.Message); break; case XmlSeverityType.Error: result.IsValid = false; result.Warnings.Add(args.Message); break; } }; var reader = XmlReader.Create(xmlPath, readerSettings); while (reader.Read()) { } return result; } 使用.net6,代码如下 - XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.XmlResolver = new XmlUrlResolver(); // Need this for resolving include and import settings.ValidationType = ValidationType.Schema; // This might not be needed, I am using same settings to validate the input xml settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; settings.Schemas.Add(null, "yourpath\\yourxsd.xsd"); settings.Schemas.Compile(); string xmlFilePath = "yourpath\\your.xml"; ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler); // Create an XmlReader for the XML file using (XmlReader reader = XmlReader.Create(xmlFilePath, settings)) { } 想要强调的是,对于 net6,我们必须设置 settings.Schemas.XmlResolver = new XmlUrlResolver() 而不是 settings.XmlResolver = new XmlUrlResolver()

回答 6 投票 0

在 XML 中定义唯一的序列

给定 XML 3.9.0 1.2.0 1.2.1 6.6.0 ...

回答 0 投票 0

JMS 序列化任何不同的属性

我需要像这样通过 XML 使用一些第三方 API ...

回答 1 投票 0

How to add custom String to List<String> jaxb xml adapter to an xsd generated class attribute

我们长期以来一直在使用 jaxb 将 XML 解组为我们可以在我们的系统中使用的 POJO。但是,直到最近我才发现 jaxb 如何解析 xml 提供的数据的问题,我...

回答 0 投票 0

使用 XJC 编译器使用 XSD 文件时如何删除生成的类文件的根元素中的命名空间

如何使用xjc 插件编译生成的XSD 文件的类文件的根元素中删除名称空间。我正在使用 JDK17 和 Jakarta。我只想将名称空间保留给子元素...

回答 0 投票 0

针对 XSD 验证包含命名空间的 XML 时出现问题

我正在尝试针对 XSD 验证 XML。 XML 在根元素中包含命名空间声明: xmlns="http://www.sample.com/itemfile" 目前,当我正在验证时,我...

回答 0 投票 0

如何使用 schemaLocation 或 noNamespaceSchemaLocation 将 XML 链接到 XSD?

我找到了一些解决这个问题的技巧,但仍然没有帮助我。 这是我的 XML 我找到了一些解决这个问题的技巧,但仍然没有帮助我。 这是我的 XML <?xml version="1.0" encoding="UTF-8"?> <work xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.w3.org/2001/XMLSchema-instance" tns:schemaLocation="myXSDSchema.xsd"> <tns:Objects> <tns:Object Name=":" Location=":"> </tns:Object> </tns:Objects> </work> 这是我的 XSD 文件: <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns = "http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> (some checks) </schema> 我的 XSD 文件位于与 XML 相同的文件夹中。 如何链接这两个文件? How to link an XSD to an XML document depends on the XML document is using namespaces or not... 没有命名空间 使用 xsi:noNamespaceSchemaLocation 提供有关要使用的 XSD 的提示: XML <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="example.xsd"> <!-- ... --> </root> XSD <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="root"> <!-- ... --> </xsd:element> </xsd:schema> With 命名空间 使用 xsi:schemaLocation 提供有关要使用的 XSD 的提示: XML <ns:root xmlns:ns="http://example.com/ns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.com/ns example-ns.xsd"> <!-- ... --> </ns:root> XSD <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/ns"> <xsd:element name="root"> <!-- ... --> </xsd:element> </xsd:schema>

回答 1 投票 0

Error: Unable to run code with xmlschema after build with pyinstaller

我是 xmlschema 和 pyinstaller 的新手,需要一些帮助来解决我遇到的错误。 我已经在 Python 3.6.8 中下载了 xmlschema (1.9) 和 pyinstaller (4.7)。 在我的 python 脚本中,我 h...

回答 3 投票 0

我在哪里可以找到 WebStorm 会喜欢的 XUL 的 XSD/DTD?

我正在尝试使用 JetBrains 的 WebStorm IDE 来处理我的 Mozilla Thunderbird 扩展。这可没给我这么轻松的时间……但最糟糕的是关于我的 XUL 文件的所有错误消息……

回答 0 投票 0

BizTalk LDAP 请求平面文件。如何在地图中做到这一点?

我正在使用 LDAP 请求根据要求获取 AD 数据。请求的结果是 xml 文档(缺少结果的模式。包含结果/XMLD 的消息...

回答 0 投票 0

使用 Schematron 进行 XML 验证

您是否知道使用 Schematron 验证 XML 文件的任何 C#/NET 库。 我搜索但找不到任何东西。 感谢您的帮助。 安东尼 我尝试使用 Schematron.NET 库,但是

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.