为什么我在包中的状态图上遇到 plantUML 语法错误? [已关闭]

问题描述 投票:0回答:1

我尝试在 plantuml 网络服务器上运行以下代码。

@startuml

package "CI/CD and Monitoring System" {

    state "CI/CD Pipeline" {
        [*] --> Idle
        state Idle {
            --> Running : Start Build
        }
        state Running {
            --> Completed : Build Successful
            --> Failed : Build Failed
        }
        state Completed {
            --> Deployed : Deployment Successful
        }
        state Failed {
            --> RollbackInitiated : Rollback Triggered
        }
        state RollbackInitiated {
            --> Idle : Rollback Completed
        }

        state "Testing" as Testing {
            --> TestingInProgress : Start Testing
        }
        state TestingInProgress {
            --> TestingCompleted : Testing Successful
            --> TestingFailed : Testing Failed
        }
        state TestingCompleted {
            --> Deployment
        }
        state TestingFailed {
            --> RollbackInitiated : Rollback Testing
        }

        state "Deployment" as Deployment {
            --> DeploymentInProgress : Start Deployment
        }
        state DeploymentInProgress {
            --> Deployed : Deployment Successful
            --> DeploymentFailed : Deployment Failed
        }
        state DeploymentFailed {
            --> RollbackInitiated : Rollback Deployment
        }
        state Deployed

        state "Rollback" as Rollback {
            --> Idle : Rollback Completed
        }
    }

    state "Monitoring System" {
        [*] --> Monitoring
        state Monitoring {
            --> AlertTriggered : Anomaly Detected
        }
        state AlertTriggered {
            --> IncidentCreated : Alert Acknowledged
            --> AlertResolved : Incident Resolved
        }
        state IncidentCreated {
            --> IncidentResolved : Issue Addressed
        }
        state AlertResolved {
            --> Monitoring : Issue Resolved
        }
    }

    User --> Monitoring
    Developer --> CI/CD Pipeline
    OperationsTeam --> Monitoring
    QualityAssurance --> CI/CD Pipeline

}

@enduml

我期待一个状态图/转换图,但它不断抛出错误:

enter image description here

我尝试使用 chatgpt 寻求帮助,但它不断返回我给它的相同代码。

这段代码有什么问题?

uml diagram plantuml statechart
1个回答
0
投票

原因是 PlantUML 语法取决于图的类型。

package
允许在用例图、类图、组件图甚至活动图中使用,但不适用于状态图。这是语法上的不一致,但已记录在案(图中未明确允许的内容是禁止的)。

package
与状态一起使用将导致 PlanUML 认为您想要混合不同类型的图,这是不允许的,除非您使用
allowmixing
指令:

@startuml
allowmixing
package "CI/CD and Monitoring System" {
  state S
  usecase X
  class Z
}
@enduml

然后你就可以得到一个像这样的打包状态图:

@startuml
allowmixing
package "CI/CD and Monitoring System" {
    state  "CI/CD Pipeline"
    state Running 
    Running    --> Completed : Build Successful
    Running   --> Failed : Build Failed
    state Completed 
    state Failed 
}
@enduml

不幸的是,一旦您在大括号之间使用嵌套状态,

alloxmixing
解决方法就不再起作用。这似乎是一个错误,因为语法错误表明:

@startuml
allowmixing
package "CI/CD and Monitoring System" {
    state  "CI/CD Pipeline" as s1 {
    }
}
@enduml

请注意,对使用长名称命名的状态(在双引号之间)使用花括号需要使用别名。这与包无关,适用于所有状态图。

最后但并非最不重要的一点是,即使您删除了包,状态图中也存在许多语法错误:大括号之间的所有内容都应该是嵌套的。特别地,其中定义的新状态是嵌套状态。其中的转换是嵌套状态之间的内部状态转换。所有状态转换都必须具有

source_state --> target_state
没有源状态的符号
--> target_state
是代码中真正的语法错误。

必要转换的示例(最好在所有转换之前定义顶部的所有状态):

state "CI/CD Pipeline" as s1 {
    [*] --> Idle
    Idle --> Running : Start Build
    state Running 
    Running --> Completed : Build Successful
    Running --> Failed : Build Failed
    state Completed 
    Completed    --> Deployed : Deployment Successful
    state Failed 
    Completed --> RollbackInitiated : Rollback Triggered
    state RollbackInitiated 
    RollbackInitiated  --> Idle : Rollback Completed
}

state "Monitoring System" as s2 {
}

User --> Monitoring
Developer --> s1
OperationsTeam --> Monitoring
QualityAssurance --> s1
© www.soinside.com 2019 - 2024. All rights reserved.