我需要表达
或类似地,NY DMV有complex set of documents and prerequisites以获得驾驶执照。
问题
用例
我正在开发一个应用程序,用户可以定义访问某些数据的资格规则。这些规则可能具有先决条件或访问它的键/值范围。
我在想XML,但这可能会变得很麻烦。就像swagger已成为处理Web服务的“更简单方法”一样,我正在寻找类似的“简单”语法来处理这些规则。
答案 0 :(得分:1)
EDIT2: 为了更准确,我重新构建了我的答案......
主题的背景实际上是我认为的实体关系管理。我无法与之相提并论......有关该主题的更多信息:Entity–relationship model 这似乎是一个多用户问题,使用数据库将帮助您。您可以在哪里定义一些访问权限。 另一方面,在现实世界中,这将是服务器/客户端(云)场景。在MS平台上可能有实体框架......有关该主题的更多信息:Entity Framework
XML和JSON格式都非常平台。
如果您选择XML,那么您可以使用XSD定义一些约束,稍后您可以使用它来验证采集的数据。此外,您可以使用XSLT文件以多种不同方式转换或表示数据。
为了理解使用XSD的XML验证,您可以找到这个link!
为了更具体,我们必须进一步定义一些结构和实验。所以让我们作为实验:
<Users>
<User>
<Identity ID="2015/PHY/S001201">
<Name>My First Student</Name>
<SomeOtherDetails/>
</Identity>
<Certificates>
<Certificate ID="2015/PHY/M001/V01" Name="Math I.">
<State>Finished</State>
<Grade>Excellent</Grade>
<Date>30.12.2015</Date>
</Certificate>
<Certificate ID="2015/PHY/M001/V01" Name="Math I.">
<State>Finished</State>
</Certificate>
</Certificates>
</User>
</Users>
现在我们可以创建一些规则:
<xsl:output method="xml" indent="yes" encoding ="utf-8"/>
<xsl:template match="/Users">
<Result>
<xsl:for-each select="./User">
<xsl:apply-templates select="."/>
</xsl:for-each>
</Result>
</xsl:template>
<!-- This is my rule: user can apply only if he/she fills the requirements -->
<xsl:template match="User[ Certificates/Certificate/@ID = '2015/PHY/M001/V01' and Certificates/Certificate/State = 'Finished' ]">
<xsl:copy>
<xsl:apply-templates select="Identity"/>
<Course ID="2012/PHY/M002/V03">
<Permission>Granted</Permission>
</Course>
</xsl:copy>
</xsl:template>
<xsl:template match="User"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
注意:实际匹配模式有一些错误,打算说明这个概念!
这是输出:
<Result>
<User>
<Identity ID="2015/PHY/S001201">
<Name>My First Student</Name>
<SomeOtherDetails></SomeOtherDetails>
</Identity>
<Course ID="2012/PHY/M002/V03">
<Permission>Granted</Permission>
</Course>
</User>
</Result>
因此,一般来说,我们必须描述具有特定属性的学生和教授。
回答:所以XML / XSLT肯定可以表达非常复杂的数据和条件!