在 XML XSD 中定义递归代数数据类型

2024-01-01

想象一下我有一个递归代数数据类型 http://en.wikipedia.org/wiki/Algebraic_data_type像这样(Haskell 语法):

data Expr = Zero
          | One
          | Add Expr Expr
          | Mul Expr Expr

我想用 XML 来表示它,并且我想要它的 XSD 架构。

我已经弄清楚如何实现这个语法:

<Expr>
  <Add>
    <Expr>
      <Zero/>
    </Expr>
    <Expr>
      <Mul>
        <Expr>
          <One/>
        </Expr>
        <Expr>
          <Add>
            <Expr>
              <One/>
            </Expr>
            <Expr>
              <One/>
            </Expr>
          </Add>
        </Expr>
      </Mul>
    </Expr>
  </Add>
</Expr>

使用这个架构:

<xs:complexType name="Expr">
  <xs:choice minOccurs="1" maxOccurs="1">
    <xs:element minOccurs="1" maxOccurs="1" name="Zero" type="Zero" />
    <xs:element minOccurs="1" maxOccurs="1" name="One" type="One" />
    <xs:element minOccurs="1" maxOccurs="1" name="Add" type="Add" />
    <xs:element minOccurs="1" maxOccurs="1" name="Mul" type="Mul" />
  </xs:choice>
</xs:complexType>
<xs:complexType name="Zero">
  <xs:sequence>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="One">
  <xs:sequence>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="Add">
  <xs:sequence>
    <xs:element minOccurs="2" maxOccurs="2" name="Expr" type="Expr" />
  </xs:sequence>
</xs:complexType>
<xs:complexType name="Mul">
  <xs:sequence>
    <xs:element minOccurs="2" maxOccurs="2" name="Expr" type="Expr" />
  </xs:sequence>
</xs:complexType>

但我真正想要的是这样的语法:

<Add>
  <Zero/>
  <Mul>
    <One/>
    <Add>
      <One/>
      <One/>
    </Add>
  </Mul>
</Add>

这可能吗?

Thanks!


使用替换组:

  <xs:element name="Expr" abstract="true"/>

  <xs:element name="Zero" substitutionGroup="Expr">
    <xs:complexType/>
  </xs:element>

  <xs:element name="One" substitutionGroup="Expr">
    <xs:complexType/>
  </xs:element>

  <xs:element name="Add" substitutionGroup="Expr">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="2" maxOccurs="2" ref="Expr" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="Mul" substitutionGroup="Expr">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="2" maxOccurs="2" ref="Expr" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XML XSD 中定义递归代数数据类型 的相关文章

  • XSLT:CSV(或平面文件或纯文本)到 XML

    我正在尝试使用 XSLT 将纯文本文件转换为 XML 文件 我从 CSV 文件开始 因为这是一种众所周知的文件格式 我可以开始在 Google 上搜索示例 我偶然发现了这一点 http ajwelch blogspot com 2007 0
  • 从 shell 查找不包含特定注释的 XML 文件

    我想搜索 awk grep sed 几个 XML 文件 pom xml 文件 跳过某些文件夹 而且 第一个条件是它们必须包含标签
  • 将 xmllint 和 xpath 与不太完美的 HTML 文档一起使用?

    我有一个由现有工具生成的 HTML 页面 我无法更改该工具的输出 但是 我想用xmllint与 xpath从下载的网页中挑选一些特定信息的选项 问题是页面开头为 And xmllint几乎立即抛出错误 html out 2 parser e
  • 提供 xdm_node 时,saxonc 的 transform_to_file() 不生成输出文件

    这似乎是由 alinaOS 回答的SaxonC 11 1 transform to file 不生成输出文件 https stackoverflow com questions 71021778 saxonc 11 1 transform
  • Android - 可绘制形状样式的多种颜色和尺寸

    我试图为我的 TextView 设置圆形背景 因此我创建了如下形状样式 但我需要有多种颜色和多种尺寸 而 textSize 保持不变 所以我需要在样式中设置宽度 高度 以我的理解 图层列表 http developer android co
  • 如何为键盘上的 xml 中的功能键设置不同的背景?

    我正在开发 Android 键盘应用程序 我尝试为普通键和功能键设置不同的背景 但它不起作用
  • Android 子菜单布局

    我读到 Android 中的子菜单不支持图标 我想知道这是否已经改变 或者是否有类似的方法来生成支持图标的 子菜单 Currently This is My Submenu 这是它的 XML 文件 menu menu
  • 使用ASP/VB获取节点属性值

    我有以下 XML 架构
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • 扩展 XSD 文件

    我有一个带有枚举类型的 XSD 文件 我想创建一个 扩展 XSD 文件 它添加一些额外的枚举 但其他方面的行为就像主 XSD 一样 例如 主 XSD 文件包含以下内容
  • 如何在C#中从XML读取键值

    我有下面的 xml 格式文件 名为 ResourceData xml
  • 不使用 local-name() 或 name() 函数的 XPath

    我必须解析oprResult code使用 XPath 从下面的 XML 中获取 XPath 表达式 local name oprResult code 正在按预期工作 但是 我无法使用name or local name功能为 在我的解析
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 最好的 php DOM 2 数组函数是什么?

    我想解析xml文件 到目前为止 我发现最好的方法是使用 DOMDocument 类 示例 xml 字符串
  • 在Excel VBA中将图像(jpg)转换为base64?

    我需要在 Excel 中转换图像 或通过VBA 转为base64 最后我将进行XML输出 我怎样才能做到这一点 我需要引用 DOM 吗 我一直在读书这个问题 https stackoverflow com questions 169907
  • android中使用xml的新自定义字体方法

    随着 android 发布 O 预览版 添加了一个新功能 称为xml 中的字体 它很容易实现 但我没有什么疑问 让我首先添加最好的方法1 右键单击资源文件夹并前往新建 gt Android 资源目录 新的出现资源目录窗口 2 在资源类型列表
  • strings.xml 中的 Android 变量

    我在某处读到如何在 XML 文档中使用变量 他们说这很简单 我想也是如此 我在 Android strings xml 文件中成功地使用了它 我一整天都这样使用它 直到突然 android 停止解析它并停止将它视为变量 我这样使用它
  • 如何从 SOAP 响应中删除额外的结果标签

    我知道这个问题以前曾被问过 但我在任何地方都找不到答案 问题是我的 asmx 文件中有以下代码 namespace IrancellSmsServer SoapDocumentService RoutingStyle SoapService
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我

随机推荐

  • MySQL C# 连接字符串故障转移

    我知道我可以用逗号分隔连接字符串中的主机 它将使用不同的服务器 https www connectionstrings com mysql connector net mysqlconnection multiple servers htt
  • 是否可以仅在我的项目中使用 Django models 模块?

    我正在开发一个使用 Celery 的小型独立 python 应用程序 我使用 django 框架构建了这个 但我的应用程序只是后端 这意味着用户不需要访问我的网站 并且我的应用程序只是为了从 celery 接收任务队列并对数据库执行操作而构
  • 在哪里指定窗口组件的位置?

    我在 netBeans 平台中创建了模块 然后在那里创建了窗口组件 我想指定主窗口中的默认位置 例如职位 编辑 我在哪里可以做 在 NetBeans 7 下 从 输出 位置更改为 编辑器 位置 在您的 Window 类中 更改注释 TopC
  • 有哪些适合初学者的优秀 Erlang 入门/教程?

    有哪些可以深入了解 Erlang 和函数式编程的好链接 这可能值得一看http learnyousomeerlang com http learnyousomeerlang com
  • Xml 架构:空 targetNamespace

    在 Xml 架构中不使用 targetNamespace 属性或使用空属性是否合法 如果是这样 那么这意味着什么 我们是在 空命名空间 始终存在 中 添加 一些东西 还是创建一个与其他模式无关的 匿名命名空间 实例 xml 文档是什么样子的
  • 以编程方式创建的窗口居中

    我一直在使用这里的示例来创建一个自定义的无标题栏窗口 在 Mac OS X 上绘制自定义窗口 http cocoawithlove com 2008 12 drawing custom window on mac os x html 我发现
  • 使用 col-md-push-* 将列推到下一行

    我有以下 6 个构建模块 1 2 3 4 5 6 所有块在一行中都有一个 col sm 6 类 但由于块 3 超出了 bootstraps 12 列结构 它将跳转到下一行 完美就是我想要的 唯一的问题是 我想交换第 2 块和第 3 块 但它
  • Vue 3 不会检测到对 Vue 组件外部创建的对象所做的更改

    我有一个班级角色 Character ts This is called when server responds public setAttributeByType type StatsTypes value number void sw
  • 找不到实体类型属性的支持字段,并且该属性没有 getter

    我遇到了异常 System InvalidOperationException No backing field could be found for property ApartmentId of entity type Address
  • 从变量扩展环境变量

    我有一个看起来像这样的代码 my var MY FIRST ENV VAR 我的问题是 如何从环境变量 MY ENV VAR 中获取值 我已经尝试了很多东西 但主要问题是 my var 现在是一个字符串 我想这样做的原因是因为我有一些名称几
  • 将 Roslyn 编译的程序集加载到沙箱 ​​AppDomain 中

    我有一个代码片段 它使用脚本引擎编译脚本 并将程序集作为字节数组检索 现在我想加载这个Assembly在沙盒中 这就是我所拥有的 Assembly dynamicAssembly ScriptEngine engine Session se
  • 从 bash 脚本中生成并执行 R、Python 等脚本

    一段时间以来我一直在尝试寻找解决方案 但尚未找到令人满意的解决方案 我编写了很多 bash 脚本 但有时我想使用 R 或 Python 作为脚本的一部分 现在 我最终不得不编写两个脚本 原始的 bash 脚本执行前半部分任务 而 R 或 P
  • C/C++ 罕见关键字 - register、volatile、extern、explicit [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 您能否快速介绍一下这 4 个关键字的
  • 如何以编程方式获取 GC 类直方图

    我想以编程方式获得以下命令的相同结果 jcmd
  • wait-notify 和 CountDownLatch 之间的区别

    我需要一些帮助来了解使用 CountDownLatch 相对于传统等待通知的优势 我认为notifyAll 确实做了同样的事情 而且看起来更容易使用 可能是因为熟悉 另外 CountDownLatch 中的 wait 和 wait 有什么区
  • 如何将所有

    标签写入文本文件

    我需要编写 Qt C 代码来提取所有 p 标签 以将每个 p 标签写入 txt 文件 例如 如果我有以下 HTML 页面 h1 My First Heading h1 p My first paragraph p p My second p
  • 如何暂时禁用 MySQL 中的外键约束?

    是否可以暂时禁用 MySQL 中的约束 我有两个 Django 模型 每个模型都有另一个的外键 由于外键约束 删除模型的实例会返回错误 cursor execute DELETE FROM myapp item WHERE n s n tr
  • Maven 不会在复制依赖期间排除

    我有一个使用 Netty 4 0 29 的项目 并且我有另一个引入 netty 3 9 0 的依赖项 我添加了排除项 但当我运行复制依赖项时 它仍然在 3 9 0 中
  • Phoenix App 中预编译的单页应用程序

    我有一个预编译的 ember js 应用程序 其中 fronted js framework 在这里无关紧要 它基本上由一个带有 index html 文件的文件夹和一些 js css 资源组成 我将此文件夹放在我的 phoenix 应用程
  • 在 XML XSD 中定义递归代数数据类型

    想象一下我有一个递归代数数据类型 http en wikipedia org wiki Algebraic data type像这样 Haskell 语法 data Expr Zero One Add Expr Expr Mul Expr